{"id":5623,"date":"2026-06-02T09:47:24","date_gmt":"2026-06-02T09:47:24","guid":{"rendered":"https:\/\/viiewerr.com\/tiktok\/image\/"},"modified":"2026-06-27T11:37:15","modified_gmt":"2026-06-27T11:37:15","slug":"image","status":"publish","type":"page","link":"https:\/\/viiewerr.com\/tiktok\/image\/","title":{"rendered":"Tiktok Image Viewer: HD Photos"},"content":{"rendered":"<style type=\"text\/css\">\n.tc-wp-island {\n  width: 100%;\n  max-width: 100%;\n  min-width: 0;\n  box-sizing: border-box;\n  display: flow-root;\n  isolation: isolate;\n  position: relative;\n}\n.tc-wp-island > * {\n  min-width: 0;\n}\n.tc-wp-island *,\n.tc-wp-island *::before,\n.tc-wp-island *::after {\n  box-sizing: border-box;\n}\n.tc-wp-island img,\n.tc-wp-island video,\n.tc-wp-island svg,\n.tc-wp-island iframe {\n  max-width: 100%;\n  height: auto;\n}\n.tc-wp-island .tc-wp-tool {\n  max-width: 100%;\n  min-width: 0;\n}\n.tc-wp-island .tc-wp-tool-html,\n.tc-wp-island .tc-wp-tool-content,\n.tc-wp-island .tc-wp-other {\n  max-width: 100%;\n  min-width: 0;\n  overflow-wrap: anywhere;\n  word-break: break-word;\n}\n\/* Keep tool in post content flow \u2014 not overlapping theme header \/ hero band *\/\n.tc-wp-island {\n  clear: both;\n  z-index: 1;\n}\n.tc-wp-island .tc-wp-tool {\n  position: relative;\n  z-index: 0;\n  clear: both;\n  margin-top: 0;\n  margin-bottom: 1.25rem;\n}\n.tc-wp-island .tc-wp-tool-html {\n  position: relative;\n  z-index: 0;\n  clear: both;\n  contain: layout;\n}\n.tc-wp-island .tc-wp-tool-html > *:first-child {\n  position: relative !important;\n  top: auto !important;\n  left: auto !important;\n  right: auto !important;\n  margin-top: 0 !important;\n  width: 100%;\n  max-width: 100%;\n  box-sizing: border-box;\n}\nbody:has(.tc-wp-island) #main-header,\nbody:has(.tc-wp-island) header.site-header,\nbody:has(.tc-wp-island) .site-header,\nbody:has(.tc-wp-island) #header,\nbody:has(.tc-wp-island) .et-fixed-header,\nbody:has(.tc-wp-island) .elementor-location-header {\n  z-index: 200;\n}\n\/* Space between WP Coder tool + content shortcodes on publish\/draft pages *\/\n.tc-wp-island .tc-wp-tool-html + .tc-wp-tool-content {\n  margin-top: 20px;\n}\n.tc-wp-island .tc-wp-bcd-codes {\n  display: flex;\n  flex-direction: column;\n  gap: 20px;\n}\n\/* Full-width: hide theme sidebar when a ToolsChecker island is present *\/\nbody:has(.tc-wp-island) #sidebar,\nbody:has(.tc-wp-island) .sidebar,\nbody:has(.tc-wp-island) #secondary,\nbody:has(.tc-wp-island) .widget-area,\nbody:has(.tc-wp-island) aside.sidebar,\nbody:has(.tc-wp-island) #right-sidebar,\nbody:has(.tc-wp-island) #left-sidebar,\nbody:has(.tc-wp-island) .sidebar-primary,\nbody:has(.tc-wp-island) .sidebar-secondary,\nbody:has(.tc-wp-island) .ast-sidebar,\nbody:has(.tc-wp-island) .site-sidebar {\n  display: none !important;\n}\n\/* Copygen: hide default page title\/breadcrumb band \u2014 tool pages use template-homepage like category *\/\nbody:has(.tc-wp-island) section.page_header_default,\nbody:has(.tc-wp-island) .page_header_default {\n  display: none !important;\n}\n@media (min-width: 981px) {\n  body:has(.tc-wp-island) #left-area,\n  body:has(.tc-wp-island) #primary,\n  body:has(.tc-wp-island) #content-area,\n  body:has(.tc-wp-island) #content-area .container,\n  body:has(.tc-wp-island) .content-area,\n  body:has(.tc-wp-island) main.site-main,\n  body:has(.tc-wp-island) .site-content .content-area {\n    width: 100% !important;\n    max-width: 100% !important;\n    float: none !important;\n    padding-right: 0 !important;\n    padding-left: 0 !important;\n  }\n  body:has(.tc-wp-island) #main-content .container:before {\n    display: none !important;\n  }\n}\n\/* Tool pages: keep theme H1 readable \u2014 smaller type, full content width, 1\u20132 lines *\/\nbody:has(.tc-wp-island) .fontib-v2-hero-inner {\n  width: min(100%, calc(100vw - 40px)) !important;\n  max-width: 1320px !important;\n}\nbody:has(.tc-wp-island) .fontib-v2-title,\nbody:has(.tc-wp-island) #left-area > .entry-title,\nbody:has(.tc-wp-island) .entry-title h1,\nbody:has(.tc-wp-island) h1.entry-title,\nbody:has(.tc-wp-island) .page-title,\nbody:has(.tc-wp-island) .et_pb_title_container h1 {\n  max-width: 100% !important;\n  width: 100%;\n  font-size: clamp(24px, 2.6vw, 38px) !important;\n  line-height: 1.2 !important;\n  letter-spacing: -0.01em;\n}\n<\/style>\n<div class=\"tc-wp-island\">\n<section class=\"tc-wp-tool\" data-tool-index=\"1\">\n<div class=\"tc-wp-tool-html\"><link href=\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap\" rel=\"stylesheet\">\r\n<link href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.4.0\/css\/all.min.css\" rel=\"stylesheet\">\r\n<style>\r\n    :root {\r\n        \/* Professional Color Scheme *\/\r\n        --primary: #1e3a8a;\r\n        --secondary: #0f766e;\r\n        --accent: #7e22ce;\r\n        --primary-light: #3b82f6;\r\n        --secondary-light: #14b8a6;\r\n        --accent-light: #a855f7;\r\n        --neutral-dark: #0f172a;\r\n        --neutral-medium: #1e293b;\r\n        --neutral-light: #334155;\r\n        --text-primary: #f1f5f9;\r\n        --text-secondary: #cbd5e1;\r\n        --text-muted: #94a3b8;\r\n        --bg-primary: #020617;\r\n        --bg-secondary: #0f172a;\r\n        --bg-tertiary: #1e293b;\r\n        --card-bg: rgba(30, 41, 59, 0.8);\r\n        --input-bg: rgba(15, 23, 42, 0.9);\r\n        --border-color: rgba(148, 163, 184, 0.2);\r\n        --shadow-sm: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\r\n        --shadow-md: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\r\n        --shadow-lg: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\r\n        --shadow-xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);\r\n        --shadow-primary: 0 0 20px rgba(30, 58, 138, 0.3);\r\n        --shadow-secondary: 0 0 20px rgba(15, 118, 110, 0.3);\r\n        --shadow-accent: 0 0 20px rgba(126, 34, 206, 0.3);\r\n    }\r\n\r\n    * {\r\n        margin: 0;\r\n        padding: 0;\r\n        box-sizing: border-box;\r\n    }\r\n\r\n    .tiktok_body {\r\n        font-family: 'Inter', sans-serif;\r\n        background: linear-gradient(135deg, \r\n                var(--bg-primary) 0%, \r\n                var(--bg-secondary) 25%, \r\n                var(--bg-tertiary) 50%, \r\n                var(--neutral-medium) 75%, \r\n                var(--neutral-dark) 100%);\r\n        background-size: 400% 400%;\r\n        animation: gradientShift 20s ease infinite;\r\n        color: var(--text-primary);\r\n        min-height: 60vh;\r\n        overflow-x: hidden;\r\n        position: relative;\r\n    }\r\n\r\n    .tiktok_body::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(30, 58, 138, 0.15) 0%, transparent 50%),\r\n                radial-gradient(circle at 80% 70%, rgba(15, 118, 110, 0.15) 0%, transparent 50%),\r\n                radial-gradient(circle at 50% 50%, rgba(126, 34, 206, 0.1) 0%, transparent 60%);\r\n        pointer-events: none;\r\n        z-index: -1;\r\n        animation: backgroundFloat 15s ease-in-out infinite;\r\n    }\r\n\r\n    .container_tiktok {\r\n        max-width: 1200px;\r\n        margin: 0 auto;\r\n        padding: 4rem;\r\n        position: relative;\r\n        z-index: 1;\r\n    }\r\n\r\n    \/* Header *\/\r\n    .header {\r\n        text-align: center;\r\n        margin-bottom: 2.5rem;\r\n        animation: fadeInDown 1s ease-out;\r\n    }\r\n\r\n    .logo {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 1.5rem;\r\n        margin-bottom: 1rem;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .logo-icon {\r\n        width: 70px;\r\n        height: 70px;\r\n        background: linear-gradient(135deg, var(--primary), var(--primary-light));\r\n        border-radius: 16px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        font-size: 28px;\r\n        color: white;\r\n        box-shadow: var(--shadow-lg), var(--shadow-primary);\r\n        animation: logoFloat 4s ease-in-out infinite;\r\n        position: relative;\r\n        overflow: hidden;\r\n        border: 2px solid var(--border-color);\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .logo-icon::before {\r\n        content: '';\r\n        position: absolute;\r\n        top: -50%;\r\n        left: -50%;\r\n        width: 200%;\r\n        height: 200%;\r\n        background: linear-gradient(45deg, transparent, rgba(255, 255, 255, 0.3), transparent);\r\n        animation: logoShine 3s ease-in-out infinite;\r\n    }\r\n\r\n    .logo-text {\r\n        font-size: clamp(1.8rem, 5vw, 3.5rem);\r\n        font-weight: 900;\r\n        background: linear-gradient(135deg, var(--primary-light), var(--secondary-light), var(--accent-light));\r\n        background-size: 300% 300%;\r\n        -webkit-background-clip: text;\r\n        -webkit-text-fill-color: transparent;\r\n        letter-spacing: -1px;\r\n        animation: textGradient 4s ease infinite;\r\n        filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.3));\r\n        text-align: center;\r\n    }\r\n\r\n    .subtitle {\r\n        font-size: clamp(0.9rem, 2.5vw, 1.1rem);\r\n        color: var(--text-secondary);\r\n        font-weight: 500;\r\n        margin-top: 0.5rem;\r\n        animation: subtitleGlow 3s ease-in-out infinite;\r\n        text-align: center;\r\n        padding: 0 1rem;\r\n    }\r\n\r\n    \/* Search Section *\/\r\n    .search-section {\r\n        background: var(--card-bg);\r\n        backdrop-filter: blur(25px);\r\n        border: 1px solid var(--border-color);\r\n        border-radius: 20px;\r\n        padding: clamp(1.5rem, 4vw, 2.5rem);\r\n        margin-bottom: 2rem;\r\n        box-shadow: var(--shadow-xl), var(--shadow-primary);\r\n        animation: fadeInUp 1s ease-out 0.2s both;\r\n        position: relative;\r\n        overflow: hidden;\r\n    }\r\n\r\n    .search-section::before {\r\n        content: '';\r\n        position: absolute;\r\n        top: 0;\r\n        left: 0;\r\n        right: 0;\r\n        height: 2px;\r\n        background: linear-gradient(90deg,\r\n                transparent,\r\n                var(--primary),\r\n                var(--secondary),\r\n                var(--accent),\r\n                transparent);\r\n        animation: borderFlow 3s ease-in-out infinite;\r\n    }\r\n\r\n    .search-section::after {\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: linear-gradient(135deg,\r\n                rgba(30, 58, 138, 0.05) 0%,\r\n                rgba(15, 118, 110, 0.05) 50%,\r\n                rgba(126, 34, 206, 0.05) 100%);\r\n        pointer-events: none;\r\n        border-radius: 20px;\r\n        animation: overlayPulse 6s ease-in-out infinite;\r\n    }\r\n\r\n    .input-group {\r\n        position: relative;\r\n        margin-bottom: 1.5rem;\r\n        z-index: 2;\r\n    }\r\n\r\n    .input-field {\r\n        width: 100% !important;\r\n        padding: clamp(1rem, 3vw, 1.5rem) clamp(1.2rem, 4vw, 2rem) !important;\r\n        background: var(--input-bg) !important;\r\n        border: 1px solid var(--border-color) !important;\r\n        border-radius: 16px !important;\r\n        color: var(--text-primary) !important;\r\n        font-size: clamp(0.9rem, 2.5vw, 1.1rem) !important;\r\n        font-weight: 500 !important;\r\n        transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1) !important;\r\n        outline: none !important;\r\n        backdrop-filter: blur(15px) !important;\r\n        box-shadow: var(--shadow-sm), inset 0 2px 10px rgba(0, 0, 0, 0.2) !important;\r\n        position: relative;\r\n    }\r\n\r\n    .input-field::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(30, 58, 138, 0.1) 0%,\r\n                rgba(15, 118, 110, 0.1) 100%);\r\n        border-radius: 16px;\r\n        opacity: 0;\r\n        transition: opacity 0.4s ease;\r\n        pointer-events: none;\r\n    }\r\n\r\n    .input-field:focus {\r\n        border-color: var(--primary) !important;\r\n        box-shadow:\r\n            0 0 0 4px rgba(30, 58, 138, 0.2),\r\n            var(--shadow-primary),\r\n            inset 0 2px 10px rgba(0, 0, 0, 0.3);\r\n        background: var(--input-bg) !important;\r\n        transform: translateY(-3px) scale(1.01) !important;\r\n        animation: inputFocusGlow 2s ease-in-out infinite !important;\r\n    }\r\n\r\n    .input-field:focus::before {\r\n        opacity: 1;\r\n    }\r\n\r\n    .input-field::placeholder {\r\n        color: var(--text-muted);\r\n        transition: all 0.3s ease;\r\n        font-weight: 400;\r\n    }\r\n\r\n    .input-field:focus::placeholder {\r\n        color: var(--text-secondary);\r\n        transform: translateY(-2px);\r\n        opacity: 0.8;\r\n    }\r\n\r\n    .input-actions {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        margin-top: 1rem;\r\n        font-size: clamp(0.8rem, 2vw, 0.9rem);\r\n        color: var(--text-muted);\r\n        z-index: 2;\r\n        position: relative;\r\n        flex-wrap: wrap;\r\n        gap: 0.5rem;\r\n    }\r\n\r\n    .paste-btn {\r\n        background: linear-gradient(135deg, var(--secondary), var(--secondary-light));\r\n        border: none;\r\n        color: white;\r\n        cursor: pointer;\r\n        padding: clamp(0.5rem, 2vw, 0.7rem) clamp(0.8rem, 3vw, 1.4rem);\r\n        border-radius: 12px;\r\n        transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 0.5rem;\r\n        font-weight: 600;\r\n        box-shadow: var(--shadow-sm), var(--shadow-secondary);\r\n        font-size: clamp(0.8rem, 2vw, 0.9rem);\r\n        position: relative;\r\n        overflow: hidden;\r\n        border: 1px solid rgba(15, 118, 110, 0.3);\r\n        min-height: 44px;\r\n    }\r\n\r\n    .paste-btn::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.3), transparent);\r\n        transition: left 0.5s;\r\n    }\r\n\r\n    .paste-btn:hover::before,\r\n    .paste-btn:active::before {\r\n        left: 100%;\r\n    }\r\n\r\n    .paste-btn:hover,\r\n    .paste-btn:active {\r\n        transform: translateY(-3px) scale(1.05);\r\n        box-shadow: var(--shadow-md), var(--shadow-secondary);\r\n        background: linear-gradient(135deg, var(--secondary-light), var(--secondary));\r\n    }\r\n\r\n    .action-buttons {\r\n        display: grid;\r\n        grid-template-columns: 1fr;\r\n        gap: 1rem;\r\n        align-items: center;\r\n        z-index: 2;\r\n        position: relative;\r\n    }\r\n\r\n    .search-btn {\r\n        background: linear-gradient(135deg, var(--primary), var(--primary-light));\r\n        background-size: 200% 200%;\r\n        color: white;\r\n        border: none;\r\n        padding: clamp(1rem, 3vw, 1.4rem) clamp(1.5rem, 4vw, 2.8rem);\r\n        border-radius: 16px;\r\n        font-size: clamp(0.9rem, 2.5vw, 1.1rem);\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n        transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\r\n        position: relative;\r\n        overflow: hidden;\r\n        box-shadow: var(--shadow-md), var(--shadow-primary);\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 0.75rem;\r\n        min-height: 56px;\r\n        animation: buttonPulse 4s ease-in-out infinite;\r\n        border: 2px solid rgba(30, 58, 138, 0.3);\r\n        width: 100%;\r\n    }\r\n\r\n    .search-btn::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.3), transparent);\r\n        transition: left 0.6s;\r\n    }\r\n\r\n    .search-btn:hover:not(:disabled)::before,\r\n    .search-btn:active:not(:disabled)::before {\r\n        left: 100%;\r\n    }\r\n\r\n    .search-btn:hover:not(:disabled),\r\n    .search-btn:active:not(:disabled) {\r\n        transform: translateY(-4px) scale(1.02);\r\n        box-shadow: var(--shadow-xl), var(--shadow-primary);\r\n        background-position: 100% 100%;\r\n        animation: buttonHoverGlow 1s ease-in-out infinite;\r\n    }\r\n\r\n    .search-btn:disabled {\r\n        opacity: 0.6;\r\n        cursor: not-allowed;\r\n        transform: none;\r\n        animation: none;\r\n    }\r\n\r\n    .search-another-btn {\r\n        background: linear-gradient(135deg, var(--accent), var(--accent-light));\r\n        color: white;\r\n        border: none;\r\n        padding: clamp(0.8rem, 2.5vw, 1.1rem) clamp(1rem, 3vw, 1.6rem);\r\n        border-radius: 14px;\r\n        cursor: pointer;\r\n        transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 0.5rem;\r\n        min-height: 48px;\r\n        width: 100%;\r\n        font-weight: 600;\r\n        box-shadow: var(--shadow-sm), var(--shadow-accent);\r\n        font-size: clamp(0.8rem, 2vw, 0.95rem);\r\n        position: relative;\r\n        overflow: hidden;\r\n        border: 2px solid rgba(126, 34, 206, 0.3);\r\n    }\r\n\r\n    .search-another-btn::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-another-btn:hover::before,\r\n    .search-another-btn:active::before {\r\n        left: 100%;\r\n    }\r\n\r\n    .search-another-btn:hover,\r\n    .search-another-btn:active {\r\n        transform: translateY(-3px) scale(1.05);\r\n        box-shadow: var(--shadow-md), var(--shadow-accent);\r\n    }\r\n\r\n    \/* Loading Animation *\/\r\n    .loading {\r\n        display: none;\r\n        text-align: center;\r\n        padding: clamp(2rem, 5vw, 3.5rem) clamp(1.5rem, 4vw, 2.5rem);\r\n        background: var(--card-bg);\r\n        backdrop-filter: blur(25px);\r\n        border: 1px solid var(--border-color);\r\n        border-radius: 20px;\r\n        margin: 2rem 0;\r\n        box-shadow: var(--shadow-xl), var(--shadow-primary);\r\n    }\r\n\r\n    .loading::before {\r\n        content: '';\r\n        position: absolute;\r\n        top: 0;\r\n        left: 0;\r\n        right: 0;\r\n        height: 2px;\r\n        background: linear-gradient(90deg,\r\n                transparent,\r\n                var(--primary),\r\n                var(--secondary),\r\n                transparent);\r\n        border-radius: 20px 20px 0 0;\r\n    }\r\n\r\n    .loading-spinner {\r\n        width: clamp(60px, 15vw, 100px);\r\n        height: clamp(60px, 15vw, 100px);\r\n        margin: 0 auto 2rem;\r\n        position: relative;\r\n    }\r\n\r\n    .spinner-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    .spinner-ring:nth-child(1) {\r\n        width: 100%;\r\n        height: 100%;\r\n        border-top-color: var(--primary);\r\n        border-right-color: var(--primary);\r\n        animation-duration: 2s;\r\n        box-shadow: 0 0 20px rgba(30, 58, 138, 0.4);\r\n    }\r\n\r\n    .spinner-ring:nth-child(2) {\r\n        width: 75%;\r\n        height: 75%;\r\n        top: 12.5%;\r\n        left: 12.5%;\r\n        border-bottom-color: var(--secondary);\r\n        border-left-color: var(--secondary);\r\n        animation-duration: 1.5s;\r\n        animation-direction: reverse;\r\n        box-shadow: 0 0 15px rgba(15, 118, 110, 0.4);\r\n    }\r\n\r\n    .spinner-ring:nth-child(3) {\r\n        width: 50%;\r\n        height: 50%;\r\n        top: 25%;\r\n        left: 25%;\r\n        border-top-color: var(--accent);\r\n        animation-duration: 1s;\r\n        box-shadow: 0 0 10px rgba(126, 34, 206, 0.4);\r\n    }\r\n\r\n    .loading-text {\r\n        font-size: clamp(1rem, 3vw, 1.4rem);\r\n        font-weight: 700;\r\n        margin-bottom: 0.5rem;\r\n        background: linear-gradient(135deg, var(--primary-light), var(--secondary-light), var(--accent-light));\r\n        background-size: 200% 200%;\r\n        -webkit-background-clip: text;\r\n        -webkit-text-fill-color: transparent;\r\n        animation: textGradient 3s ease infinite;\r\n    }\r\n\r\n    .loading-subtext {\r\n        color: var(--text-muted);\r\n        font-size: clamp(0.8rem, 2vw, 1rem);\r\n        animation: textFade 2s ease-in-out infinite;\r\n    }\r\n\r\n    \/* Main Video Section *\/\r\n    .video-section {\r\n        display: none;\r\n        animation: fadeInUp 0.8s ease-out;\r\n        background: var(--card-bg);\r\n        backdrop-filter: blur(25px);\r\n        border: 1px solid var(--border-color);\r\n        border-radius: 20px;\r\n        padding: clamp(1.5rem, 4vw, 2.5rem);\r\n        box-shadow: var(--shadow-xl), var(--shadow-primary);\r\n        position: relative;\r\n        overflow: hidden;\r\n    }\r\n\r\n    .video-section::before {\r\n        content: '';\r\n        position: absolute;\r\n        top: 0;\r\n        left: 0;\r\n        right: 0;\r\n        height: 2px;\r\n        background: linear-gradient(90deg,\r\n                transparent,\r\n                var(--primary),\r\n                var(--secondary),\r\n                var(--accent),\r\n                transparent);\r\n        animation: borderFlow 4s ease-in-out infinite;\r\n    }\r\n\r\n    \/* Author Info *\/\r\n    .author-section {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: clamp(0.8rem, 3vw, 1.2rem);\r\n        margin-bottom: 1.5rem;\r\n        padding: clamp(1rem, 3vw, 1.5rem);\r\n        background: linear-gradient(135deg,\r\n                rgba(30, 58, 138, 0.15) 0%,\r\n                rgba(15, 118, 110, 0.15) 50%,\r\n                rgba(126, 34, 206, 0.15) 100%);\r\n        border-radius: 16px;\r\n        border: 1px solid var(--border-color);\r\n        width: 100%;\r\n        box-shadow: var(--shadow-sm), var(--shadow-primary);\r\n        transition: all 0.4s ease;\r\n        flex-wrap: wrap;\r\n        justify-content: center;\r\n        text-align: center;\r\n    }\r\n\r\n    .author-section:hover,\r\n    .author-section:active {\r\n        transform: translateY(-3px);\r\n        box-shadow: var(--shadow-md), var(--shadow-primary);\r\n    }\r\n\r\n    .author-avatar {\r\n        width: clamp(50px, 12vw, 60px);\r\n        height: clamp(50px, 12vw, 60px);\r\n        border-radius: 50%;\r\n        object-fit: cover;\r\n        border: 3px solid transparent;\r\n        background: linear-gradient(135deg, var(--primary), var(--secondary));\r\n        padding: 2px;\r\n        box-shadow: var(--shadow-sm), var(--shadow-primary);\r\n        animation: avatarPulse 4s ease-in-out infinite;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .author-details {\r\n        flex: 1;\r\n        min-width: 0;\r\n    }\r\n\r\n    .author-details h3 {\r\n        font-size: clamp(1rem, 3vw, 1.2rem);\r\n        font-weight: 700;\r\n        margin-bottom: 0.25rem;\r\n        background: linear-gradient(135deg, var(--primary-light), var(--secondary-light));\r\n        -webkit-background-clip: text;\r\n        -webkit-text-fill-color: transparent;\r\n        word-break: break-word;\r\n    }\r\n\r\n    .author-username {\r\n        color: var(--text-muted);\r\n        font-size: clamp(0.8rem, 2.5vw, 0.95rem);\r\n        font-weight: 500;\r\n        word-break: break-word;\r\n    }\r\n\r\n    \/* Title *\/\r\n    .video-title {\r\n        font-size: clamp(1.2rem, 4vw, 1.6rem);\r\n        font-weight: 800;\r\n        margin-bottom: 1.5rem;\r\n        line-height: 1.4;\r\n        color: var(--text-primary);\r\n        width: 100%;\r\n        text-align: center;\r\n        text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);\r\n        word-break: break-word;\r\n        padding: 0 1rem;\r\n    }\r\n\r\n    \/* Stats Grid *\/\r\n    .video-stats {\r\n        display: grid;\r\n        grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));\r\n        gap: clamp(0.5rem, 2vw, 1rem);\r\n        margin-bottom: 2rem;\r\n    }\r\n\r\n    .stat-item {\r\n        background: var(--card-bg);\r\n        padding: clamp(0.8rem, 3vw, 1.2rem);\r\n        border-radius: 14px;\r\n        text-align: center;\r\n        border: 1px solid var(--border-color);\r\n        transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\r\n        position: relative;\r\n        overflow: hidden;\r\n        box-shadow: var(--shadow-sm);\r\n        backdrop-filter: blur(15px);\r\n        min-height: 80px;\r\n        display: flex;\r\n        flex-direction: column;\r\n        justify-content: center;\r\n    }\r\n\r\n    .stat-item::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(30, 58, 138, 0.3), transparent);\r\n        transition: left 0.6s;\r\n    }\r\n\r\n    .stat-item:hover::before,\r\n    .stat-item:active::before {\r\n        left: 100%;\r\n    }\r\n\r\n    .stat-item:hover,\r\n    .stat-item:active {\r\n        transform: translateY(-5px) scale(1.02);\r\n        box-shadow: var(--shadow-md), var(--shadow-primary);\r\n    }\r\n\r\n    .stat-item.views {\r\n        border-color: rgba(30, 58, 138, 0.4);\r\n        background: linear-gradient(135deg,\r\n                rgba(30, 58, 138, 0.1) 0%,\r\n                var(--card-bg) 100%);\r\n    }\r\n\r\n    .stat-item.likes {\r\n        border-color: rgba(15, 118, 110, 0.4);\r\n        background: linear-gradient(135deg,\r\n                rgba(15, 118, 110, 0.1) 0%,\r\n                var(--card-bg) 100%);\r\n    }\r\n\r\n    .stat-item.comments {\r\n        border-color: rgba(126, 34, 206, 0.4);\r\n        background: linear-gradient(135deg,\r\n                rgba(126, 34, 206, 0.1) 0%,\r\n                var(--card-bg) 100%);\r\n    }\r\n\r\n    .stat-item.shares {\r\n        border-color: rgba(245, 158, 11, 0.4);\r\n        background: linear-gradient(135deg,\r\n                rgba(245, 158, 11, 0.1) 0%,\r\n                var(--card-bg) 100%);\r\n    }\r\n\r\n    .stat-item.duration {\r\n        border-color: rgba(59, 130, 246, 0.4);\r\n        background: linear-gradient(135deg,\r\n                rgba(59, 130, 246, 0.1) 0%,\r\n                var(--card-bg) 100%);\r\n    }\r\n\r\n    .stat-value {\r\n        font-size: clamp(1.2rem, 4vw, 1.6rem);\r\n        font-weight: 900;\r\n        display: block;\r\n        margin-bottom: 0.25rem;\r\n        background: linear-gradient(135deg, var(--primary-light), var(--secondary-light));\r\n        -webkit-background-clip: text;\r\n        -webkit-text-fill-color: transparent;\r\n        animation: valueGlow 4s ease-in-out infinite;\r\n    }\r\n\r\n    .stat-label {\r\n        font-size: clamp(0.7rem, 2vw, 0.8rem);\r\n        color: var(--text-muted);\r\n        font-weight: 600;\r\n        text-transform: uppercase;\r\n        letter-spacing: 0.5px;\r\n    }\r\n\r\n    \/* Video Streaming Area *\/\r\n    .video-streaming-area {\r\n        background: linear-gradient(135deg,\r\n                rgba(30, 58, 138, 0.08) 0%,\r\n                rgba(15, 118, 110, 0.08) 50%,\r\n                rgba(126, 34, 206, 0.08) 100%);\r\n        border: 1px solid var(--border-color);\r\n        border-radius: 16px;\r\n        padding: clamp(1.5rem, 4vw, 2.5rem);\r\n        margin-bottom: 1.5rem;\r\n        position: relative;\r\n        overflow: hidden;\r\n        box-shadow: var(--shadow-md), var(--shadow-primary);\r\n        backdrop-filter: blur(15px);\r\n    }\r\n\r\n    .video-streaming-area::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-image:\r\n                linear-gradient(rgba(30, 58, 138, 0.05) 1px, transparent 1px),\r\n                linear-gradient(90deg, rgba(15, 118, 110, 0.05) 1px, transparent 1px);\r\n        background-size: 30px 30px;\r\n        opacity: 0.6;\r\n        pointer-events: none;\r\n        z-index: 1;\r\n        animation: gridMove 12s linear infinite;\r\n    }\r\n\r\n    .video-streaming-area::after {\r\n        content: '';\r\n        position: absolute;\r\n        top: 0;\r\n        left: 0;\r\n        right: 0;\r\n        height: 2px;\r\n        background: linear-gradient(90deg,\r\n                transparent,\r\n                var(--primary),\r\n                var(--secondary),\r\n                var(--accent),\r\n                transparent);\r\n        z-index: 2;\r\n        animation: borderFlow 3s ease-in-out infinite;\r\n    }\r\n\r\n    .streaming-header {\r\n        text-align: center;\r\n        margin-bottom: 2rem;\r\n        position: relative;\r\n        z-index: 3;\r\n    }\r\n\r\n    .streaming-title {\r\n        font-size: clamp(1rem, 3vw, 1.3rem);\r\n        font-weight: 700;\r\n        margin-bottom: 0.5rem;\r\n        background: linear-gradient(135deg, var(--primary-light), var(--secondary-light));\r\n        -webkit-background-clip: text;\r\n        -webkit-text-fill-color: transparent;\r\n        animation: titlePulse 4s ease-in-out infinite;\r\n    }\r\n\r\n    .streaming-subtitle {\r\n        color: var(--text-muted);\r\n        font-size: clamp(0.8rem, 2vw, 0.95rem);\r\n        font-weight: 500;\r\n    }\r\n\r\n    \/* Video Player *\/\r\n    .video-player-wrapper {\r\n        position: relative;\r\n        width: 100%;\r\n        max-width: min(380px, 90vw);\r\n        margin: 0 auto;\r\n        aspect-ratio: 9\/16;\r\n        border-radius: 16px;\r\n        overflow: hidden;\r\n        box-shadow: var(--shadow-xl), var(--shadow-primary);\r\n        background: #000;\r\n        z-index: 3;\r\n        border: 1px solid var(--border-color);\r\n    }\r\n\r\n    .video-thumbnail {\r\n        position: absolute;\r\n        top: 0;\r\n        left: 0;\r\n        width: 100%;\r\n        height: 100%;\r\n        object-fit: cover;\r\n        z-index: 4;\r\n        cursor: pointer;\r\n        transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\r\n    }\r\n\r\n    .video-thumbnail:hover,\r\n    .video-thumbnail:active {\r\n        transform: scale(1.02);\r\n    }\r\n\r\n    .thumbnail-overlay {\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.4);\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        z-index: 5;\r\n        cursor: pointer;\r\n        transition: all 0.4s ease;\r\n        backdrop-filter: blur(2px);\r\n    }\r\n\r\n    .thumbnail-overlay:hover,\r\n    .thumbnail-overlay:active {\r\n        background: rgba(0, 0, 0, 0.6);\r\n        backdrop-filter: blur(4px);\r\n    }\r\n\r\n    .thumbnail-play-btn {\r\n        width: clamp(60px, 15vw, 80px);\r\n        height: clamp(60px, 15vw, 80px);\r\n        background: linear-gradient(135deg, var(--primary), var(--primary-light));\r\n        border: none;\r\n        border-radius: 50%;\r\n        color: white;\r\n        font-size: clamp(1.5rem, 4vw, 2rem);\r\n        cursor: pointer;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        box-shadow: var(--shadow-xl), var(--shadow-primary);\r\n        transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\r\n        position: relative;\r\n        overflow: hidden;\r\n        animation: playButtonPulse 3s ease-in-out infinite;\r\n        border: 2px solid rgba(255, 255, 255, 0.2);\r\n        min-height: 44px;\r\n    }\r\n\r\n    .thumbnail-play-btn::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(45deg, transparent, rgba(255, 255, 255, 0.3), transparent);\r\n        transform: translateX(-100%);\r\n        transition: transform 0.6s;\r\n    }\r\n\r\n    .thumbnail-play-btn:hover::before,\r\n    .thumbnail-play-btn:active::before {\r\n        transform: translateX(100%);\r\n    }\r\n\r\n    .thumbnail-play-btn:hover,\r\n    .thumbnail-play-btn:active {\r\n        transform: scale(1.15);\r\n        box-shadow: var(--shadow-xl), var(--shadow-primary);\r\n    }\r\n\r\n    .video-player {\r\n        width: 100%;\r\n        height: 100%;\r\n        object-fit: contain;\r\n        background: #000;\r\n        position: relative;\r\n        z-index: 2;\r\n        display: none;\r\n    }\r\n\r\n    .video-player.playing {\r\n        display: block;\r\n    }\r\n\r\n    .video-controls {\r\n        position: absolute;\r\n        bottom: 0;\r\n        left: 0;\r\n        right: 0;\r\n        background: linear-gradient(transparent, rgba(0, 0, 0, 0.9));\r\n        padding: clamp(1rem, 3vw, 1.5rem);\r\n        transform: translateY(100%);\r\n        transition: transform 0.4s ease;\r\n        z-index: 10;\r\n        backdrop-filter: blur(10px);\r\n    }\r\n\r\n    .video-player-wrapper:hover .video-controls,\r\n    .video-controls.show {\r\n        transform: translateY(0);\r\n    }\r\n\r\n    .progress-bar {\r\n        width: 100%;\r\n        height: clamp(4px, 1.5vw, 6px);\r\n        background: rgba(255, 255, 255, 0.2);\r\n        border-radius: 3px;\r\n        margin-bottom: 0.5rem;\r\n        cursor: pointer;\r\n        position: relative;\r\n        overflow: hidden;\r\n        min-height: 20px;\r\n        display: flex;\r\n        align-items: center;\r\n    }\r\n\r\n    .progress-fill {\r\n        height: 100%;\r\n        background: linear-gradient(90deg, var(--primary), var(--primary-light));\r\n        border-radius: 3px;\r\n        width: 0%;\r\n        transition: width 0.1s linear;\r\n        box-shadow: 0 0 10px rgba(30, 58, 138, 0.5);\r\n    }\r\n\r\n    \/* Video Time Display *\/\r\n    .video-time {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        font-size: clamp(0.7rem, 2vw, 0.8rem);\r\n        color: var(--text-muted);\r\n        margin-bottom: 1rem;\r\n    }\r\n\r\n    .control-buttons {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        flex-wrap: wrap;\r\n        gap: 1rem;\r\n    }\r\n\r\n    .control-group {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: clamp(0.5rem, 2vw, 0.75rem);\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .control-btn {\r\n        background: rgba(255, 255, 255, 0.15);\r\n        border: none;\r\n        color: white;\r\n        width: clamp(40px, 10vw, 44px);\r\n        height: clamp(40px, 10vw, 44px);\r\n        border-radius: 50%;\r\n        cursor: pointer;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        transition: all 0.3s ease;\r\n        backdrop-filter: blur(10px);\r\n        border: 1px solid rgba(255, 255, 255, 0.2);\r\n        font-size: clamp(0.8rem, 2vw, 1rem);\r\n        min-height: 44px;\r\n        min-width: 44px;\r\n    }\r\n\r\n    .control-btn:hover,\r\n    .control-btn:active {\r\n        background: rgba(255, 255, 255, 0.25);\r\n        transform: scale(1.1);\r\n        box-shadow: var(--shadow-sm);\r\n    }\r\n\r\n    .play-btn {\r\n        width: clamp(50px, 12vw, 60px);\r\n        height: clamp(50px, 12vw, 60px);\r\n        background: linear-gradient(135deg, var(--primary), var(--primary-light));\r\n        font-size: clamp(1rem, 3vw, 1.4rem);\r\n        border: none;\r\n        box-shadow: var(--shadow-md), var(--shadow-primary);\r\n    }\r\n\r\n    .volume-control {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: clamp(0.3rem, 1.5vw, 0.5rem);\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .volume-slider {\r\n        width: clamp(60px, 15vw, 80px);\r\n        height: clamp(4px, 1.5vw, 6px);\r\n        background: rgba(255, 255, 255, 0.2);\r\n        border-radius: 3px;\r\n        cursor: pointer;\r\n        position: relative;\r\n        overflow: hidden;\r\n        min-height: 20px;\r\n        display: flex;\r\n        align-items: center;\r\n    }\r\n\r\n    .volume-fill {\r\n        height: 100%;\r\n        background: linear-gradient(90deg, var(--secondary), var(--secondary-light));\r\n        border-radius: 3px;\r\n        width: 100%;\r\n        transition: width 0.1s ease;\r\n        box-shadow: 0 0 8px rgba(15, 118, 110, 0.4);\r\n    }\r\n\r\n    \/* Download Section *\/\r\n    .download-section {\r\n        background: linear-gradient(135deg,\r\n                rgba(15, 118, 110, 0.1) 0%,\r\n                rgba(20, 184, 166, 0.1) 50%,\r\n                var(--card-bg) 100%);\r\n        border: 1px solid var(--border-color);\r\n        border-radius: 16px;\r\n        padding: clamp(1rem, 3vw, 1.5rem);\r\n        margin-bottom: 1.5rem;\r\n        box-shadow: var(--shadow-sm), var(--shadow-secondary);\r\n        position: relative;\r\n        overflow: hidden;\r\n        backdrop-filter: blur(15px);\r\n    }\r\n\r\n    .download-section::before {\r\n        content: '';\r\n        position: absolute;\r\n        top: 0;\r\n        left: 0;\r\n        right: 0;\r\n        height: 2px;\r\n        background: linear-gradient(90deg,\r\n                transparent,\r\n                var(--secondary),\r\n                var(--secondary-light),\r\n                transparent);\r\n        animation: borderFlow 3s ease-in-out infinite;\r\n    }\r\n\r\n    .download-header {\r\n        text-align: center;\r\n        margin-bottom: clamp(0.8rem, 2.5vw, 1.2rem);\r\n    }\r\n\r\n    .download-title {\r\n        font-size: clamp(1rem, 3vw, 1.2rem);\r\n        font-weight: 700;\r\n        margin-bottom: 0.25rem;\r\n        background: linear-gradient(135deg, var(--secondary), var(--secondary-light));\r\n        -webkit-background-clip: text;\r\n        -webkit-text-fill-color: transparent;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 0.5rem;\r\n        animation: titlePulse 4s ease-in-out infinite;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .download-subtitle {\r\n        color: var(--text-muted);\r\n        font-size: clamp(0.8rem, 2vw, 0.9rem);\r\n    }\r\n\r\n    .download-grid {\r\n        display: grid;\r\n        grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));\r\n        gap: clamp(0.8rem, 2vw, 1rem);\r\n    }\r\n\r\n    .download-btn {\r\n        background: linear-gradient(135deg, var(--secondary), var(--secondary-light));\r\n        color: white;\r\n        border: none;\r\n        padding: clamp(0.8rem, 3vw, 1rem) clamp(1rem, 3vw, 1.5rem);\r\n        border-radius: 14px;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n        transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 0.5rem;\r\n        box-shadow: var(--shadow-sm), var(--shadow-secondary);\r\n        position: relative;\r\n        overflow: hidden;\r\n        font-size: clamp(0.8rem, 2vw, 0.95rem);\r\n        animation: buttonGlow 5s ease-in-out infinite;\r\n        border: 1px solid rgba(15, 118, 110, 0.3);\r\n        min-height: 48px;\r\n        text-align: center;\r\n    }\r\n\r\n    .download-btn::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.3), transparent);\r\n        transition: left 0.5s;\r\n    }\r\n\r\n    .download-btn:hover:not(:disabled)::before,\r\n    .download-btn:active:not(:disabled)::before {\r\n        left: 100%;\r\n    }\r\n\r\n    .download-btn:hover:not(:disabled),\r\n    .download-btn:active:not(:disabled) {\r\n        transform: translateY(-3px) scale(1.02);\r\n        box-shadow: var(--shadow-md), var(--shadow-secondary);\r\n    }\r\n\r\n    .download-btn:disabled {\r\n        opacity: 0.6;\r\n        cursor: not-allowed;\r\n        transform: none;\r\n        animation: none;\r\n    }\r\n\r\n    .download-btn.hd {\r\n        background: linear-gradient(135deg, var(--accent), var(--accent-light));\r\n        border-color: rgba(126, 34, 206, 0.3);\r\n    }\r\n\r\n    .download-btn.hd:hover:not(:disabled),\r\n    .download-btn.hd:active:not(:disabled) {\r\n        box-shadow: var(--shadow-md), var(--shadow-accent);\r\n    }\r\n\r\n    \/* Audio Streaming Section *\/\r\n    .audio-streaming {\r\n        background: linear-gradient(135deg,\r\n                rgba(126, 34, 206, 0.12) 0%,\r\n                rgba(168, 85, 247, 0.12) 50%,\r\n                var(--card-bg) 100%);\r\n        border: 1px solid var(--border-color);\r\n        border-radius: 16px;\r\n        padding: clamp(1rem, 3vw, 1.5rem);\r\n        position: relative;\r\n        overflow: hidden;\r\n        box-shadow: var(--shadow-sm), var(--shadow-accent);\r\n        backdrop-filter: blur(15px);\r\n    }\r\n\r\n    .audio-streaming::before {\r\n        content: '';\r\n        position: absolute;\r\n        top: 0;\r\n        left: 0;\r\n        right: 0;\r\n        height: 2px;\r\n        background: linear-gradient(90deg,\r\n                transparent,\r\n                var(--accent),\r\n                var(--accent-light),\r\n                transparent);\r\n        animation: borderFlow 3s ease-in-out infinite;\r\n    }\r\n\r\n    .audio-header {\r\n        text-align: center;\r\n        margin-bottom: clamp(0.8rem, 2.5vw, 1.2rem);\r\n    }\r\n\r\n    .audio-main-title {\r\n        font-size: clamp(1rem, 3vw, 1.2rem);\r\n        font-weight: 700;\r\n        margin-bottom: 0.25rem;\r\n        background: linear-gradient(135deg, var(--accent), var(--accent-light));\r\n        -webkit-background-clip: text;\r\n        -webkit-text-fill-color: transparent;\r\n        width: 100%;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 0.5rem;\r\n        animation: titlePulse 4s ease-in-out infinite;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .audio-subtitle {\r\n        color: var(--text-muted);\r\n        font-size: clamp(0.8rem, 2vw, 0.9rem);\r\n        margin-bottom: clamp(0.8rem, 2.5vw, 1.2rem);\r\n    }\r\n\r\n    .audio-player-section {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: clamp(0.8rem, 3vw, 1.2rem);\r\n        margin-bottom: 1.5rem;\r\n        flex-wrap: wrap;\r\n        justify-content: center;\r\n    }\r\n\r\n    \/* Audio Icon - Left Side, Smaller *\/\r\n    .audio-icon-wrapper {\r\n        position: relative;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .audio-icon {\r\n        width: clamp(40px, 10vw, 50px);\r\n        height: clamp(40px, 10vw, 50px);\r\n        background: linear-gradient(135deg, var(--accent), var(--accent-light));\r\n        border-radius: 50%;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        font-size: clamp(1rem, 2.5vw, 1.2rem);\r\n        color: white;\r\n        box-shadow: var(--shadow-sm), var(--shadow-accent);\r\n        animation: audioIconPulse 4s ease-in-out infinite;\r\n        position: relative;\r\n        z-index: 2;\r\n        border: 2px solid rgba(126, 34, 206, 0.3);\r\n    }\r\n\r\n    .audio-wave {\r\n        position: absolute;\r\n        top: 50%;\r\n        left: 50%;\r\n        transform: translate(-50%, -50%);\r\n        border: 1px solid rgba(126, 34, 206, 0.2);\r\n        border-radius: 50%;\r\n        animation: audioWaveRipple 2s ease-out infinite;\r\n    }\r\n\r\n    .audio-wave:nth-child(1) {\r\n        width: clamp(50px, 12vw, 60px);\r\n        height: clamp(50px, 12vw, 60px);\r\n        animation-delay: 0s;\r\n    }\r\n\r\n    .audio-wave:nth-child(2) {\r\n        width: clamp(60px, 15vw, 75px);\r\n        height: clamp(60px, 15vw, 75px);\r\n        animation-delay: 0.5s;\r\n    }\r\n\r\n    .audio-wave:nth-child(3) {\r\n        width: clamp(70px, 18vw, 90px);\r\n        height: clamp(70px, 18vw, 90px);\r\n        animation-delay: 1s;\r\n    }\r\n\r\n    .audio-info {\r\n        flex: 1;\r\n        min-width: 0;\r\n        text-align: center;\r\n    }\r\n\r\n    .audio-title {\r\n        font-size: clamp(0.9rem, 2.5vw, 1rem);\r\n        font-weight: 700;\r\n        color: var(--text-primary);\r\n        margin-bottom: 0.25rem;\r\n        word-break: break-word;\r\n    }\r\n\r\n    .audio-artist {\r\n        font-size: clamp(0.75rem, 2vw, 0.85rem);\r\n        color: var(--text-muted);\r\n        margin-bottom: 1rem;\r\n        word-break: break-word;\r\n    }\r\n\r\n    \/* Audio Progress Bar *\/\r\n    .audio-progress-container {\r\n        width: 100%;\r\n        margin-bottom: 1rem;\r\n    }\r\n\r\n    .audio-progress {\r\n        height: clamp(6px, 2vw, 8px);\r\n        background: rgba(126, 34, 206, 0.2);\r\n        border-radius: 4px;\r\n        position: relative;\r\n        cursor: pointer;\r\n        overflow: hidden;\r\n        margin-bottom: 0.5rem;\r\n        min-height: 20px;\r\n        display: flex;\r\n        align-items: center;\r\n    }\r\n\r\n    .audio-progress-fill {\r\n        height: 100%;\r\n        background: linear-gradient(90deg, var(--accent), var(--accent-light));\r\n        border-radius: 4px;\r\n        width: 0%;\r\n        transition: width 0.1s ease;\r\n        box-shadow: 0 0 10px rgba(126, 34, 206, 0.4);\r\n    }\r\n\r\n    .audio-time {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        font-size: clamp(0.7rem, 2vw, 0.8rem);\r\n        color: var(--text-muted);\r\n        margin-bottom: 1rem;\r\n    }\r\n\r\n    \/* Audio Controls *\/\r\n    .audio-controls {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: clamp(0.8rem, 3vw, 1rem);\r\n        margin-bottom: 1rem;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .audio-play-btn {\r\n        width: clamp(44px, 10vw, 50px);\r\n        height: clamp(44px, 10vw, 50px);\r\n        background: linear-gradient(135deg, var(--accent), var(--accent-light));\r\n        border: none;\r\n        border-radius: 50%;\r\n        color: white;\r\n        cursor: pointer;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\r\n        box-shadow: var(--shadow-sm), var(--shadow-accent);\r\n        font-size: clamp(1rem, 2.5vw, 1.2rem);\r\n        flex-shrink: 0;\r\n        animation: audioPlayPulse 4s ease-in-out infinite;\r\n        border: 2px solid rgba(126, 34, 206, 0.3);\r\n        min-height: 44px;\r\n        min-width: 44px;\r\n    }\r\n\r\n    .audio-play-btn:hover,\r\n    .audio-play-btn:active {\r\n        transform: scale(1.1);\r\n        box-shadow: var(--shadow-md), var(--shadow-accent);\r\n    }\r\n\r\n    \/* Audio Volume Control *\/\r\n    .audio-volume-control {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: clamp(0.5rem, 2vw, 0.75rem);\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .audio-volume-btn {\r\n        background: rgba(126, 34, 206, 0.15);\r\n        border: none;\r\n        color: var(--accent-light);\r\n        width: clamp(36px, 8vw, 40px);\r\n        height: clamp(36px, 8vw, 40px);\r\n        border-radius: 50%;\r\n        cursor: pointer;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        transition: all 0.3s ease;\r\n        backdrop-filter: blur(10px);\r\n        border: 1px solid rgba(126, 34, 206, 0.2);\r\n        font-size: clamp(0.8rem, 2vw, 1rem);\r\n        min-height: 44px;\r\n        min-width: 44px;\r\n    }\r\n\r\n    .audio-volume-btn:hover,\r\n    .audio-volume-btn:active {\r\n        background: rgba(126, 34, 206, 0.25);\r\n        transform: scale(1.1);\r\n        box-shadow: var(--shadow-sm);\r\n    }\r\n\r\n    .audio-volume-slider {\r\n        width: clamp(60px, 15vw, 80px);\r\n        height: clamp(4px, 1.5vw, 6px);\r\n        background: rgba(126, 34, 206, 0.2);\r\n        border-radius: 3px;\r\n        cursor: pointer;\r\n        position: relative;\r\n        overflow: hidden;\r\n        min-height: 20px;\r\n        display: flex;\r\n        align-items: center;\r\n    }\r\n\r\n    .audio-volume-fill {\r\n        height: 100%;\r\n        background: linear-gradient(90deg, var(--accent), var(--accent-light));\r\n        border-radius: 3px;\r\n        width: 100%;\r\n        transition: width 0.1s ease;\r\n        box-shadow: 0 0 8px rgba(126, 34, 206, 0.4);\r\n    }\r\n\r\n    .download-audio-section {\r\n        text-align: center;\r\n    }\r\n\r\n    .download-audio-btn {\r\n        background: linear-gradient(135deg, var(--accent), var(--accent-light));\r\n        color: white;\r\n        border: none;\r\n        padding: clamp(0.8rem, 3vw, 1rem) clamp(1rem, 3vw, 1.5rem);\r\n        border-radius: 14px;\r\n        font-weight: 700;\r\n        cursor: pointer;\r\n        transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 0.5rem;\r\n        box-shadow: var(--shadow-sm), var(--shadow-accent);\r\n        font-size: clamp(0.8rem, 2vw, 0.95rem);\r\n        position: relative;\r\n        overflow: hidden;\r\n        animation: buttonGlow 5s ease-in-out infinite;\r\n        border: 1px solid rgba(126, 34, 206, 0.3);\r\n        min-height: 48px;\r\n        width: 100%;\r\n        max-width: 300px;\r\n        justify-content: center;\r\n    }\r\n\r\n    .download-audio-btn::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.3), transparent);\r\n        transition: left 0.5s;\r\n    }\r\n\r\n    .download-audio-btn:hover:not(:disabled)::before,\r\n    .download-audio-btn:active:not(:disabled)::before {\r\n        left: 100%;\r\n    }\r\n\r\n    .download-audio-btn:hover:not(:disabled),\r\n    .download-audio-btn:active:not(:disabled) {\r\n        transform: translateY(-3px) scale(1.02);\r\n        box-shadow: var(--shadow-md), var(--shadow-accent);\r\n    }\r\n\r\n    .download-audio-btn:disabled {\r\n        opacity: 0.6;\r\n        cursor: not-allowed;\r\n        transform: none;\r\n        animation: none;\r\n    }\r\n\r\n    \/* Download Progress *\/\r\n    .download-progress {\r\n        position: fixed;\r\n        bottom: 1.5rem;\r\n        right: 1.5rem;\r\n        background: var(--card-bg);\r\n        backdrop-filter: blur(25px);\r\n        border: 1px solid var(--border-color);\r\n        border-radius: 14px;\r\n        padding: clamp(1rem, 3vw, 1.5rem) clamp(1.5rem, 4vw, 2rem);\r\n        min-width: min(320px, 90vw);\r\n        max-width: 90vw;\r\n        box-shadow: var(--shadow-xl), var(--shadow-primary);\r\n        z-index: 1000;\r\n        display: none;\r\n    }\r\n\r\n    .download-progress.show {\r\n        display: block;\r\n        animation: slideInRight 0.4s ease-out;\r\n    }\r\n\r\n    .progress-header {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n        margin-bottom: 1rem;\r\n        gap: 1rem;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .progress-text {\r\n        font-weight: 700;\r\n        font-size: clamp(0.8rem, 2vw, 0.95rem);\r\n        color: var(--text-primary);\r\n        background: linear-gradient(135deg, var(--primary-light), var(--secondary-light));\r\n        -webkit-background-clip: text;\r\n        -webkit-text-fill-color: transparent;\r\n        flex: 1;\r\n        min-width: 0;\r\n    }\r\n\r\n    .cancel-btn {\r\n        background: rgba(239, 68, 68, 0.15);\r\n        border: 1px solid rgba(239, 68, 68, 0.3);\r\n        color: #ef4444;\r\n        padding: clamp(0.4rem, 1.5vw, 0.5rem) clamp(0.8rem, 2vw, 1rem);\r\n        border-radius: 10px;\r\n        font-size: clamp(0.7rem, 2vw, 0.8rem);\r\n        cursor: pointer;\r\n        transition: all 0.3s ease;\r\n        font-weight: 600;\r\n        backdrop-filter: blur(10px);\r\n        min-height: 36px;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .cancel-btn:hover,\r\n    .cancel-btn:active {\r\n        background: rgba(239, 68, 68, 0.25);\r\n        transform: scale(1.05);\r\n    }\r\n\r\n    .progress-bar-container {\r\n        width: 100%;\r\n        height: clamp(6px, 2vw, 8px);\r\n        background: rgba(126, 34, 206, 0.2);\r\n        border-radius: 4px;\r\n        overflow: hidden;\r\n    }\r\n\r\n    .progress-bar-fill {\r\n        height: 100%;\r\n        background: linear-gradient(90deg, var(--secondary), var(--secondary-light));\r\n        border-radius: 4px;\r\n        width: 0%;\r\n        transition: width 0.3s ease;\r\n        box-shadow: 0 0 12px rgba(15, 118, 110, 0.4);\r\n        animation: progressGlow 3s ease-in-out infinite;\r\n    }\r\n\r\n    \/* Error Message *\/\r\n    .error-message {\r\n        background: linear-gradient(135deg,\r\n                rgba(239, 68, 68, 0.1) 0%,\r\n                var(--card-bg) 100%);\r\n        border: 1px solid rgba(239, 68, 68, 0.3);\r\n        color: #ef4444;\r\n        padding: clamp(1rem, 3vw, 1.2rem) clamp(1.2rem, 4vw, 1.8rem);\r\n        border-radius: 14px;\r\n        margin: 1rem 0;\r\n        display: none;\r\n        align-items: center;\r\n        gap: clamp(0.5rem, 2vw, 1rem);\r\n        font-weight: 600;\r\n        backdrop-filter: blur(15px);\r\n        box-shadow: var(--shadow-sm);\r\n        animation: errorShake 0.5s ease-in-out;\r\n        font-size: clamp(0.8rem, 2vw, 1rem);\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .paste-btn {\r\n        background: linear-gradient(135deg, var(--secondary), var(--secondary-light));\r\n        border: none;\r\n        color: white;\r\n        cursor: pointer;\r\n        padding: clamp(0.5rem, 2vw, 0.7rem) clamp(0.8rem, 3vw, 1.4rem);\r\n        border-radius: 12px;\r\n        transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 0.5rem;\r\n        font-weight: 600;\r\n        box-shadow: var(--shadow-sm), var(--shadow-secondary);\r\n        font-size: clamp(0.8rem, 2vw, 0.9rem);\r\n        position: relative;\r\n        overflow: hidden;\r\n        border: 1px solid rgba(15, 118, 110, 0.3);\r\n        min-height: 44px !important;\r\n        width: 100%;\r\n        display: flex;\r\n        justify-content: center;\r\n    }\r\n\r\n    .error-message.show {\r\n        display: flex;\r\n        animation: fadeInUp 0.3s ease-out, errorShake 0.5s ease-in-out;\r\n    }\r\n\r\n    \/* Animations *\/\r\n    @keyframes gradientShift {\r\n        0%, 100% { background-position: 0% 50%; }\r\n        50% { background-position: 100% 50%; }\r\n    }\r\n\r\n    @keyframes backgroundFloat {\r\n        0%, 100% { opacity: 1; transform: translateY(0px); }\r\n        50% { opacity: 0.8; transform: translateY(-10px); }\r\n    }\r\n\r\n    @keyframes fadeInDown {\r\n        from { opacity: 0; transform: translateY(-40px); }\r\n        to { opacity: 1; transform: translateY(0); }\r\n    }\r\n\r\n    @keyframes fadeInUp {\r\n        from { opacity: 0; transform: translateY(40px); }\r\n        to { opacity: 1; transform: translateY(0); }\r\n    }\r\n\r\n    @keyframes slideInRight {\r\n        from { opacity: 0; transform: translateX(100%); }\r\n        to { opacity: 1; transform: translateX(0); }\r\n    }\r\n\r\n    @keyframes spin {\r\n        to { transform: rotate(360deg); }\r\n    }\r\n\r\n    @keyframes logoFloat {\r\n        0%, 100% { transform: translateY(0px) rotate(0deg); }\r\n        50% { transform: translateY(-10px) rotate(5deg); }\r\n    }\r\n\r\n    @keyframes logoShine {\r\n        0% { transform: translateX(-100%) translateY(-100%) rotate(45deg); }\r\n        100% { transform: translateX(100%) translateY(100%) rotate(45deg); }\r\n    }\r\n\r\n    @keyframes textGradient {\r\n        0%, 100% { background-position: 0% 50%; }\r\n        50% { background-position: 100% 50%; }\r\n    }\r\n\r\n    @keyframes subtitleGlow {\r\n        0%, 100% { text-shadow: 0 0 5px rgba(148, 163, 184, 0.3); }\r\n        50% { text-shadow: 0 0 15px rgba(148, 163, 184, 0.6); }\r\n    }\r\n\r\n    @keyframes borderFlow {\r\n        0%, 100% { opacity: 0.5; }\r\n        50% { opacity: 1; }\r\n    }\r\n\r\n    @keyframes overlayPulse {\r\n        0%, 100% { opacity: 1; }\r\n        50% { opacity: 0.7; }\r\n    }\r\n\r\n    @keyframes inputFocusGlow {\r\n        0%, 100% { box-shadow: 0 0 0 4px rgba(30, 58, 138, 0.2), var(--shadow-primary), inset 0 2px 10px rgba(0, 0, 0, 0.3); }\r\n        50% { box-shadow: 0 0 0 6px rgba(30, 58, 138, 0.4), var(--shadow-primary), inset 0 2px 10px rgba(0, 0, 0, 0.3); }\r\n    }\r\n\r\n    @keyframes buttonPulse {\r\n        0%, 100% { box-shadow: var(--shadow-md), var(--shadow-primary); }\r\n        50% { box-shadow: var(--shadow-xl), var(--shadow-primary); }\r\n    }\r\n\r\n    @keyframes buttonHoverGlow {\r\n        0%, 100% { filter: brightness(1); }\r\n        50% { filter: brightness(1.2); }\r\n    }\r\n\r\n    @keyframes textFade {\r\n        0%, 100% { opacity: 0.7; }\r\n        50% { opacity: 1; }\r\n    }\r\n\r\n    @keyframes avatarPulse {\r\n        0%, 100% { box-shadow: var(--shadow-sm), var(--shadow-primary); }\r\n        50% { box-shadow: var(--shadow-sm), 0 0 30px rgba(30, 58, 138, 0.6); }\r\n    }\r\n\r\n    @keyframes valueGlow {\r\n        0%, 100% { filter: brightness(1); }\r\n        50% { filter: brightness(1.2); }\r\n    }\r\n\r\n    @keyframes gridMove {\r\n        0% { transform: translate(0, 0); }\r\n        100% { transform: translate(30px, 30px); }\r\n    }\r\n\r\n    @keyframes titlePulse {\r\n        0%, 100% { filter: brightness(1); }\r\n        50% { filter: brightness(1.3); }\r\n    }\r\n\r\n    @keyframes playButtonPulse {\r\n        0%, 100% { transform: scale(1); }\r\n        50% { transform: scale(1.05); }\r\n    }\r\n\r\n    @keyframes buttonGlow {\r\n        0%, 100% { box-shadow: var(--shadow-sm); }\r\n        50% { box-shadow: var(--shadow-md); }\r\n    }\r\n\r\n    @keyframes audioIconPulse {\r\n        0%, 100% { transform: scale(1); }\r\n        50% { transform: scale(1.1); }\r\n    }\r\n\r\n    @keyframes audioWaveRipple {\r\n        0% { opacity: 1; transform: translate(-50%, -50%) scale(0.8); }\r\n        100% { opacity: 0; transform: translate(-50%, -50%) scale(2); }\r\n    }\r\n\r\n    @keyframes audioPlayPulse {\r\n        0%, 100% { box-shadow: var(--shadow-sm), var(--shadow-accent); }\r\n        50% { box-shadow: var(--shadow-md), var(--shadow-accent); }\r\n    }\r\n\r\n    @keyframes progressGlow {\r\n        0%, 100% { box-shadow: 0 0 12px rgba(15, 118, 110, 0.4); }\r\n        50% { box-shadow: 0 0 20px rgba(15, 118, 110, 0.8); }\r\n    }\r\n\r\n    @keyframes errorShake {\r\n        0%, 100% { transform: translateX(0); }\r\n        25% { transform: translateX(-5px); }\r\n        75% { transform: translateX(5px); }\r\n    }\r\n\r\n    \/* Responsive Design *\/\r\n    @media (max-width: 1024px) {\r\n        .container_tiktok {\r\n            padding: clamp(1rem, 3vw, 1.5rem);\r\n        }\r\n        \r\n        .video-stats {\r\n            grid-template-columns: repeat(3, 1fr);\r\n        }\r\n        \r\n        .download-grid {\r\n            grid-template-columns: 1fr;\r\n        }\r\n        \r\n        .action-buttons {\r\n            grid-template-columns: 1fr;\r\n            gap: 1rem;\r\n        }\r\n        \r\n        .search-another-btn {\r\n            width: 100%;\r\n        }\r\n        \r\n        .audio-player-section {\r\n            flex-direction: column;\r\n            text-align: center;\r\n            gap: 1rem;\r\n        }\r\n        \r\n        .audio-controls {\r\n            flex-direction: row;\r\n            justify-content: center;\r\n            gap: 1rem;\r\n        }\r\n        \r\n        .audio-volume-control {\r\n            justify-content: center;\r\n        }\r\n        \r\n        .video-player-wrapper {\r\n            max-width: min(320px, 85vw);\r\n        }\r\n        \r\n        .logo-icon {\r\n            width: 50px;\r\n            height: 50px;\r\n            font-size: 20px;\r\n            margin-top: 60px;\r\n        }\r\n        \r\n        .logo {\r\n            flex-direction: column !important;\r\n        }\r\n    }\r\n\r\n    @media (max-width: 768px) {\r\n        .container_tiktok {\r\n            padding: 1rem;\r\n        }\r\n        \r\n        .logo {\r\n            flex-direction: column;\r\n            gap: 1rem;\r\n        }\r\n        \r\n        .logo-icon {\r\n            width: 60px;\r\n            height: 60px;\r\n            font-size: 24px;\r\n        }\r\n        \r\n        .video-stats {\r\n            grid-template-columns: repeat(2, 1fr);\r\n            gap: 0.8rem;\r\n        }\r\n        \r\n        .author-section {\r\n            flex-direction: column;\r\n            text-align: center;\r\n            gap: 1rem;\r\n        }\r\n        \r\n        .download-progress {\r\n            left: 1rem;\r\n            right: 1rem;\r\n            bottom: 1rem;\r\n            min-width: auto;\r\n        }\r\n        \r\n        .control-buttons {\r\n            flex-direction: column;\r\n            gap: 1rem;\r\n            align-items: center;\r\n        }\r\n        \r\n        .volume-control {\r\n            order: 3;\r\n            width: 100%;\r\n            justify-content: center;\r\n        }\r\n        \r\n        .audio-controls {\r\n            flex-direction: column;\r\n            gap: 1rem;\r\n        }\r\n        \r\n        .audio-volume-control {\r\n            width: 100%;\r\n            justify-content: center;\r\n        }\r\n        \r\n        .video-player-wrapper {\r\n            max-width: min(300px, 80vw);\r\n        }\r\n        \r\n        .video-controls {\r\n            transform: translateY(0);\r\n            position: relative;\r\n            background: rgba(0, 0, 0, 0.8);\r\n            margin-top: 1rem;\r\n            border-radius: 12px;\r\n        }\r\n        \r\n        .video-player-wrapper:hover .video-controls {\r\n            transform: translateY(0);\r\n        }\r\n        \r\n        .logo-icon {\r\n            width: 50px;\r\n            height: 50px;\r\n            font-size: 20px;\r\n            margin-top: 60px;\r\n        }\r\n    }\r\n\r\n    @media (max-width: 480px) {\r\n        .container_tiktok {\r\n            padding: 0.8rem;\r\n        }\r\n        \r\n        .header {\r\n            margin-bottom: 1.5rem;\r\n        }\r\n        \r\n        .logo-icon {\r\n            width: 50px;\r\n            height: 50px;\r\n            font-size: 20px;\r\n        }\r\n        \r\n        .video-stats {\r\n            grid-template-columns: 1fr;\r\n            gap: 0.6rem;\r\n        }\r\n        \r\n        .stat-item {\r\n            min-height: 70px;\r\n            padding: 0.8rem;\r\n        }\r\n        \r\n        .stat-value {\r\n            font-size: 1.3rem;\r\n        }\r\n        \r\n        .audio-player-section {\r\n            gap: 0.8rem;\r\n        }\r\n        \r\n        .audio-icon {\r\n            width: 40px;\r\n            height: 40px;\r\n            font-size: 1rem;\r\n        }\r\n        \r\n        .audio-play-btn {\r\n            width: 44px;\r\n            height: 44px;\r\n            font-size: 1rem;\r\n        }\r\n        \r\n        .video-player-wrapper {\r\n            max-width: min(280px, 75vw);\r\n        }\r\n        \r\n        .thumbnail-play-btn {\r\n            width: 60px;\r\n            height: 60px;\r\n            font-size: 1.5rem;\r\n        }\r\n        \r\n        .download-progress {\r\n            left: 0.5rem;\r\n            right: 0.5rem;\r\n            bottom: 0.5rem;\r\n            padding: 1rem;\r\n        }\r\n        \r\n        .progress-header {\r\n            flex-direction: column;\r\n            gap: 0.5rem;\r\n            align-items: stretch;\r\n        }\r\n        \r\n        .cancel-btn {\r\n            align-self: center;\r\n            min-width: 80px;\r\n        }\r\n        \r\n        .input-field {\r\n            font-size: 16px;\r\n        }\r\n        \r\n        .control-btn,\r\n        .audio-play-btn,\r\n        .audio-volume-btn,\r\n        .paste-btn,\r\n        .search-btn,\r\n        .download-btn,\r\n        .download-audio-btn {\r\n            min-height: 44px;\r\n            min-width: 44px;\r\n        }\r\n        \r\n        .progress-bar,\r\n        .audio-progress,\r\n        .volume-slider,\r\n        .audio-volume-slider {\r\n            min-height: 44px;\r\n        }\r\n        \r\n        .logo-icon {\r\n            width: 50px;\r\n            height: 50px;\r\n            font-size: 20px;\r\n            margin-top: 60px;\r\n        }\r\n    }\r\n\r\n    @media (max-width: 360px) {\r\n        .container_tiktok {\r\n            padding: 0.5rem;\r\n        }\r\n        \r\n        .search-section,\r\n        .video-section,\r\n        .download-section,\r\n        .audio-streaming {\r\n            padding: 1rem;\r\n            border-radius: 14px;\r\n        }\r\n        \r\n        .logo-text {\r\n            font-size: 1.5rem;\r\n            letter-spacing: -1px;\r\n        }\r\n        \r\n        .subtitle {\r\n            font-size: 0.8rem;\r\n        }\r\n        \r\n        .video-player-wrapper {\r\n            max-width: min(260px, 70vw);\r\n        }\r\n        \r\n        .audio-wave:nth-child(1) {\r\n            width: 45px;\r\n            height: 45px;\r\n        }\r\n        \r\n        .audio-wave:nth-child(2) {\r\n            width: 55px;\r\n            height: 55px;\r\n        }\r\n        \r\n        .audio-wave:nth-child(3) {\r\n            width: 65px;\r\n            height: 65px;\r\n        }\r\n        \r\n        .logo-icon {\r\n            width: 50px;\r\n            height: 50px;\r\n            font-size: 20px;\r\n            margin-top: 60px;\r\n        }\r\n    }\r\n\r\n    @media (max-height: 500px) and (orientation: landscape) {\r\n        .container_tiktok {\r\n            padding: 1rem;\r\n        }\r\n        \r\n        .header {\r\n            margin-bottom: 1rem;\r\n        }\r\n        \r\n        .logo {\r\n            flex-direction: row;\r\n            gap: 1rem;\r\n        }\r\n        \r\n        .logo-icon {\r\n            width: 40px;\r\n            height: 40px;\r\n            font-size: 16px;\r\n        }\r\n        \r\n        .video-player-wrapper {\r\n            max-width: min(200px, 30vw);\r\n        }\r\n        \r\n        .video-stats {\r\n            grid-template-columns: repeat(5, 1fr);\r\n            gap: 0.5rem;\r\n        }\r\n        \r\n        .stat-item {\r\n            min-height: 60px;\r\n            padding: 0.5rem;\r\n        }\r\n        \r\n        .stat-value {\r\n            font-size: 1rem;\r\n        }\r\n        \r\n        .stat-label {\r\n            font-size: 0.6rem;\r\n        }\r\n    }\r\n\r\n    @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {\r\n        .logo-icon,\r\n        .author-avatar,\r\n        .audio-icon,\r\n        .thumbnail-play-btn,\r\n        .audio-play-btn {\r\n            image-rendering: -webkit-optimize-contrast;\r\n            image-rendering: crisp-edges;\r\n        }\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n        *, *::before, *::after {\r\n            animation-duration: 0.01ms !important;\r\n            animation-iteration-count: 1 !important;\r\n            transition-duration: 0.01ms !important;\r\n        }\r\n        \r\n        .video-player-wrapper,\r\n        .search-section,\r\n        .video-section,\r\n        .download-section,\r\n        .audio-streaming {\r\n            animation: none !important;\r\n        }\r\n    }\r\n\r\n    @media (prefers-contrast: high) {\r\n        :root {\r\n            --card-bg: rgba(0, 0, 0, 0.9);\r\n            --input-bg: rgba(0, 0, 0, 0.9);\r\n            --border-color: rgba(255, 255, 255, 0.8);\r\n            --shadow-sm: 0 4px 20px rgba(0, 0, 0, 0.8);\r\n            --shadow-md: 0 8px 40px rgba(0, 0, 0, 0.9);\r\n            --shadow-lg: 0 16px 60px rgba(0, 0, 0, 1);\r\n            --shadow-xl: 0 25px 50px -12px rgba(0, 0, 0, 1);\r\n        }\r\n        \r\n        .input-field,\r\n        .search-btn,\r\n        .download-btn,\r\n        .audio-play-btn {\r\n            border: 2px solid var(--text-primary);\r\n        }\r\n    }\r\n\r\n    @media (prefers-color-scheme: dark) {\r\n        body {\r\n            background: linear-gradient(135deg,\r\n                    #000000 0%,\r\n                    var(--bg-primary) 25%,\r\n                    var(--bg-secondary) 50%,\r\n                    var(--neutral-medium) 75%,\r\n                    var(--neutral-dark) 100%);\r\n        }\r\n    }\r\n\r\n    @media print {\r\n        body {\r\n            background: white !important;\r\n            color: black !important;\r\n        }\r\n        \r\n        .container_tiktok {\r\n            max-width: none;\r\n            padding: 0;\r\n        }\r\n        \r\n        .video-player-wrapper,\r\n        .download-section,\r\n        .audio-streaming,\r\n        .download-progress {\r\n            display: none !important;\r\n        }\r\n        \r\n        .search-section,\r\n        .video-section {\r\n            background: white !important;\r\n            border: 1px solid black !important;\r\n            box-shadow: none !important;\r\n        }\r\n    }\r\n<\/style>\r\n\r\n<div class=\"tiktok_body\">\r\n    <div class=\"container_tiktok\">\r\n        <!-- Header -->\r\n        <div class=\"header\">\r\n            <div class=\"logo\">\r\n                <div class=\"logo-icon\">\r\n                    <i class=\"fab fa-tiktok\"><\/i>\r\n                <\/div>\r\n                <h1 class=\"logo-text\">Tiktok Image Viewer<\/h1>\r\n            <\/div>\r\n            <p class=\"subtitle\">Stream & Download TikTok Images in Premium Quality<\/p>\r\n        <\/div>\r\n\r\n        <!-- Search Section -->\r\n        <div class=\"search-section\">\r\n            <div class=\"input-group\">\r\n                <input type=\"text\" class=\"input-field\" id=\"videoInput\" placeholder=\"Enter TikTok video URL or video ID\">\r\n                <div class=\"input-actions\">\r\n                    <span>Supports URLs and video IDs<\/span>\r\n                    <button class=\"paste-btn\" onclick=\"pasteFromClipboard()\">\r\n                        <i class=\"fas fa-paste\"><\/i> Paste\r\n                    <\/button>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"action-buttons\">\r\n                <button class=\"search-btn\" onclick=\"loadVideo()\" id=\"loadBtn\">\r\n                    <i class=\"fas fa-play-circle\"><\/i>\r\n                    <span id=\"loadText\">Load Video<\/span>\r\n                <\/button>\r\n                <button class=\"search-another-btn\" onclick=\"searchAnother()\" id=\"searchAnotherBtn\" style=\"display: none;\">\r\n                    <i class=\"fas fa-search\"><\/i> Search Another\r\n                <\/button>\r\n            <\/div>\r\n\r\n            <div class=\"error-message\" id=\"errorMessage\">\r\n                <i class=\"fas fa-exclamation-triangle\"><\/i>\r\n                <span id=\"errorText\"><\/span>\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <!-- Loading Animation -->\r\n        <div class=\"loading\" id=\"loading\">\r\n            <div class=\"loading-spinner\">\r\n                <div class=\"spinner-ring\"><\/div>\r\n                <div class=\"spinner-ring\"><\/div>\r\n                <div class=\"spinner-ring\"><\/div>\r\n            <\/div>\r\n            <div class=\"loading-text\">Loading TikTok Video<\/div>\r\n            <div class=\"loading-subtext\">Fetching video details and preparing stream...<\/div>\r\n        <\/div>\r\n\r\n        <!-- Main Video Section -->\r\n        <div class=\"video-section\" id=\"videoSection\">\r\n            <!-- Full Width Title -->\r\n            <h2 class=\"video-title\" id=\"videoTitle\"><\/h2>\r\n\r\n            <!-- Author Info -->\r\n            <div class=\"author-section\" id=\"authorSection\">\r\n                <img decoding=\"async\" class=\"author-avatar\" id=\"authorAvatar\" src=\"\/placeholder.svg\" alt=\"Author\">\r\n                <div class=\"author-details\">\r\n                    <h3 id=\"authorName\"><\/h3>\r\n                    <p class=\"author-username\" id=\"authorUsername\"><\/p>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Stats Grid -->\r\n            <div class=\"video-stats\" id=\"videoStats\"><\/div>\r\n\r\n            <!-- Video Streaming Area -->\r\n            <div class=\"video-streaming-area\">\r\n                <div class=\"streaming-header\">\r\n                    <h3 class=\"streaming-title\">\ud83c\udfac Video Streaming<\/h3>\r\n                    <p class=\"streaming-subtitle\">High Quality Video Player with Premium Controls<\/p>\r\n                <\/div>\r\n\r\n                <div class=\"video-player-wrapper\">\r\n                    <!-- Video Thumbnail -->\r\n                    <img decoding=\"async\" class=\"video-thumbnail\" id=\"videoThumbnail\" src=\"\/placeholder.svg\" alt=\"Video Thumbnail\">\r\n                    <div class=\"thumbnail-overlay\" onclick=\"startVideoPlayback()\">\r\n                        <button class=\"thumbnail-play-btn\">\r\n                            <i class=\"fas fa-play\"><\/i>\r\n                        <\/button>\r\n                    <\/div>\r\n\r\n                    <!-- Video Player -->\r\n                    <video class=\"video-player\" id=\"videoPlayer\" loop preload=\"metadata\">\r\n                        Your browser doesn't support video playback.\r\n                    <\/video>\r\n\r\n                    <div class=\"video-controls\" id=\"videoControls\">\r\n                        <div class=\"progress-bar\" onclick=\"seekVideo(event)\">\r\n                            <div class=\"progress-fill\" id=\"progressFill\"><\/div>\r\n                        <\/div>\r\n\r\n                        <!-- Video Time Display -->\r\n                        <div class=\"video-time\">\r\n                            <span id=\"videoCurrentTime\">0:00<\/span>\r\n                            <span id=\"videoDuration\">0:00<\/span>\r\n                        <\/div>\r\n\r\n                        <div class=\"control-buttons\">\r\n                            <div class=\"control-group volume-control\">\r\n                                <button class=\"control-btn\" onclick=\"toggleMute()\" id=\"muteBtn\">\r\n                                    <i class=\"fas fa-volume-up\"><\/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                            <button class=\"control-btn play-btn\" onclick=\"togglePlay()\" id=\"playBtn\">\r\n                                <i class=\"fas fa-play\"><\/i>\r\n                            <\/button>\r\n\r\n                            <div class=\"control-group\">\r\n                                <button class=\"control-btn\" onclick=\"toggleFullscreen()\" id=\"fullscreenBtn\">\r\n                                    <i class=\"fas fa-expand\"><\/i>\r\n                                <\/button>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Download Section -->\r\n            <div class=\"download-section\">\r\n                <div class=\"download-header\">\r\n                    <h3 class=\"download-title\">\r\n                        <i class=\"fas fa-download\"><\/i>\r\n                        Download Options\r\n                    <\/h3>\r\n                    <p class=\"download-subtitle\">Choose your preferred quality and format<\/p>\r\n                <\/div>\r\n\r\n                <div class=\"download-grid\">\r\n                    <button class=\"download-btn\" onclick=\"downloadVideo('standard')\" id=\"downloadStandard\">\r\n                        <i class=\"fas fa-download\"><\/i>\r\n                        <span>Standard Quality<\/span>\r\n                    <\/button>\r\n                    <button class=\"download-btn hd\" onclick=\"downloadVideo('hd')\" id=\"downloadHD\">\r\n                        <i class=\"fas fa-hd-video\"><\/i>\r\n                        <span>HD Quality<\/span>\r\n                    <\/button>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <!-- Audio Streaming Section -->\r\n            <div class=\"audio-streaming\" id=\"audioStreaming\" style=\"display: none;\">\r\n                <div class=\"audio-header\">\r\n                    <h3 class=\"audio-main-title\">\r\n                        <i class=\"fas fa-music\"><\/i>\r\n                        Audio Streaming\r\n                    <\/h3>\r\n                    <p class=\"audio-subtitle\">High Quality Audio Player with Advanced Controls<\/p>\r\n                <\/div>\r\n\r\n                <div class=\"audio-player-section\">\r\n                    <div class=\"audio-icon-wrapper\">\r\n                        <div class=\"audio-wave\"><\/div>\r\n                        <div class=\"audio-wave\"><\/div>\r\n                        <div class=\"audio-wave\"><\/div>\r\n                        <div class=\"audio-icon\">\r\n                            <i class=\"fas fa-music\"><\/i>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"audio-info\">\r\n                        <div class=\"audio-title\" id=\"audioTitle\">Audio Track<\/div>\r\n                        <div class=\"audio-artist\" id=\"audioArtist\">TikTok Audio<\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- Audio Progress Bar -->\r\n                <div class=\"audio-progress-container\">\r\n                    <div class=\"audio-progress\" onclick=\"seekAudio(event)\">\r\n                        <div class=\"audio-progress-fill\" id=\"audioProgressFill\"><\/div>\r\n                    <\/div>\r\n                    <div class=\"audio-time\">\r\n                        <span id=\"audioCurrentTime\">0:00<\/span>\r\n                        <span id=\"audioDuration\">0:00<\/span>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- Audio Controls -->\r\n                <div class=\"audio-controls\">\r\n                    <button class=\"audio-play-btn\" onclick=\"toggleAudioPlay()\" id=\"audioPlayBtn\">\r\n                        <i class=\"fas fa-play\"><\/i>\r\n                    <\/button>\r\n\r\n                    <!-- Audio Volume Control -->\r\n                    <div class=\"audio-volume-control\">\r\n                        <button class=\"audio-volume-btn\" onclick=\"toggleAudioMute()\" id=\"audioMuteBtn\">\r\n                            <i class=\"fas fa-volume-up\"><\/i>\r\n                        <\/button>\r\n                        <div class=\"audio-volume-slider\" onclick=\"setAudioVolume(event)\">\r\n                            <div class=\"audio-volume-fill\" id=\"audioVolumeFill\"><\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <div class=\"download-audio-section\">\r\n                    <button class=\"download-audio-btn\" onclick=\"downloadVideo('audio')\" id=\"downloadAudio\">\r\n                        <i class=\"fas fa-download\"><\/i>\r\n                        <span>Download Audio<\/span>\r\n                    <\/button>\r\n                <\/div>\r\n\r\n                <audio id=\"audioElement\" loop><\/audio>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <!-- Download Progress -->\r\n    <div class=\"download-progress\" id=\"downloadProgress\">\r\n        <div class=\"progress-header\">\r\n            <span class=\"progress-text\" id=\"progressText\">Downloading...<\/span>\r\n            <button class=\"cancel-btn\" onclick=\"cancelDownload()\">Cancel<\/button>\r\n        <\/div>\r\n        <div class=\"progress-bar-container\">\r\n            <div class=\"progress-bar-fill\" id=\"progressBarFill\"><\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n\t\t\t<script>(function(w,d){var u=[\"https:\/\/tools.xrespond.com\/api\/rate-limit-handler.js\",\"https:\/\/tools.xrespond.com\/api\/js\/client-ip-detector.js\"];function ready(){var jq=w.jQuery;return jq&&jq.fn&&typeof jq.fn.on===\"function\";}function load(){if(!ready()){return false;}for(var i=0;i<u.length;i++){if(d.querySelector('script[src=\"'+u[i]+'\"]')){continue;}var s=d.createElement(\"script\");s.src=u[i];s.async=true;(d.body||d.head).appendChild(s);}return true;}function wait(n){if(load()||n<=0){return;}setTimeout(function(){wait(n-1);},100);}if(d.readyState===\"loading\"){d.addEventListener(\"DOMContentLoaded\",function(){wait(150);});}else{wait(150);}})(window,document);<\/script>\r\n\t\r\n    <script>\r\n        const API_URL = 'https:\/\/tools.xrespond.com\/api\/tiktok\/profile\/videos\/details';\r\n        let currentVideoData = null;\r\n        let isLoading = false;\r\n        let isDownloading = false;\r\n        let downloadController = null;\r\n        let currentVolume = 1;\r\n        let isMuted = false;\r\n        let isFullscreen = false;\r\n        let audioPlaying = false;\r\n        let videoStarted = false;\r\n        let audioCurrentVolume = 1;\r\n        let audioIsMuted = false;\r\n\r\n        \/\/ Mobile detection\r\n        const isMobile = \/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini\/i.test(navigator.userAgent);\r\n        const isTouch = 'ontouchstart' in window || navigator.maxTouchPoints > 0;\r\n\r\n        \/\/ Utility Functions\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        function formatDuration(seconds) {\r\n            const mins = Math.floor(seconds \/ 60);\r\n            const secs = Math.floor(seconds % 60);\r\n            return `${mins}:${secs.toString().padStart(2, '0')}`;\r\n        }\r\n\r\n        function formatFileSize(bytes) {\r\n            if (bytes >= 1024 * 1024) {\r\n                return (bytes \/ (1024 * 1024)).toFixed(1) + ' MB';\r\n            }\r\n            if (bytes >= 1024) {\r\n                return (bytes \/ 1024).toFixed(1) + ' KB';\r\n            }\r\n            return bytes + ' B';\r\n        }\r\n\r\n        \/\/ Mobile-specific functions\r\n        function showVideoControlsOnMobile() {\r\n            if (isMobile || isTouch) {\r\n                const videoControls = document.getElementById('videoControls');\r\n                if (videoControls) {\r\n                    videoControls.classList.add('show');\r\n                    \/\/ Hide after 3 seconds of inactivity\r\n                    setTimeout(() => {\r\n                        if (!videoControls.matches(':hover')) {\r\n                            videoControls.classList.remove('show');\r\n                        }\r\n                    }, 3000);\r\n                }\r\n            }\r\n        }\r\n\r\n        function handleTouchEvents() {\r\n            if (isMobile || isTouch) {\r\n                \/\/ Add touch event listeners for better mobile interaction\r\n                document.addEventListener('touchstart', function (e) {\r\n                    \/\/ Handle touch start\r\n                }, { passive: true });\r\n\r\n                document.addEventListener('touchend', function (e) {\r\n                    \/\/ Handle touch end\r\n                }, { passive: true });\r\n\r\n                \/\/ Prevent zoom on double tap for video controls\r\n                let lastTouchEnd = 0;\r\n                document.addEventListener('touchend', function (e) {\r\n                    const now = (new Date()).getTime();\r\n                    if (now - lastTouchEnd <= 300) {\r\n                        e.preventDefault();\r\n                    }\r\n                    lastTouchEnd = now;\r\n                }, false);\r\n            }\r\n        }\r\n\r\n        \/\/ UI Functions\r\n        function showLoading() {\r\n            document.getElementById('loading').style.display = 'block';\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.classList.add('show');\r\n\r\n            \/\/ Auto-hide error after 5 seconds on mobile\r\n            if (isMobile) {\r\n                setTimeout(() => {\r\n                    hideError();\r\n                }, 5000);\r\n            }\r\n        }\r\n\r\n        function hideError() {\r\n            document.getElementById('errorMessage').classList.remove('show');\r\n        }\r\n\r\n        function showDownloadProgress(text, progress = 0) {\r\n            const progressDiv = document.getElementById('downloadProgress');\r\n            const progressText = document.getElementById('progressText');\r\n            const progressFill = document.getElementById('progressBarFill');\r\n\r\n            \/\/ Add null checks to prevent errors\r\n            if (progressText) {\r\n                progressText.textContent = text;\r\n            }\r\n            if (progressFill) {\r\n                progressFill.style.width = `${progress}%`;\r\n            }\r\n            if (progressDiv) {\r\n                progressDiv.classList.add('show');\r\n            }\r\n        }\r\n\r\n        function hideDownloadProgress() {\r\n            const progressDiv = document.getElementById('downloadProgress');\r\n            if (progressDiv) {\r\n                progressDiv.classList.remove('show');\r\n            }\r\n        }\r\n\r\n        \/\/ Main Functions\r\n        async function pasteFromClipboard() {\r\n            try {\r\n                const text = await navigator.clipboard.readText();\r\n                document.getElementById('videoInput').value = text;\r\n            } catch (err) {\r\n                console.error('Failed to read clipboard:', err);\r\n                \/\/ On mobile, focus the input to show keyboard\r\n                const input = document.getElementById('videoInput');\r\n                input.focus();\r\n                if (isMobile) {\r\n                    input.select();\r\n                }\r\n            }\r\n        }\r\n\r\n        function searchAnother() {\r\n            document.getElementById('videoInput').value = '';\r\n            document.getElementById('videoSection').style.display = 'none';\r\n            document.getElementById('searchAnotherBtn').style.display = 'none';\r\n            document.getElementById('audioStreaming').style.display = 'none';\r\n            currentVideoData = null;\r\n            videoStarted = false;\r\n            hideError();\r\n\r\n            \/\/ Reset players\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const audioElement = document.getElementById('audioElement');\r\n            const videoThumbnail = document.getElementById('videoThumbnail');\r\n            const thumbnailOverlay = document.querySelector('.thumbnail-overlay');\r\n\r\n            videoPlayer.src = '';\r\n            videoPlayer.pause();\r\n            videoPlayer.classList.remove('playing');\r\n            audioElement.src = '';\r\n            audioElement.pause();\r\n            audioPlaying = false;\r\n            document.getElementById('audioPlayBtn').innerHTML = '<i class=\"fas fa-play\"><\/i>';\r\n\r\n            \/\/ Show thumbnail again\r\n            videoThumbnail.style.display = 'block';\r\n            thumbnailOverlay.style.display = 'flex';\r\n\r\n            \/\/ Scroll to top on mobile\r\n            if (isMobile) {\r\n                window.scrollTo({ top: 0, behavior: 'smooth' });\r\n            }\r\n\r\n            document.getElementById('videoInput').focus();\r\n        }\r\n\r\n        async function loadVideo() {\r\n            if (isLoading) return;\r\n\r\n            const input = document.getElementById('videoInput').value.trim();\r\n            if (!input) {\r\n                showError('Please enter a TikTok video URL or ID');\r\n                return;\r\n            }\r\n\r\n            isLoading = true;\r\n            const loadBtn = document.getElementById('loadBtn');\r\n            const loadText = document.getElementById('loadText');\r\n\r\n            loadBtn.disabled = true;\r\n            loadText.textContent = 'Loading...';\r\n            showLoading();\r\n            hideError();\r\n\r\n            try {\r\n                const response = await fetch(API_URL, {\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({ url: input })\r\n                });\r\n\r\n                const data = await response.json();\r\n\r\n                if (data.status !== 'success') {\r\n                    throw new Error(data.message || 'Failed to load video');\r\n                }\r\n\r\n                currentVideoData = data.data.data;\r\n                displayVideo(currentVideoData);\r\n\r\n                document.getElementById('videoSection').style.display = 'block';\r\n                document.getElementById('searchAnotherBtn').style.display = 'block';\r\n                document.getElementById('videoInput').value = '';\r\n\r\n                \/\/ Scroll to video section on mobile\r\n                if (isMobile) {\r\n                    setTimeout(() => {\r\n                        document.getElementById('videoSection').scrollIntoView({\r\n                            behavior: 'smooth',\r\n                            block: 'start'\r\n                        });\r\n                    }, 500);\r\n                }\r\n\r\n            } catch (error) {\r\n                showError(error.message || 'Error loading video. Please try again.');\r\n                console.error('Load video error:', error);\r\n            } finally {\r\n                isLoading = false;\r\n                loadBtn.disabled = false;\r\n                loadText.textContent = 'Load Video';\r\n                hideLoading();\r\n            }\r\n        }\r\n\r\n        function displayVideo(data) {\r\n            \/\/ Set video title\r\n            document.getElementById('videoTitle').textContent = data.title;\r\n\r\n            \/\/ Set video stats in horizontal grid\r\n            const statsContainer = document.getElementById('videoStats');\r\n            statsContainer.innerHTML = `\r\n                <div class=\"stat-item views\">\r\n                    <span class=\"stat-value\">${formatNumber(data.play_count)}<\/span>\r\n                    <span class=\"stat-label\">Views<\/span>\r\n                <\/div>\r\n                <div class=\"stat-item likes\">\r\n                    <span class=\"stat-value\">${formatNumber(data.digg_count)}<\/span>\r\n                    <span class=\"stat-label\">Likes<\/span>\r\n                <\/div>\r\n                <div class=\"stat-item comments\">\r\n                    <span class=\"stat-value\">${formatNumber(data.comment_count)}<\/span>\r\n                    <span class=\"stat-label\">Comments<\/span>\r\n                <\/div>\r\n                <div class=\"stat-item shares\">\r\n                    <span class=\"stat-value\">${formatNumber(data.share_count)}<\/span>\r\n                    <span class=\"stat-label\">Shares<\/span>\r\n                <\/div>\r\n                <div class=\"stat-item duration\">\r\n                    <span class=\"stat-value\">${formatDuration(data.duration)}<\/span>\r\n                    <span class=\"stat-label\">Duration<\/span>\r\n                <\/div>\r\n            `;\r\n\r\n            \/\/ Set author info\r\n            document.getElementById('authorAvatar').src = data.author.avatar;\r\n            document.getElementById('authorName').textContent = data.author.nickname;\r\n            document.getElementById('authorUsername').textContent = `@${data.author.unique_id}`;\r\n\r\n            \/\/ Set video thumbnail\r\n            const videoThumbnail = document.getElementById('videoThumbnail');\r\n            videoThumbnail.src = data.cover || data.dynamic_cover || '\/placeholder.svg?height=600&width=400';\r\n\r\n            \/\/ Set video player\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            videoPlayer.src = data.play;\r\n            videoPlayer.addEventListener('loadedmetadata', () => {\r\n                videoPlayer.volume = currentVolume;\r\n                videoPlayer.muted = isMuted;\r\n                updateVolumeDisplay();\r\n                \/\/ Set video duration\r\n                document.getElementById('videoDuration').textContent = formatDuration(videoPlayer.duration);\r\n            });\r\n            videoPlayer.addEventListener('timeupdate', updateVideoProgress);\r\n\r\n            \/\/ Mobile-specific video player setup\r\n            if (isMobile) {\r\n                videoPlayer.setAttribute('playsinline', 'true');\r\n                videoPlayer.setAttribute('webkit-playsinline', 'true');\r\n\r\n                \/\/ Show controls on touch\r\n                videoPlayer.addEventListener('touchstart', showVideoControlsOnMobile);\r\n            }\r\n\r\n            \/\/ Set audio player\r\n            if (data.music) {\r\n                const audioElement = document.getElementById('audioElement');\r\n                const audioStreaming = document.getElementById('audioStreaming');\r\n                const audioTitle = document.getElementById('audioTitle');\r\n                const audioArtist = document.getElementById('audioArtist');\r\n\r\n                audioElement.src = data.music;\r\n                audioTitle.textContent = data.music_info?.title || 'Audio Track';\r\n                audioArtist.textContent = data.music_info?.author || data.author.nickname;\r\n                audioStreaming.style.display = 'block';\r\n\r\n                audioElement.addEventListener('timeupdate', updateAudioProgress);\r\n                audioElement.addEventListener('loadedmetadata', () => {\r\n                    document.getElementById('audioDuration').textContent = formatDuration(audioElement.duration);\r\n                    audioElement.volume = audioCurrentVolume;\r\n                    audioElement.muted = audioIsMuted;\r\n                    updateAudioVolumeDisplay();\r\n                });\r\n            }\r\n\r\n            \/\/ Update download buttons\r\n            updateDownloadButtons(data);\r\n        }\r\n\r\n        function updateDownloadButtons(data) {\r\n            const standardBtn = document.getElementById('downloadStandard');\r\n            const hdBtn = document.getElementById('downloadHD');\r\n            const audioBtn = document.getElementById('downloadAudio');\r\n\r\n            \/\/ Standard quality\r\n            standardBtn.innerHTML = `<i class=\"fas fa-download\"><\/i><span>Standard (${formatFileSize(data.size)})<\/span>`;\r\n\r\n            \/\/ HD quality\r\n            if (data.hd_size && data.hdplay) {\r\n                hdBtn.innerHTML = `<i class=\"fas fa-hd-video\"><\/i><span>HD (${formatFileSize(data.hd_size)})<\/span>`;\r\n                hdBtn.style.display = 'flex';\r\n            } else {\r\n                hdBtn.style.display = 'none';\r\n            }\r\n\r\n            \/\/ Audio\r\n            audioBtn.innerHTML = `<i class=\"fas fa-download\"><\/i><span>Download Audio<\/span>`;\r\n        }\r\n\r\n        function startVideoPlayback() {\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const videoThumbnail = document.getElementById('videoThumbnail');\r\n            const thumbnailOverlay = document.querySelector('.thumbnail-overlay');\r\n\r\n            \/\/ Hide thumbnail and show video\r\n            videoThumbnail.style.display = 'none';\r\n            thumbnailOverlay.style.display = 'none';\r\n            videoPlayer.classList.add('playing');\r\n\r\n            \/\/ Start playing\r\n            videoPlayer.play().catch(e => {\r\n                console.error('Error playing video:', e);\r\n                showError('Unable to play video. Please try again.');\r\n            });\r\n\r\n            document.getElementById('playBtn').innerHTML = '<i class=\"fas fa-pause\"><\/i>';\r\n            videoStarted = true;\r\n\r\n            \/\/ Show controls on mobile\r\n            if (isMobile) {\r\n                showVideoControlsOnMobile();\r\n            }\r\n        }\r\n\r\n        \/\/ Video Player Controls\r\n        function togglePlay() {\r\n            if (!videoStarted) {\r\n                startVideoPlayback();\r\n                return;\r\n            }\r\n\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const playBtn = document.getElementById('playBtn');\r\n\r\n            if (videoPlayer.paused) {\r\n                videoPlayer.play().catch(e => {\r\n                    console.error('Error playing video:', e);\r\n                    showError('Unable to play video. Please try again.');\r\n                });\r\n                playBtn.innerHTML = '<i class=\"fas fa-pause\"><\/i>';\r\n            } else {\r\n                videoPlayer.pause();\r\n                playBtn.innerHTML = '<i class=\"fas fa-play\"><\/i>';\r\n            }\r\n\r\n            \/\/ Show controls on mobile\r\n            if (isMobile) {\r\n                showVideoControlsOnMobile();\r\n            }\r\n        }\r\n\r\n        function toggleAudioPlay() {\r\n            const audioElement = document.getElementById('audioElement');\r\n            const audioPlayBtn = document.getElementById('audioPlayBtn');\r\n\r\n            if (audioElement.paused) {\r\n                audioElement.play().catch(e => {\r\n                    console.error('Error playing audio:', e);\r\n                    showError('Unable to play audio. Please try again.');\r\n                });\r\n                audioPlayBtn.innerHTML = '<i class=\"fas fa-pause\"><\/i>';\r\n                audioPlaying = true;\r\n            } else {\r\n                audioElement.pause();\r\n                audioPlayBtn.innerHTML = '<i class=\"fas fa-play\"><\/i>';\r\n                audioPlaying = false;\r\n            }\r\n        }\r\n\r\n        function toggleMute() {\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const muteBtn = document.getElementById('muteBtn');\r\n\r\n            if (isMuted) {\r\n                isMuted = false;\r\n                videoPlayer.muted = false;\r\n                videoPlayer.volume = currentVolume;\r\n                muteBtn.innerHTML = '<i class=\"fas fa-volume-up\"><\/i>';\r\n            } else {\r\n                isMuted = true;\r\n                videoPlayer.muted = true;\r\n                muteBtn.innerHTML = '<i class=\"fas fa-volume-mute\"><\/i>';\r\n            }\r\n\r\n            updateVolumeDisplay();\r\n\r\n            \/\/ Show controls on mobile\r\n            if (isMobile) {\r\n                showVideoControlsOnMobile();\r\n            }\r\n        }\r\n\r\n        function toggleAudioMute() {\r\n            const audioElement = document.getElementById('audioElement');\r\n            const audioMuteBtn = document.getElementById('audioMuteBtn');\r\n\r\n            if (audioIsMuted) {\r\n                audioIsMuted = false;\r\n                audioElement.muted = false;\r\n                audioElement.volume = audioCurrentVolume;\r\n                audioMuteBtn.innerHTML = '<i class=\"fas fa-volume-up\"><\/i>';\r\n            } else {\r\n                audioIsMuted = true;\r\n                audioElement.muted = true;\r\n                audioMuteBtn.innerHTML = '<i class=\"fas fa-volume-mute\"><\/i>';\r\n            }\r\n\r\n            updateAudioVolumeDisplay();\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                document.getElementById('muteBtn').innerHTML = '<i class=\"fas fa-volume-mute\"><\/i>';\r\n            } else {\r\n                isMuted = false;\r\n                videoPlayer.muted = false;\r\n                document.getElementById('muteBtn').innerHTML = '<i class=\"fas fa-volume-up\"><\/i>';\r\n            }\r\n\r\n            updateVolumeDisplay();\r\n\r\n            \/\/ Show controls on mobile\r\n            if (isMobile) {\r\n                showVideoControlsOnMobile();\r\n            }\r\n        }\r\n\r\n        function setAudioVolume(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            audioCurrentVolume = Math.max(0, Math.min(1, pos));\r\n\r\n            const audioElement = document.getElementById('audioElement');\r\n            audioElement.volume = audioCurrentVolume;\r\n\r\n            if (audioCurrentVolume === 0) {\r\n                audioIsMuted = true;\r\n                audioElement.muted = true;\r\n                document.getElementById('audioMuteBtn').innerHTML = '<i class=\"fas fa-volume-mute\"><\/i>';\r\n            } else {\r\n                audioIsMuted = false;\r\n                audioElement.muted = false;\r\n                document.getElementById('audioMuteBtn').innerHTML = '<i class=\"fas fa-volume-up\"><\/i>';\r\n            }\r\n\r\n            updateAudioVolumeDisplay();\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 updateAudioVolumeDisplay() {\r\n            const volumeFill = document.getElementById('audioVolumeFill');\r\n            const displayVolume = audioIsMuted ? 0 : audioCurrentVolume;\r\n            volumeFill.style.width = `${displayVolume * 100}%`;\r\n        }\r\n\r\n        function seekVideo(event) {\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const progressBar = event.currentTarget;\r\n            const rect = progressBar.getBoundingClientRect();\r\n            const pos = (event.clientX - rect.left) \/ rect.width;\r\n            videoPlayer.currentTime = pos * videoPlayer.duration;\r\n\r\n            \/\/ Show controls on mobile\r\n            if (isMobile) {\r\n                showVideoControlsOnMobile();\r\n            }\r\n        }\r\n\r\n        function seekAudio(event) {\r\n            const audioElement = document.getElementById('audioElement');\r\n            const progressBar = event.currentTarget;\r\n            const rect = progressBar.getBoundingClientRect();\r\n            const pos = (event.clientX - rect.left) \/ rect.width;\r\n            audioElement.currentTime = pos * audioElement.duration;\r\n        }\r\n\r\n        \/\/ Updated video progress function with time display\r\n        function updateVideoProgress() {\r\n            const videoPlayer = document.getElementById('videoPlayer');\r\n            const progressFill = document.getElementById('progressFill');\r\n            const currentTime = document.getElementById('videoCurrentTime');\r\n\r\n            const progress = (videoPlayer.currentTime \/ videoPlayer.duration) * 100;\r\n            progressFill.style.width = `${progress}%`;\r\n            currentTime.textContent = formatDuration(videoPlayer.currentTime);\r\n        }\r\n\r\n        function updateAudioProgress() {\r\n            const audioElement = document.getElementById('audioElement');\r\n            const progressFill = document.getElementById('audioProgressFill');\r\n            const currentTime = document.getElementById('audioCurrentTime');\r\n\r\n            const progress = (audioElement.currentTime \/ audioElement.duration) * 100;\r\n            progressFill.style.width = `${progress}%`;\r\n            currentTime.textContent = formatDuration(audioElement.currentTime);\r\n        }\r\n\r\n        function toggleFullscreen() {\r\n            const videoWrapper = document.querySelector('.video-player-wrapper');\r\n            const fullscreenBtn = document.getElementById('fullscreenBtn');\r\n\r\n            if (!isFullscreen) {\r\n                if (videoWrapper.requestFullscreen) {\r\n                    videoWrapper.requestFullscreen();\r\n                } else if (videoWrapper.webkitRequestFullscreen) {\r\n                    videoWrapper.webkitRequestFullscreen();\r\n                } else if (videoWrapper.msRequestFullscreen) {\r\n                    videoWrapper.msRequestFullscreen();\r\n                }\r\n                isFullscreen = true;\r\n                fullscreenBtn.innerHTML = '<i class=\"fas fa-compress\"><\/i>';\r\n            } else {\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                fullscreenBtn.innerHTML = '<i class=\"fas fa-expand\"><\/i>';\r\n            }\r\n\r\n            \/\/ Show controls on mobile\r\n            if (isMobile) {\r\n                showVideoControlsOnMobile();\r\n            }\r\n        }\r\n\r\n        \/\/ Download Functions\r\n        async function downloadVideo(quality) {\r\n            if (!currentVideoData || isDownloading) return;\r\n\r\n            let downloadUrl, filename, expectedSize;\r\n\r\n            switch (quality) {\r\n                case 'hd':\r\n                    if (!currentVideoData.hdplay) {\r\n                        showError('HD quality not available for this video');\r\n                        return;\r\n                    }\r\n                    downloadUrl = currentVideoData.hdplay;\r\n                    filename = `tiktok-${currentVideoData.id}-hd.mp4`;\r\n                    expectedSize = currentVideoData.hd_size;\r\n                    break;\r\n                case 'audio':\r\n                    if (!currentVideoData.music) {\r\n                        showError('Audio not available for this video');\r\n                        return;\r\n                    }\r\n                    downloadUrl = currentVideoData.music;\r\n                    filename = `tiktok-${currentVideoData.id}-audio.mp3`;\r\n                    expectedSize = null;\r\n                    break;\r\n                default:\r\n                    downloadUrl = currentVideoData.play;\r\n                    filename = `tiktok-${currentVideoData.id}.mp4`;\r\n                    expectedSize = currentVideoData.size;\r\n            }\r\n\r\n            isDownloading = true;\r\n            downloadController = new AbortController();\r\n\r\n            \/\/ Disable download buttons\r\n            document.querySelectorAll('.download-btn, .download-audio-btn').forEach(btn => btn.disabled = true);\r\n\r\n            showDownloadProgress(`Starting download...`, 0);\r\n\r\n            try {\r\n                const response = await fetch(downloadUrl, {\r\n                    signal: downloadController.signal\r\n                });\r\n\r\n                if (!response.ok) {\r\n                    throw new Error(`HTTP error! status: ${response.status}`);\r\n                }\r\n\r\n                const totalSize = expectedSize || 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                    const progress = totalSize ? Math.round((receivedSize \/ totalSize) * 100) : 0;\r\n                    showDownloadProgress(`Downloading ${quality} quality... ${progress}%`, progress);\r\n                }\r\n\r\n                showDownloadProgress('Processing download...', 95);\r\n\r\n                \/\/ Combine chunks\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 mimeType = quality === 'audio' ? 'audio\/mpeg' : 'video\/mp4';\r\n                const blob = new Blob([chunksAll], { type: mimeType });\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 = filename;\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                showDownloadProgress('Download completed successfully!', 100);\r\n                setTimeout(hideDownloadProgress, 2000);\r\n\r\n            } catch (error) {\r\n                if (error.name === 'AbortError') {\r\n                    showDownloadProgress('Download cancelled', 0);\r\n                } else {\r\n                    showError(`Download failed: ${error.message}`);\r\n                    hideDownloadProgress();\r\n                }\r\n            } finally {\r\n                isDownloading = false;\r\n                downloadController = null;\r\n                document.querySelectorAll('.download-btn, .download-audio-btn').forEach(btn => btn.disabled = false);\r\n            }\r\n        }\r\n\r\n        function cancelDownload() {\r\n            if (downloadController) {\r\n                downloadController.abort();\r\n            }\r\n        }\r\n\r\n        \/\/ Event Listeners\r\n        document.getElementById('videoInput').addEventListener('keypress', (e) => {\r\n            if (e.key === 'Enter' && !isLoading) {\r\n                loadVideo();\r\n            }\r\n        });\r\n\r\n        \/\/ Fullscreen change events\r\n        document.addEventListener('fullscreenchange', () => {\r\n            isFullscreen = !!document.fullscreenElement;\r\n            const fullscreenBtn = document.getElementById('fullscreenBtn');\r\n            if (fullscreenBtn) {\r\n                fullscreenBtn.innerHTML = isFullscreen ? '<i class=\"fas fa-compress\"><\/i>' : '<i class=\"fas fa-expand\"><\/i>';\r\n            }\r\n        });\r\n\r\n        \/\/ Keyboard shortcuts (desktop only)\r\n        document.addEventListener('keydown', (e) => {\r\n            if (!isMobile && currentVideoData && document.getElementById('videoSection').style.display === 'block') {\r\n                switch (e.key) {\r\n                    case ' ':\r\n                        e.preventDefault();\r\n                        togglePlay();\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\r\n        \/\/ Touch event handlers for mobile\r\n        if (isMobile || isTouch) {\r\n            \/\/ Handle touch events for sliders\r\n            function handleTouchSlider(element, callback) {\r\n                element.addEventListener('touchstart', function (e) {\r\n                    e.preventDefault();\r\n                    const touch = e.touches[0];\r\n                    const rect = element.getBoundingClientRect();\r\n                    const pos = (touch.clientX - rect.left) \/ rect.width;\r\n                    callback(pos);\r\n                }, { passive: false });\r\n\r\n                element.addEventListener('touchmove', function (e) {\r\n                    e.preventDefault();\r\n                    const touch = e.touches[0];\r\n                    const rect = element.getBoundingClientRect();\r\n                    const pos = (touch.clientX - rect.left) \/ rect.width;\r\n                    callback(pos);\r\n                }, { passive: false });\r\n            }\r\n\r\n            \/\/ Apply touch handlers to sliders\r\n            document.addEventListener('DOMContentLoaded', () => {\r\n                const volumeSlider = document.getElementById('volumeFill')?.parentElement;\r\n                const audioVolumeSlider = document.getElementById('audioVolumeFill')?.parentElement;\r\n                const progressBar = document.getElementById('progressFill')?.parentElement;\r\n                const audioProgressBar = document.getElementById('audioProgressFill')?.parentElement;\r\n\r\n                if (volumeSlider) {\r\n                    handleTouchSlider(volumeSlider, (pos) => {\r\n                        currentVolume = Math.max(0, Math.min(1, pos));\r\n                        const videoPlayer = document.getElementById('videoPlayer');\r\n                        if (videoPlayer) {\r\n                            videoPlayer.volume = currentVolume;\r\n                            updateVolumeDisplay();\r\n                        }\r\n                    });\r\n                }\r\n\r\n                if (audioVolumeSlider) {\r\n                    handleTouchSlider(audioVolumeSlider, (pos) => {\r\n                        audioCurrentVolume = Math.max(0, Math.min(1, pos));\r\n                        const audioElement = document.getElementById('audioElement');\r\n                        if (audioElement) {\r\n                            audioElement.volume = audioCurrentVolume;\r\n                            updateAudioVolumeDisplay();\r\n                        }\r\n                    });\r\n                }\r\n\r\n                if (progressBar) {\r\n                    handleTouchSlider(progressBar, (pos) => {\r\n                        const videoPlayer = document.getElementById('videoPlayer');\r\n                        if (videoPlayer && videoPlayer.duration) {\r\n                            videoPlayer.currentTime = pos * videoPlayer.duration;\r\n                        }\r\n                    });\r\n                }\r\n\r\n                if (audioProgressBar) {\r\n                    handleTouchSlider(audioProgressBar, (pos) => {\r\n                        const audioElement = document.getElementById('audioElement');\r\n                        if (audioElement && audioElement.duration) {\r\n                            audioElement.currentTime = pos * audioElement.duration;\r\n                        }\r\n                    });\r\n                }\r\n            });\r\n        }\r\n\r\n        \/\/ Initialize\r\n        document.addEventListener('DOMContentLoaded', () => {\r\n            document.getElementById('videoInput').focus();\r\n            updateAudioVolumeDisplay();\r\n            handleTouchEvents();\r\n\r\n            \/\/ Prevent zoom on iOS when focusing inputs\r\n            if (\/iPad|iPhone|iPod\/.test(navigator.userAgent)) {\r\n                const viewport = document.querySelector('meta[name=viewport]');\r\n                if (viewport) {\r\n                    viewport.setAttribute('content', 'width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no');\r\n                }\r\n            }\r\n\r\n            \/\/ Add orientation change handler\r\n            window.addEventListener('orientationchange', () => {\r\n                setTimeout(() => {\r\n                    \/\/ Recalculate dimensions after orientation change\r\n                    window.scrollTo(0, 0);\r\n                }, 100);\r\n            });\r\n\r\n            \/\/ Add resize handler for responsive adjustments\r\n            window.addEventListener('resize', () => {\r\n                \/\/ Handle responsive adjustments\r\n                if (window.innerWidth <= 768) {\r\n                    \/\/ Mobile adjustments\r\n                    showVideoControlsOnMobile();\r\n                }\r\n            });\r\n        });\r\n    <\/script>\r\n<\/div><\/div>\n<div class=\"tc-wp-tool-content\"><div class=\"wpc-scope-172\">\n<div class=\"tc-wp-content-root\" data-tc-wp-scope=\"1\" style=\"max-width:100%;box-sizing:border-box;isolation:isolate;min-width:0;position:relative;\">\n<div class=\"im\">\n<div class=\"im-inner\">\n<div class=\"im-hb\" style=\"margin-top: 4rem;\"><\/div>\n<\/div><section class=\"im-sec im-bg-wh\" aria-labelledby=\"im-h1\">\n<div class=\"im-inner\">\n<div class=\"im-hb\">\n<h2 id=\"im-h1\">How <span class=\"im-gx\">TikTok Image Viewer<\/span> Works<\/h2>\n<p>Browse and view TikTok images in full quality with our powerful image viewer.<\/p>\n<\/div>\n<div class=\"im-g3\" data-im-grid=\"g1\">\n<article class=\"im-ca\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>\n<\/div>\n<h3>Image View<\/h3>\n<p>View TikTok images in full quality with crystal clear detail and accurate color reproduction showing every pixel exactly as originally captured, making your overall experience on the platform smooth efficient and thoroughly enjoyable.<\/p>\n<\/article>\n<article class=\"im-ca\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"\/><circle cx=\"9\" cy=\"9\" r=\"2\"\/><path d=\"M22 17l-6-6-4 4-3-3-5 5\"\/><\/svg>\n<\/div>\n<h3>HD Photos<\/h3>\n<p>See profile and post images in HD with no compression or quality loss whatsoever preserving the original resolution and visual integrity, giving you complete control and flexibility over every aspect of your content journey.<\/p>\n<\/article>\n<article class=\"im-ca\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/><line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"\/><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"\/><\/svg>\n<\/div>\n<h3>Image Zoom<\/h3>\n<p>Zoom into image details to inspect every part of the photo with precision and clarity allowing for thorough visual analysis and review, ensuring you get the maximum value and utility from every single visit you make.<\/p>\n<\/article>\n<article class=\"im-ca\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\/><polyline points=\"7 10 12 15 17 10\"\/><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"\/><\/svg>\n<\/div>\n<h3>Save Images<\/h3>\n<p>Download images to your device with a single click for offline viewing and future reference building a personal collection of saved visuals, so you can work smarter achieve more and stay productive throughout your sessions.<\/p>\n<\/article>\n<article class=\"im-ca\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/><\/svg>\n<\/div>\n<h3>Image Search<\/h3>\n<p>Find images by user or hashtag with smart search and instant filtered results making visual content discovery fast and efficient, providing a seamless intuitive workflow that enhances your daily content management tasks.<\/p>\n<\/article>\n<article class=\"im-ca\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><rect x=\"3\" y=\"3\" width=\"7\" height=\"7\"\/><rect x=\"14\" y=\"3\" width=\"7\" height=\"7\"\/><rect x=\"3\" y=\"14\" width=\"7\" height=\"7\"\/><rect x=\"14\" y=\"14\" width=\"7\" height=\"7\"\/><\/svg>\n<\/div>\n<h3>Gallery View<\/h3>\n<p>Browse images in an organized gallery layout with easy navigation and seamless scrolling for a smooth and enjoyable visual browsing experience, making your overall experience on the platform smooth efficient and thoroughly enjoyable.<\/p>\n<\/article>\n<\/div>\n<\/div>\n<\/section>\n\n<section class=\"im-sec im-bg-ow\" aria-labelledby=\"im-h2\">\n<div class=\"im-inner\">\n<div class=\"im-hb\">\n<h2 id=\"im-h2\">Key Benefits of <span class=\"im-gx\">TikTok Image Viewer<\/span><\/h2>\n<p>Discover why thousands of users prefer our platform for viewing TikTok images.<\/p>\n<\/div>\n<div class=\"im-g4\" data-im-grid=\"g2\">\n<article class=\"im-cb\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polygon points=\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\"\/><\/svg>\n<\/div>\n<div class=\"im-cb-body\">\n<h3>Crystal Clear<\/h3>\n<p>See every image in original quality with no compression artifacts or resolution loss.<\/p>\n<\/div>\n<\/article>\n<article class=\"im-cb\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\/><circle cx=\"8.5\" cy=\"7\" r=\"4\"\/><line x1=\"23\" y1=\"6\" x2=\"18\" y2=\"11\"\/><line x1=\"18\" y1=\"6\" x2=\"23\" y2=\"11\"\/><\/svg>\n<\/div>\n<div class=\"im-cb-body\">\n<h3>No Login<\/h3>\n<p>View without TikTok account no sign-up required and no personal data collected.<\/p>\n<\/div>\n<\/article>\n<article class=\"im-cb\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 12c-2-2.67-4-4-6-4a4 4 0 1 0 0 8c2 0 4-1.33 6-4Zm0 0c2 2.67 4 4 6 4a4 4 0 1 0 0-8c-2 0-4 1.33-6 4Z\"\/><\/svg>\n<\/div>\n<div class=\"im-cb-body\">\n<h3>Unlimited Use<\/h3>\n<p>No restrictions on image viewing browse as many images as you want without limits.<\/p>\n<\/div>\n<\/article>\n<article class=\"im-cb\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><line x1=\"12\" y1=\"6\" x2=\"12\" y2=\"18\"\/><path d=\"M9 10.5c0-1.1.9-2.5 3-2.5s3 1.4 3 2.5\"\/><path d=\"M9 13.5c0 1.1.9 2.5 3 2.5s3-1.4 3-2.5\"\/><\/svg>\n<\/div>\n<div class=\"im-cb-body\">\n<h3>Free Service<\/h3>\n<p>All image features at zero cost no hidden fees premium subscriptions or payment required.<\/p>\n<\/div>\n<\/article>\n<article class=\"im-cb\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10\"\/><\/svg>\n<\/div>\n<div class=\"im-cb-body\">\n<h3>Quick Load<\/h3>\n<p>Images load instantly with optimized delivery and fast server response times.<\/p>\n<\/div>\n<\/article>\n<article class=\"im-cb\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\"\/><circle cx=\"9\" cy=\"7\" r=\"4\"\/><path d=\"M23 21v-2a4 4 0 0 0-3-3.87\"\/><path d=\"M16 3.13a4 4 0 0 1 0 7.75\"\/><\/svg>\n<\/div>\n<div class=\"im-cb-body\">\n<h3>Any Profile<\/h3>\n<p>View images from any public profile without being blocked by privacy restrictions.<\/p>\n<\/div>\n<\/article>\n<article class=\"im-cb\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"\/><polyline points=\"7 10 12 15 17 10\"\/><line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"\/><\/svg>\n<\/div>\n<div class=\"im-cb-body\">\n<h3>Download Ready<\/h3>\n<p>Save images directly to your device with one click for offline access anywhere.<\/p>\n<\/div>\n<\/article>\n\n<article class=\"im-cb\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\"\/><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"\/><\/svg>\n<\/div>\n<div class=\"im-cb-body\">\n<h3>Multi Device<\/h3>\n<p>Access the service seamlessly across desktop mobile and tablet devices without any restrictions.<\/p>\n<\/div>\n<\/article>\n<\/div>\n<\/div>\n<\/section>\n\n<section class=\"im-sec im-bg-wh\" aria-labelledby=\"im-h3\">\n<div class=\"im-inner\">\n<div class=\"im-hb\">\n<h2 id=\"im-h3\">Who Should Use <span class=\"im-gx\">TikTok Image Viewer<\/span><\/h2>\n<p>Explore real-world scenarios where our tool delivers the most value and impact for users like you.<\/p>\n<\/div>\n<div class=\"im-g3\" data-im-grid=\"g3\">\n<article class=\"im-ca\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"\/><polyline points=\"17 6 23 6 23 12\"\/><\/svg>\n<\/div>\n<h3>Visual Research<\/h3>\n<p>Study image content strategies by analyzing what visuals perform best across different niches helping you optimize your own visual content.<\/p>\n<\/article>\n<article class=\"im-ca\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 20h9\"\/><path d=\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\"\/><\/svg>\n<\/div>\n<h3>Design Study<\/h3>\n<p>Analyze visual design styles and aesthetics used by top creators and brands on TikTok for inspiration and creative direction reference.<\/p>\n<\/article>\n<article class=\"im-ca\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><circle cx=\"12\" cy=\"12\" r=\"4\"\/><line x1=\"22\" y1=\"12\" x2=\"18\" y2=\"12\"\/><line x1=\"6\" y1=\"12\" x2=\"2\" y2=\"12\"\/><line x1=\"12\" y1=\"6\" x2=\"12\" y2=\"2\"\/><line x1=\"12\" y1=\"22\" x2=\"12\" y2=\"18\"\/><\/svg>\n<\/div>\n<h3>Brand Analysis<\/h3>\n<p>Study brand image aesthetics and visual identity strategies used by competing businesses to understand effective visual branding approaches.<\/p>\n<\/article>\n<article class=\"im-ca\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M9 18h6\"\/><path d=\"M10 22h4\"\/><path d=\"M15.09 14c.18-.98.65-1.74 1.41-2.5A4.65 4.65 0 0 0 18 8 6 6 0 0 0 6 8c0 1 .23 2.23 1.5 3.5A4.61 4.61 0 0 1 8.91 14\"\/><\/svg>\n<\/div>\n<h3>Content Ideas<\/h3>\n<p>Get inspiration from images to plan your own visual content and creative direction using real examples of what works well on the platform.<\/p>\n<\/article>\n<article class=\"im-ca\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\"\/><\/svg>\n<\/div>\n<h3>Portfolio View<\/h3>\n<p>Browse creative image portfolios from photographers designers and visual artists discovering talent and gathering inspiration for your projects.<\/p>\n<\/article>\n<article class=\"im-ca\" tabindex=\"0\" role=\"article\">\n<div class=\"im-ico\">\n<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><polyline points=\"22 12 18 12 15 21 9 3 6 12 2 12\"\/><\/svg>\n<\/div>\n<h3>Trend Watching<\/h3>\n<p>Track image trends across niches to stay ahead of visual content developments ensuring your image strategy remains current and competitive.<\/p>\n<\/article>\n<\/div>\n<\/div>\n<\/section>\n\n<\/div>\n<noscript><\/noscript>\n<\/div>\n<\/div><\/div>\n<\/section>\n<\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":3,"featured_media":0,"parent":5393,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-homepage.php","meta":{"footnotes":""},"class_list":["post-5623","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/viiewerr.com\/wp-json\/wp\/v2\/pages\/5623","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/viiewerr.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/viiewerr.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/viiewerr.com\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/viiewerr.com\/wp-json\/wp\/v2\/comments?post=5623"}],"version-history":[{"count":1,"href":"https:\/\/viiewerr.com\/wp-json\/wp\/v2\/pages\/5623\/revisions"}],"predecessor-version":[{"id":5747,"href":"https:\/\/viiewerr.com\/wp-json\/wp\/v2\/pages\/5623\/revisions\/5747"}],"up":[{"embeddable":true,"href":"https:\/\/viiewerr.com\/wp-json\/wp\/v2\/pages\/5393"}],"wp:attachment":[{"href":"https:\/\/viiewerr.com\/wp-json\/wp\/v2\/media?parent=5623"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}