{"id":5594,"date":"2026-02-17T00:00:14","date_gmt":"2026-02-17T00:00:14","guid":{"rendered":"https:\/\/ary-themes.com\/?page_id=5594"},"modified":"2026-03-04T08:57:59","modified_gmt":"2026-03-04T08:57:59","slug":"snapchat","status":"publish","type":"page","link":"https:\/\/ary-themes.com\/tools\/social-viewer\/snapchat\/","title":{"rendered":"Snapchat Viewer &#8211; Profile Tool"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5594\" class=\"elementor elementor-5594\">\n\t\t\t\t<div class=\"elementor-element elementor-element-14cee49f e-con-full e-flex e-con e-parent\" data-id=\"14cee49f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-59b9a8de elementor-widget elementor-widget-shortcode\" data-id=\"59b9a8de\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.5.0\/css\/all.min.css\">\r\n<script src=\"https:\/\/code.jquery.com\/jquery-3.6.0.min.js\"><\/script>\r\n\r\n<style>\r\n    \/* Reset and Base Styles - WP SAFETY with !important *\/\r\n    .sc-anonymous-viewer * {\r\n        margin: 0;\r\n        padding: 0;\r\n        box-sizing: border-box;\r\n    }\r\n\r\n    .sc-anonymous-viewer {\r\n        font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;\r\n        \/* UPDATED: Deep Blue\/Stunning Gradient Background for Main Tool Area *\/\r\n        background: linear-gradient(135deg, #1A2E46 0%, #2B4560 50%, #1A2E46 100%);\r\n        background-size: 200% 200%;\r\n        animation: gradientShift 15s ease infinite;\r\n        line-height: 1.6;\r\n        min-height: 100vh;\r\n        padding: 0 !important;\r\n        margin: 0 !important;\r\n        width: 100% !important;\r\n        max-width: 100% !important;\r\n        color: #333;\r\n        overflow-x: hidden;\r\n    }\r\n\r\n    @keyframes gradientShift {\r\n        0% {\r\n            background-position: 0% 50%;\r\n        }\r\n\r\n        50% {\r\n            background-position: 100% 50%;\r\n        }\r\n\r\n        100% {\r\n            background-position: 0% 50%;\r\n        }\r\n    }\r\n\r\n    .sc-anonymous-viewer .main-contain {\r\n        width: 100%;\r\n        margin: 0 auto;\r\n        padding: 40px 0 0 0;\r\n    }\r\n\r\n    \/* Tool Wrapper - Glassy White Theme *\/\r\n    .sc-anonymous-viewer .sc-tool-wrapper {\r\n        width: 94%;\r\n        \/* UPDATED: Max Width 1200px *\/\r\n        max-width: 1200px;\r\n        margin: 0 auto 50px auto;\r\n        padding: 40px 30px;\r\n        border-radius: 20px;\r\n        background: rgba(255, 255, 255, 0.95);\r\n        \/* Kept light for contrast against dark BG *\/\r\n        backdrop-filter: blur(12px);\r\n        color: #333;\r\n        text-align: center;\r\n        \/* UPDATED: Shadow color adjusted *\/\r\n        box-shadow: 0 20px 50px rgba(0, 0, 0, 0.3);\r\n        position: relative;\r\n        overflow: hidden;\r\n        border: 1px solid rgba(255, 255, 255, 0.8);\r\n    }\r\n\r\n    .sc-anonymous-viewer .sc-tool-wrapper::before {\r\n        content: \"\";\r\n        position: absolute;\r\n        top: 0;\r\n        left: 0;\r\n        width: 100%;\r\n        height: 100%;\r\n        \/* UPDATED: Radial gradient with accent color *\/\r\n        background: radial-gradient(circle at top right, rgba(242, 161, 75, 0.1), transparent 60%);\r\n        pointer-events: none;\r\n    }\r\n\r\n    \/* UPDATED: Header Styles for Title *\/\r\n    .sc-anonymous-viewer .sc-header {\r\n        margin-bottom: 30px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .sc-page-header {\r\n        width: 100%;\r\n        text-align: center;\r\n        padding: clamp(18px, 9vh, 0px) 20px 36px;\r\n    }\r\n\r\n    \/* Container *\/\r\n    .sc-anonymous-viewer .sc-page-header .sc-header {\r\n        max-width: 900px;\r\n        margin: 0 auto;\r\n    }\r\n\r\n    \/* ---------- H1 ---------- *\/\r\n\r\n    .sc-anonymous-viewer .sc-page-header h1 {\r\n        font-size: clamp(32px, 6vw, 50px);\r\n        font-weight: 800;\r\n        line-height: 1.15;\r\n        letter-spacing: -0.5px;\r\n        margin-bottom: 16px;\r\n        color: #ffffff;\r\n\r\n        \/* Clean depth, no glow mess *\/\r\n        text-shadow:\r\n            0 6px 18px rgba(0, 0, 0, 0.45);\r\n    }\r\n\r\n    \/* Accent word *\/\r\n    .sc-anonymous-viewer .sc-page-header h1 span {\r\n        color: #F2A14B;\r\n        position: relative;\r\n    }\r\n\r\n    \/* Subtle underline (no glow) *\/\r\n    .sc-anonymous-viewer .sc-page-header h1 span::after {\r\n        content: \"\";\r\n        position: absolute;\r\n        left: 0;\r\n        bottom: -6px;\r\n        width: 100%;\r\n        height: 3px;\r\n        border-radius: 6px;\r\n        background: #F2A14B;\r\n    }\r\n\r\n    \/* ---------- SUBTITLE ---------- *\/\r\n\r\n    .sc-anonymous-viewer .sc-page-header p {\r\n        font-size: clamp(15px, 2.3vw, 18px);\r\n        font-weight: 500;\r\n        line-height: 1.7;\r\n        max-width: 680px;\r\n        margin: 0 auto;\r\n        color: rgba(255, 255, 255, 0.85) !important;\r\n\r\n        \/* Very light depth *\/\r\n        text-shadow: 0 2px 8px rgba(0, 0, 0, 0.35);\r\n    }\r\n\r\n    \/* ---------- MOBILE TUNE ---------- *\/\r\n\r\n    @media (max-width: 480px) {\r\n        .sc-anonymous-viewer .sc-page-header {\r\n            padding: 40px 15px 24px;\r\n        }\r\n\r\n        .sc-anonymous-viewer .sc-page-header h1 {\r\n            letter-spacing: -0.3px;\r\n        }\r\n    }\r\n\r\n    .sc-anonymous-viewer .sc-header p {\r\n        font-size: 16px;\r\n        margin: 15px auto 25px;\r\n        line-height: 1.6;\r\n        font-weight: 500;\r\n        opacity: 0.8;\r\n        max-width: 700px;\r\n        color: #555;\r\n    }\r\n\r\n    \/* Input Area *\/\r\n    .sc-anonymous-viewer .sc-input-area {\r\n        display: flex;\r\n        align-items: center;\r\n        background: #fff;\r\n        padding: 25px 20px;\r\n        border-radius: 16px;\r\n        gap: 15px;\r\n        margin: 0 auto;\r\n        max-width: 100%;\r\n        flex-wrap: wrap;\r\n        box-shadow: 0 10px 30px rgba(0, 0, 0, 0.05);\r\n        \/* UPDATED: Border Color *\/\r\n        border: 1px solid rgba(242, 161, 75, 0.3);\r\n    }\r\n\r\n    .sc-anonymous-viewer .sc-input-area input {\r\n        flex-grow: 1;\r\n        padding: 14px 18px;\r\n        font-size: 16px;\r\n        border: 2px solid #e0e0e0;\r\n        outline: none;\r\n        min-width: 200px;\r\n        background: #fafafa;\r\n        border-radius: 12px;\r\n        transition: all 0.3s;\r\n        color: #333;\r\n        font-weight: 500;\r\n    }\r\n\r\n    .sc-anonymous-viewer .sc-input-area input:focus {\r\n        \/* UPDATED: Focus Color *\/\r\n        border-color: #F2A14B;\r\n        background: #fff;\r\n        box-shadow: 0 0 0 3px rgba(242, 161, 75, 0.2);\r\n    }\r\n\r\n    .sc-anonymous-viewer .view-btn {\r\n        border: none;\r\n        border-radius: 12px;\r\n\/*         margin-top: -30px; *\/\r\n        padding: 14px 30px;\r\n        cursor: pointer;\r\n        font-weight: 600;\r\n        transition: all 0.3s;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 8px;\r\n        font-size: 15px;\r\n        \/* UPDATED: Button Gradient *\/\r\n        background: linear-gradient(135deg, #F2A14B, #e08e35);\r\n        color: white;\r\n        box-shadow: 0 5px 15px rgba(242, 161, 75, 0.3);\r\n    }\r\n\r\n    .sc-anonymous-viewer .view-btn:hover {\r\n        transform: translateY(-2px);\r\n        box-shadow: 0 8px 20px rgba(242, 161, 75, 0.4);\r\n    }\r\n\r\n    .sc-anonymous-viewer #error-message {\r\n        color: #d32f2f;\r\n        margin-top: 15px;\r\n        display: none;\r\n        font-weight: 500;\r\n        background: rgba(211, 47, 47, 0.1);\r\n        padding: 10px;\r\n        border-radius: 8px;\r\n    }\r\n\r\n    \/* Result Section *\/\r\n    .sc-anonymous-viewer .tools-result {\r\n        width: 94%;\r\n        \/* UPDATED: Max Width 1200px *\/\r\n        max-width: 1200px;\r\n        margin: 0 auto 40px auto;\r\n        display: block;\r\n    }\r\n\r\n    .sc-anonymous-viewer .sc-result {\r\n        margin-top: 30px;\r\n        background: #fff;\r\n        border-radius: 20px;\r\n        padding: 30px;\r\n        color: #333;\r\n        box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);\r\n        animation: fadeIn 0.5s ease-out;\r\n        border: 1px solid rgba(0, 0, 0, 0.05);\r\n    }\r\n\r\n    @keyframes fadeIn {\r\n        from {\r\n            opacity: 0;\r\n            transform: translateY(20px);\r\n        }\r\n\r\n        to {\r\n            opacity: 1;\r\n            transform: translateY(0);\r\n        }\r\n    }\r\n\r\n    \/* Skeleton Loaders *\/\r\n    @keyframes shimmer {\r\n        0% {\r\n            background-position: -1000px 0;\r\n        }\r\n\r\n        100% {\r\n            background-position: 1000px 0;\r\n        }\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-profile-header {\r\n        display: flex;\r\n        gap: 30px;\r\n        padding: 30px;\r\n        background: #f5f5f5;\r\n        border-radius: 16px;\r\n        margin-bottom: 20px;\r\n        border: 1px solid #eee;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-avatar {\r\n        width: 150px;\r\n        height: 150px;\r\n        border-radius: 50%;\r\n        background: linear-gradient(90deg, #e0e0e0 25%, #f0f0f0 50%, #e0e0e0 75%);\r\n        background-size: 1000px 100%;\r\n        animation: shimmer 2s infinite linear;\r\n        flex-shrink: 0;\r\n        border: 4px solid #fff;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-profile-info {\r\n        flex: 1;\r\n        display: flex;\r\n        flex-direction: column;\r\n        gap: 15px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-username,\r\n    .sc-anonymous-viewer .skeleton-fullname,\r\n    .sc-anonymous-viewer .skeleton-stat,\r\n    .sc-anonymous-viewer .skeleton-bio,\r\n    .sc-anonymous-viewer .skeleton-tab,\r\n    .sc-anonymous-viewer .skeleton-content-img {\r\n        background: linear-gradient(90deg, #e0e0e0 25%, #f0f0f0 50%, #e0e0e0 75%);\r\n        background-size: 1000px 100%;\r\n        animation: shimmer 2s infinite linear;\r\n        border-radius: 6px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-username {\r\n        height: 28px;\r\n        width: 180px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-fullname {\r\n        height: 20px;\r\n        width: 140px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-stats {\r\n        display: flex;\r\n        gap: 25px;\r\n        margin-top: 10px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-stat {\r\n        height: 40px;\r\n        width: 60px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-bio {\r\n        height: 60px;\r\n        width: 100%;\r\n        margin-top: 15px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-tabs {\r\n        display: flex;\r\n        justify-content: center;\r\n        gap: 15px;\r\n        margin-bottom: 30px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-tab {\r\n        height: 40px;\r\n        width: 100px;\r\n        border-radius: 50px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-content-grid {\r\n        display: grid;\r\n        grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));\r\n        gap: 20px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-content-item {\r\n        border-radius: 16px;\r\n        overflow: hidden;\r\n        background: #f5f5f5;\r\n        aspect-ratio: 9 \/ 16;\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-content-img {\r\n        width: 100%;\r\n        height: 100%;\r\n    }\r\n\r\n    \/* Profile Header *\/\r\n    .sc-anonymous-viewer .sc-profile-header {\r\n        margin-bottom: 40px;\r\n        position: relative;\r\n        \/* UPDATED: Gradient tint *\/\r\n        background: linear-gradient(to bottom, rgba(242, 161, 75, 0.05), rgba(242, 161, 75, 0.05));\r\n        border-radius: 16px;\r\n        padding: 30px;\r\n        box-shadow: 0 5px 20px rgba(0, 0, 0, 0.05);\r\n        \/* UPDATED: Border Color *\/\r\n        border: 1px solid rgba(242, 161, 75, 0.1);\r\n    }\r\n\r\n    .sc-anonymous-viewer .profile-header-content {\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 30px;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .sc-anonymous-viewer .profile-image-container {\r\n        position: relative;\r\n        flex-shrink: 0;\r\n    }\r\n\r\n    .sc-anonymous-viewer .profile-image {\r\n        width: 150px;\r\n        height: 150px;\r\n        border-radius: 50%;\r\n        object-fit: cover;\r\n        border: 4px solid #fff;\r\n        box-shadow: 0 10px 25px rgba(242, 161, 75, 0.2);\r\n        \/* UPDATED: Gradient *\/\r\n        background: linear-gradient(to bottom right, #F2A14B, #e08e35);\r\n        padding: 3px;\r\n        min-height: 150px;\r\n        min-width: 150px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        color: #fff;\r\n        font-size: 60px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .view-profile-img {\r\n        position: absolute;\r\n        bottom: 5px;\r\n        right: 5px;\r\n        \/* UPDATED: Color *\/\r\n        background-color: #F2A14B;\r\n        color: white;\r\n        border: none;\r\n        border-radius: 50%;\r\n        width: 36px;\r\n        height: 36px;\r\n        display: flex;\r\n        justify-content: center;\r\n        align-items: center;\r\n        cursor: pointer;\r\n        transition: all 0.3s;\r\n        box-shadow: 0 5px 15px rgba(242, 161, 75, 0.4);\r\n        z-index: 5;\r\n    }\r\n\r\n    .sc-anonymous-viewer .profile-info {\r\n        flex: 1;\r\n        text-align: left;\r\n        min-width: 250px;\r\n    }\r\n\r\n    \/* UPDATED: Text Color *\/\r\n    .sc-anonymous-viewer .profile-info h3 {\r\n        font-size: 24px;\r\n        margin: 0 0 5px;\r\n        font-weight: 700;\r\n        color: #F2A14B;\r\n    }\r\n\r\n    .sc-anonymous-viewer .profile-info h4 {\r\n        font-size: 18px;\r\n        margin: 0 0 15px;\r\n        font-weight: 600;\r\n        color: #666;\r\n    }\r\n\r\n    .sc-anonymous-viewer .stats {\r\n        display: flex;\r\n        gap: 25px;\r\n        margin: 15px 0;\r\n    }\r\n\r\n    .sc-anonymous-viewer .stat-item {\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: center;\r\n    }\r\n\r\n    .sc-anonymous-viewer .stat-value {\r\n        font-size: 20px;\r\n        font-weight: 700;\r\n        color: #333;\r\n    }\r\n\r\n    .sc-anonymous-viewer .stat-label {\r\n        font-size: 14px;\r\n        color: #777;\r\n        margin-top: 3px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .profile-bio {\r\n        margin-top: 25px;\r\n        padding-top: 20px;\r\n        border-top: 1px solid #eee;\r\n        text-align: left;\r\n        color: #444;\r\n        line-height: 1.6;\r\n    }\r\n\r\n    \/* UPDATED: Link Color *\/\r\n    .sc-anonymous-viewer .profile-link {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 5px;\r\n        color: #F2A14B;\r\n        text-decoration: none;\r\n        font-weight: 500;\r\n        margin-top: 10px;\r\n    }\r\n\r\n    \/* Tabs *\/\r\n    .sc-anonymous-viewer .sc-tabs {\r\n        display: flex;\r\n        justify-content: center;\r\n        margin: 30px 0;\r\n        gap: 15px;\r\n        flex-wrap: wrap;\r\n    }\r\n\r\n    .sc-anonymous-viewer .sc-tabs button {\r\n        background: #f0f0f0;\r\n        color: #555;\r\n        border: none;\r\n        font-weight: 600;\r\n        font-size: 15px;\r\n        padding: 12px 24px;\r\n        cursor: pointer;\r\n        border-radius: 50px;\r\n        transition: all 0.3s;\r\n        display: flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\r\n        border: 1px solid transparent;\r\n    }\r\n\r\n    .sc-anonymous-viewer .sc-tabs button.active {\r\n        \/* UPDATED: Active Gradient *\/\r\n        background: linear-gradient(135deg, #F2A14B, #e08e35);\r\n        color: white;\r\n        box-shadow: 0 5px 15px rgba(242, 161, 75, 0.3);\r\n        transform: translateY(-2px);\r\n        border: none;\r\n    }\r\n\r\n    .sc-anonymous-viewer .tab-content {\r\n        padding: 20px;\r\n        text-align: center;\r\n        color: #555;\r\n        display: none;\r\n    }\r\n\r\n    .sc-anonymous-viewer .tab-content.active {\r\n        display: block;\r\n    }\r\n\r\n    .sc-anonymous-viewer .no-result {\r\n        border: 2px dashed #ccc;\r\n        padding: 30px 20px;\r\n        margin-top: 30px;\r\n        text-align: center;\r\n        font-size: 16px;\r\n        font-weight: 500;\r\n        border-radius: 12px;\r\n        color: #777;\r\n        background: #fafafa;\r\n    }\r\n\r\n    .sc-anonymous-viewer .no-result i {\r\n        font-size: 48px;\r\n        color: #ddd;\r\n        margin-bottom: 15px;\r\n        display: block;\r\n    }\r\n\r\n    \/* Stories Grid *\/\r\n    .sc-anonymous-viewer .stories-grid {\r\n        display: grid;\r\n        grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));\r\n        gap: 25px;\r\n        margin-top: 30px;\r\n        padding: 20px 0;\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-card {\r\n        border-radius: 16px;\r\n        overflow: hidden;\r\n        background: #fff;\r\n        box-shadow: 0 5px 20px rgba(0, 0, 0, 0.05);\r\n        transition: all 0.3s;\r\n        border: 1px solid #eee;\r\n        animation: slideUp 0.5s ease-out;\r\n        animation-fill-mode: both;\r\n    }\r\n\r\n    @keyframes slideUp {\r\n        from {\r\n            opacity: 0;\r\n            transform: translateY(20px);\r\n        }\r\n\r\n        to {\r\n            opacity: 1;\r\n            transform: translateY(0);\r\n        }\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-img-container {\r\n        position: relative;\r\n        overflow: hidden;\r\n        aspect-ratio: 9 \/ 16;\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-thumb {\r\n        width: 100%;\r\n        height: 100%;\r\n        object-fit: cover;\r\n        display: block;\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-overlay {\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(to bottom, rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, 0.5) 100%);\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        opacity: 0;\r\n        transition: opacity 0.3s ease;\r\n        pointer-events: none;\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-overlay button {\r\n        pointer-events: auto;\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-img-container:hover .story-overlay {\r\n        opacity: 1;\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-view-btn,\r\n    .sc-anonymous-viewer .story-download-btn,\r\n    .sc-anonymous-viewer .story-comment-btn {\r\n        \/* UPDATED: Icon Color *\/\r\n        background: rgba(255, 255, 255, 0.95);\r\n        color: #F2A14B;\r\n        width: 45px;\r\n        height: 45px;\r\n        border-radius: 50%;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        cursor: pointer;\r\n        transition: all 0.3s;\r\n        border: none;\r\n        font-size: 16px;\r\n        margin: 0 5px;\r\n        box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\r\n    }\r\n\r\n    \/* Comment Modal *\/\r\n    .sc-comment-modal {\r\n        position: fixed;\r\n        top: 0;\r\n        left: 0;\r\n        width: 100%;\r\n        height: 100%;\r\n        z-index: 10000;\r\n        display: none;\r\n        align-items: center;\r\n        justify-content: center;\r\n        background: rgba(0, 0, 0, 0.8);\r\n    }\r\n\r\n    .sc-comment-modal.active {\r\n        display: flex;\r\n    }\r\n\r\n    .sc-comment-modal-content {\r\n        background: white;\r\n        border-radius: 20px;\r\n        width: 90%;\r\n        max-width: 600px;\r\n        max-height: 80vh;\r\n        display: flex;\r\n        flex-direction: column;\r\n        box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);\r\n    }\r\n\r\n    .sc-comment-modal-header {\r\n        padding: 20px;\r\n        border-bottom: 2px solid #eee;\r\n        display: flex;\r\n        justify-content: space-between;\r\n        align-items: center;\r\n    }\r\n\r\n    .sc-comment-modal-header h3 {\r\n        margin: 0;\r\n        color: #333;\r\n        font-size: 20px;\r\n        font-weight: 700;\r\n    }\r\n\r\n    .sc-comment-modal-close {\r\n        background: none;\r\n        border: none;\r\n        font-size: 24px;\r\n        color: #666;\r\n        cursor: pointer;\r\n        padding: 5px 10px;\r\n    }\r\n\r\n    .sc-comment-modal-body {\r\n        padding: 20px;\r\n        overflow-y: auto;\r\n        flex: 1;\r\n    }\r\n\r\n    \/* UPDATED: Border Color *\/\r\n    .sc-comment-item {\r\n        padding: 15px;\r\n        margin-bottom: 15px;\r\n        background: #f9f9f9;\r\n        border-radius: 12px;\r\n        border-left: 4px solid #F2A14B;\r\n    }\r\n\r\n    .sc-comment-author {\r\n        font-weight: 700;\r\n        color: #333;\r\n        font-size: 14px;\r\n        margin-right: 10px;\r\n    }\r\n\r\n    .sc-comment-text {\r\n        color: #444;\r\n        font-size: 14px;\r\n        line-height: 1.5;\r\n        margin-bottom: 8px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-meta {\r\n        padding: 15px;\r\n        border-top: 1px solid #eee;\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-meta-row {\r\n        display: flex;\r\n        justify-content: space-between;\r\n        margin-bottom: 8px;\r\n        font-size: 13px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-meta-label {\r\n        color: #888;\r\n        font-weight: 500;\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-meta-value {\r\n        color: #333;\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-actions {\r\n        display: flex;\r\n        gap: 10px;\r\n        padding: 15px;\r\n        border-top: 1px solid #eee;\r\n    }\r\n\r\n    \/* UPDATED: Hover Colors *\/\r\n    .sc-anonymous-viewer .story-action-btn {\r\n        flex: 1;\r\n        padding: 10px;\r\n        border-radius: 8px;\r\n        border: none;\r\n        background: #f5f5f5;\r\n        color: #555;\r\n        cursor: pointer;\r\n        font-weight: 600;\r\n        font-size: 13px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 6px;\r\n        transition: all 0.3s;\r\n    }\r\n\r\n    .sc-anonymous-viewer .story-action-btn:hover {\r\n        background: rgba(242, 161, 75, 0.1);\r\n        color: #F2A14B;\r\n    }\r\n\r\n    .sc-anonymous-viewer .snap-list {\r\n        border-top: 1px solid #eee;\r\n        padding: 15px;\r\n        max-height: 400px;\r\n        overflow-y: auto;\r\n        display: block;\r\n    }\r\n\r\n    .sc-anonymous-viewer .snap-item {\r\n        display: flex;\r\n        gap: 12px;\r\n        margin-bottom: 12px;\r\n        padding-bottom: 12px;\r\n        border-bottom: 1px solid #eee;\r\n    }\r\n\r\n    .sc-anonymous-viewer .snap-thumb {\r\n        width: 60px;\r\n        height: 90px;\r\n        border-radius: 8px;\r\n        overflow: hidden;\r\n        flex-shrink: 0;\r\n        background: #eee;\r\n    }\r\n\r\n    .sc-anonymous-viewer .snap-thumb img {\r\n        width: 100%;\r\n        height: 100%;\r\n        object-fit: cover;\r\n    }\r\n\r\n    .sc-anonymous-viewer .snap-meta {\r\n        flex: 1;\r\n        font-size: 12px;\r\n    }\r\n\r\n    \/* UPDATED: Badge Color *\/\r\n    .sc-anonymous-viewer .snap-badge {\r\n        display: inline-block;\r\n        padding: 2px 8px;\r\n        border-radius: 999px;\r\n        background: rgba(242, 161, 75, 0.1);\r\n        color: #F2A14B;\r\n        font-size: 11px;\r\n        margin-bottom: 6px;\r\n        font-weight: 600;\r\n    }\r\n\r\n    \/* Modal Fixes *\/\r\n    .sc-modal-backdrop {\r\n        background: rgba(0, 0, 0, 0.9);\r\n        display: none;\r\n        position: fixed;\r\n        top: 0;\r\n        left: 0;\r\n        width: 100%;\r\n        height: 100%;\r\n        z-index: 9999;\r\n        justify-content: center;\r\n        align-items: center;\r\n    }\r\n\r\n    .sc-modal-content {\r\n        background: white;\r\n        border-radius: 20px;\r\n        padding: 30px;\r\n        max-width: 90vw;\r\n        max-height: 90vh;\r\n        position: relative;\r\n        text-align: center;\r\n    }\r\n\r\n    \/* UPDATED: Button Color *\/\r\n    .sc-close-modal {\r\n        position: absolute;\r\n        top: 15px;\r\n        right: 15px;\r\n        background: #F2A14B;\r\n        color: white;\r\n        border: none;\r\n        width: 40px;\r\n        height: 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    }\r\n\r\n    .sc-modal-download-btn {\r\n        margin-top: 20px;\r\n        padding: 12px 24px;\r\n        background: linear-gradient(135deg, #F2A14B, #e08e35);\r\n        color: white;\r\n        border: none;\r\n        border-radius: 10px;\r\n        cursor: pointer;\r\n        font-weight: 600;\r\n        display: inline-flex;\r\n        align-items: center;\r\n        gap: 8px;\r\n    }\r\n\r\n    \/* -------------------------------------- *\/\r\n    \/* NEW CONTENT SECTIONS CSS *\/\r\n    \/* -------------------------------------- *\/\r\n    .sc-content-section {\r\n        padding: 50px 0;\r\n        width: 100%;\r\n        box-sizing: border-box;\r\n    }\r\n\r\n    .sc-content-container {\r\n        \/* UPDATED: Max Width 1200px *\/\r\n        max-width: 1200px;\r\n        margin: 0 auto;\r\n        padding: 0 15px;\r\n    }\r\n\r\n    .sc-content-title {\r\n        text-align: center;\r\n        font-size: 32px;\r\n        font-weight: 800;\r\n        margin-bottom: 40px;\r\n        color: #222;\r\n        position: relative;\r\n    }\r\n\r\n    .sc-content-title::after {\r\n        content: '';\r\n        display: block;\r\n        width: 80px;\r\n        height: 4px;\r\n        \/* UPDATED: Gradient *\/\r\n        background: linear-gradient(90deg, #e08e35, #F2A14B);\r\n        margin: 12px auto 0;\r\n        border-radius: 4px;\r\n    }\r\n\r\n    \/* Special styling for dark section title *\/\r\n\r\n\r\n    \/* Grid Layouts - Big Screen 4 columns for 8 card section *\/\r\n    .sc-grid-6 {\r\n        display: grid;\r\n        grid-template-columns: repeat(3, 1fr);\r\n        gap: 25px;\r\n    }\r\n\r\n    .sc-grid-8 {\r\n        display: grid;\r\n        grid-template-columns: repeat(4, 1fr);\r\n        gap: 20px;\r\n    }\r\n\r\n    \/* Card Styling *\/\r\n    .sc-info-card {\r\n        background: #fff;\r\n        padding: 25px;\r\n        border-radius: 16px;\r\n        box-shadow: 0 5px 15px rgba(0, 0, 0, 0.03);\r\n        transition: all 0.3s ease;\r\n        border: 1px solid #eee;\r\n        position: relative;\r\n        overflow: hidden;\r\n        display: flex;\r\n        flex-direction: column;\r\n        align-items: flex-start;\r\n        height: 100%;\r\n    }\r\n\r\n    .sc-info-card:hover {\r\n        transform: translateY(-5px);\r\n        box-shadow: 0 12px 30px rgba(242, 161, 75, 0.15);\r\n        border-color: rgba(242, 161, 75, 0.4);\r\n    }\r\n\r\n    .sc-card-icon {\r\n        width: 54px;\r\n        height: 54px;\r\n        background: rgba(242, 161, 75, 0.1);\r\n        border-radius: 12px;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        margin-bottom: 20px;\r\n        \/* UPDATED: Icon Color *\/\r\n        color: #F2A14B;\r\n        font-size: 24px;\r\n    }\r\n\r\n    .sc-card-title {\r\n        font-size: 19px;\r\n        font-weight: 700;\r\n        margin-bottom: 12px;\r\n        color: #333;\r\n    }\r\n\r\n    .sc-card-text {\r\n        font-size: 15px;\r\n        color: #555;\r\n        line-height: 1.5;\r\n    }\r\n\r\n    \/* Tablet Responsive *\/\r\n    @media (max-width: 1024px) {\r\n        .sc-grid-8 {\r\n            grid-template-columns: repeat(2, 1fr);\r\n        }\r\n\r\n        .sc-grid-6 {\r\n            grid-template-columns: repeat(2, 1fr);\r\n        }\r\n    }\r\n\r\n    \/* \r\n       MOBILE RESPONSIVE & COMPACT ADJUSTMENTS \r\n       Targeting screens down to 480px\r\n    *\/\r\n    @media (max-width: 480px) {\r\n\r\n        \/* General Spacing *\/\r\n        .sc-anonymous-viewer .main-contain {\r\n            padding-top: 20px;\r\n        }\r\n\r\n        .sc-tool-wrapper {\r\n            padding: 25px 15px;\r\n            margin-bottom: 20px;\r\n            width: 96%;\r\n        }\r\n\r\n        \/* 1. Profile Header Layout Change *\/\r\n        .sc-profile-header {\r\n            padding: 15px;\r\n        }\r\n\r\n        \/* Use Block layout to enable Float + Clear behavior *\/\r\n        .sc-anonymous-viewer .sc-profile-header .profile-header-content {\r\n            display: block;\r\n            text-align: left;\r\n            padding-bottom: 10px;\r\n        }\r\n\r\n        \/* 2. Image: Floated Left, Responsive Size with Clamp *\/\r\n        .sc-anonymous-viewer .profile-image-container {\r\n            float: left;\r\n            margin-right: 20px;\r\n            \/* Resizes between 80px and 100px based on screen width *\/\r\n            width: clamp(80px, 20vw, 100px);\r\n            height: clamp(80px, 20vw, 100px);\r\n            margin-bottom: 5px;\r\n        }\r\n\r\n        .sc-anonymous-viewer .profile-image {\r\n            width: 100%;\r\n            height: 100%;\r\n            min-width: unset;\r\n            min-height: unset;\r\n            padding: 2px;\r\n            font-size: clamp(30px, 8vw, 40px);\r\n        }\r\n\r\n        .sc-anonymous-viewer .view-profile-img {\r\n            width: 28px;\r\n            height: 28px;\r\n            font-size: 12px;\r\n            bottom: 0;\r\n            right: -5px;\r\n        }\r\n\r\n        \/* 3. Info Text: Next to floated image *\/\r\n        .sc-anonymous-viewer .profile-info {\r\n            display: block;\r\n            width: auto;\r\n            min-width: 0;\r\n        }\r\n\r\n        .sc-anonymous-viewer .profile-info h3 {\r\n            font-size: clamp(18px, 6vw, 22px);\r\n            margin-bottom: 5px;\r\n            margin-top: 10px;\r\n            word-break: break-all;\r\n        }\r\n\r\n        .sc-anonymous-viewer .profile-info h4 {\r\n            font-size: clamp(13px, 4vw, 16px);\r\n            margin-bottom: 0;\r\n            color: #777;\r\n        }\r\n\r\n        \/* 4. Stats: Clear floats to move to NEW LINE below everything *\/\r\n        .sc-anonymous-viewer .stats {\r\n            clear: both;\r\n            \/* Forces this section below the floated image *\/\r\n            display: flex;\r\n            width: 100%;\r\n            justify-content: space-between;\r\n            \/* Evenly spaced *\/\r\n            gap: 10px;\r\n            margin: 0;\r\n            padding-top: 20px;\r\n            \/* Space between top section and stats *\/\r\n            border-top: 1px solid rgba(0, 0, 0, 0.03);\r\n            \/* Optional subtle divider *\/\r\n        }\r\n\r\n        .sc-anonymous-viewer .stat-item {\r\n            align-items: center;\r\n            flex: 1;\r\n            \/* Equal width *\/\r\n        }\r\n\r\n        .sc-anonymous-viewer .stat-value {\r\n            font-size: clamp(16px, 5vw, 19px);\r\n        }\r\n\r\n        .sc-anonymous-viewer .stat-label {\r\n            font-size: 11px;\r\n        }\r\n\r\n        \/* Compact Buttons *\/\r\n        .sc-anonymous-viewer .sc-tabs {\r\n            margin: 20px 0;\r\n            gap: 8px;\r\n            justify-content: center;\r\n        }\r\n\r\n        .sc-anonymous-viewer .sc-tabs button {\r\n            padding: 8px 12px;\r\n            font-size: 13px;\r\n            flex: 1 1 auto;\r\n            \/* Grow evenly *\/\r\n            white-space: nowrap;\r\n            border-radius: 8px;\r\n        }\r\n\r\n        \/* Content Sections - Compact 2 per row *\/\r\n        .sc-content-section {\r\n            padding: 30px 0;\r\n        }\r\n\r\n        .sc-content-title {\r\n            font-size: 24px;\r\n            margin-bottom: 25px;\r\n        }\r\n\r\n        .sc-grid-6,\r\n        .sc-grid-8 {\r\n            grid-template-columns: repeat(2, 1fr);\r\n            gap: 10px;\r\n        }\r\n\r\n        .sc-info-card {\r\n            padding: 15px 12px;\r\n            min-height: 160px;\r\n        }\r\n\r\n        .sc-card-icon {\r\n            width: 40px;\r\n            height: 40px;\r\n            font-size: 18px;\r\n            margin-bottom: 12px;\r\n        }\r\n\r\n        .sc-card-title {\r\n            font-size: 14px;\r\n            margin-bottom: 6px;\r\n            line-height: 1.3;\r\n        }\r\n\r\n        .sc-card-text {\r\n            font-size: 11px;\r\n            line-height: 1.4;\r\n        }\r\n    }\r\n<\/style>\r\n\r\n<div class=\"sc-anonymous-viewer\">\r\n    <div class=\"main-contain\">\r\n        <div class=\"sc-page-header\"> <!-- UPDATED: Added Header with requested Title and H1 -->\r\n            <div class=\"sc-header\">\r\n                <h1><span>Snapchat Viewer - Profile Tool<\/h1>\r\n                <p>View and download Snapchat stories, highlights, and spotlights anonymously.<\/p>\r\n            <\/div>\r\n        <\/div>\r\n        <div class=\"sc-tool-wrapper\">\r\n\r\n            <div class=\"sc-input-area\">\r\n                <div style=\"width: 100%; text-align: left; margin-bottom: 10px;\">\r\n                    <!-- UPDATED: Icon Color -->\r\n                    <i class=\"fa-brands fa-snapchat\" style=\"color: #F2A14B; font-size: 18px; margin-right: 8px;\"><\/i>\r\n                    <span style=\"font-weight: 600; color: #444;\">Enter Snapchat Username<\/span>\r\n                <\/div>\r\n                <input type=\"text\" id=\"input-username\" placeholder=\"e.g., rakibhossain02\" \/>\r\n                <button class=\"view-btn\" id=\"view-btn\">\r\n                    <i class=\"fa-solid fa-search\"><\/i> View Profile\r\n                <\/button>\r\n            <\/div>\r\n\r\n            <div id=\"error-message\"><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"tools-result\">\r\n            <div class=\"sc-result\" id=\"sc-result\">\r\n                <!-- Skeleton Loading (shown during fetch) -->\r\n                <div id=\"skeleton-loading\" style=\"display: none;\">\r\n                    <div class=\"skeleton-profile\">\r\n                        <div class=\"skeleton-profile-header\">\r\n                            <div class=\"skeleton-avatar\"><\/div>\r\n                            <div class=\"skeleton-profile-info\">\r\n                                <div class=\"skeleton-username\"><\/div>\r\n                                <div class=\"skeleton-fullname\"><\/div>\r\n                                <div class=\"skeleton-stats\">\r\n                                    <div class=\"skeleton-stat\"><\/div>\r\n                                    <div class=\"skeleton-stat\"><\/div>\r\n                                    <div class=\"skeleton-stat\"><\/div>\r\n                                    <div class=\"skeleton-stat\"><\/div>\r\n                                <\/div>\r\n                                <div class=\"skeleton-bio\"><\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                        <div class=\"skeleton-tabs\">\r\n                            <div class=\"skeleton-tab\"><\/div>\r\n                            <div class=\"skeleton-tab\"><\/div>\r\n                            <div class=\"skeleton-tab\"><\/div>\r\n                            <div class=\"skeleton-tab\"><\/div>\r\n                        <\/div>\r\n                        <div class=\"skeleton-content-grid\">\r\n                            <div class=\"skeleton-content-item\">\r\n                                <div class=\"skeleton-content-img\"><\/div>\r\n                            <\/div>\r\n                            <div class=\"skeleton-content-item\">\r\n                                <div class=\"skeleton-content-img\"><\/div>\r\n                            <\/div>\r\n                            <div class=\"skeleton-content-item\">\r\n                                <div class=\"skeleton-content-img\"><\/div>\r\n                            <\/div>\r\n                            <div class=\"skeleton-content-item\">\r\n                                <div class=\"skeleton-content-img\"><\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <!-- Actual Content (shown by default as placeholder, then with real data) -->\r\n                <div id=\"actual-content\">\r\n                    <!-- Profile Header -->\r\n                    <div class=\"sc-profile-header\">\r\n                        <div class=\"profile-header-content\">\r\n                            <div class=\"profile-image-container\">\r\n                                <div class=\"profile-image\"\r\n                                    style=\"display: flex; align-items: center; justify-content: center; color: #fff;\">\r\n                                    <i class=\"fa-brands fa-snapchat\"><\/i>\r\n                                <\/div>\r\n                                <button class=\"view-profile-img\"><i class=\"fa-solid fa-expand\"><\/i><\/button>\r\n                            <\/div>\r\n                            <div class=\"profile-info\">\r\n                                <h3 id=\"profile-username\">@username<\/h3>\r\n                                <h4 id=\"profile-fullname\">Full Name<\/h4>\r\n                                <div class=\"stats\">\r\n                                    <div class=\"stat-item\">\r\n                                        <div class=\"stat-value\" id=\"subscribers-count\">0<\/div>\r\n                                        <div class=\"stat-label\">subscribers<\/div>\r\n                                    <\/div>\r\n                                    <div class=\"stat-item\">\r\n                                        <div class=\"stat-value\" id=\"stories-count\">0<\/div>\r\n                                        <div class=\"stat-label\">stories<\/div>\r\n                                    <\/div>\r\n                                    <div class=\"stat-item\">\r\n                                        <div class=\"stat-value\" id=\"highlights-count\">0<\/div>\r\n                                        <div class=\"stat-label\">highlights<\/div>\r\n                                    <\/div>\r\n                                    <div class=\"stat-item\">\r\n                                        <div class=\"stat-value\" id=\"spotlights-count\">0<\/div>\r\n                                        <div class=\"stat-label\">spotlights<\/div>\r\n                                    <\/div>\r\n                                <\/div>\r\n                                <div id=\"profile-bio-section\" class=\"profile-bio\" style=\"display: none;\"><\/div>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <!-- Tabs -->\r\n                    <div class=\"sc-tabs\">\r\n                        <button class=\"active\" onclick=\"switchTab('highlights', this)\">\r\n                            <i class=\"fa-solid fa-bookmark\"><\/i> Highlights\r\n                        <\/button>\r\n                        <button onclick=\"switchTab('spotlights', this)\">\r\n                            <i class=\"fa-solid fa-fire\"><\/i> Spotlights\r\n                        <\/button>\r\n                        <button onclick=\"switchTab('story', this)\">\r\n                            <i class=\"fa-solid fa-circle-play\"><\/i> Story\r\n                        <\/button>\r\n                        <button onclick=\"switchTab('related', this)\">\r\n                            <i class=\"fa-solid fa-users\"><\/i> Related\r\n                        <\/button>\r\n                        <button onclick=\"switchTab('other', this)\">\r\n                            <i class=\"fa-solid fa-info-circle\"><\/i> Other\r\n                        <\/button>\r\n                    <\/div>\r\n\r\n                    <!-- Tab Content -->\r\n                    <div id=\"tab-content\">\r\n                        <!-- Highlights Tab -->\r\n                        <div id=\"highlights-content\" class=\"tab-content active\">\r\n                            <div class=\"no-result\">\r\n                                <i class=\"fa-solid fa-bookmark\" style=\"font-size: 48px; margin-bottom: 15px;\"><\/i>\r\n                                <p>Enter a Snapchat username above to view highlights anonymously.<\/p>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <!-- Spotlights Tab -->\r\n                        <div id=\"spotlights-content\" class=\"tab-content\" style=\"display: none;\">\r\n                            <div class=\"no-result\">\r\n                                <i class=\"fa-solid fa-fire\" style=\"font-size: 48px; margin-bottom: 15px;\"><\/i>\r\n                                <p>Watch Snapchat spotlights anonymously. Browse and download short videos without\r\n                                    detection.<\/p>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <!-- Story Tab -->\r\n                        <div id=\"story-content\" class=\"tab-content\" style=\"display: none;\">\r\n                            <div class=\"no-result\">\r\n                                <i class=\"fa-solid fa-circle-play\" style=\"font-size: 48px; margin-bottom: 15px;\"><\/i>\r\n                                <p>Click here to load stories. Enter a Snapchat username above and click Story to view\r\n                                    stories anonymously.<\/p>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <!-- Related Tab -->\r\n                        <div id=\"related-content\" class=\"tab-content\" style=\"display: none;\">\r\n                            <div class=\"no-result\">\r\n                                <i class=\"fa-solid fa-users\" style=\"font-size: 48px; margin-bottom: 15px;\"><\/i>\r\n                                <p>Enter a Snapchat username above to view related accounts.<\/p>\r\n                            <\/div>\r\n                        <\/div>\r\n\r\n                        <!-- Other Tab -->\r\n                        <div id=\"other-content\" class=\"tab-content\" style=\"display: none;\">\r\n                            <div class=\"no-result\">\r\n                                <i class=\"fa-solid fa-info-circle\" style=\"font-size: 48px; margin-bottom: 15px;\"><\/i>\r\n                                <p>Enter a Snapchat username above to view additional information.<\/p>\r\n                            <\/div>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n\r\n\r\n\r\n<\/div>\r\n\r\n\r\n\r\n\r\n\r\n\r\n<script>\r\n\r\n    \/\/ Load scripts with error handling to prevent blocking page load\r\n    function loadScript(src, onError) {\r\n        const script = document.createElement('script');\r\n        script.src = src;\r\n        script.onerror = function () {\r\n            if (onError) onError();\r\n        };\r\n        document.head.appendChild(script);\r\n    }\r\n\r\n    \/\/ API base URL\r\n    var apiBaseUrl = \"https:\/\/tools.xrespond.com\";\r\n\r\n    \/\/ Load scripts with fallback\r\n    loadScript(apiBaseUrl + \"\/api\/rate-limit-handler.js\");\r\n    loadScript(apiBaseUrl + \"\/api\/js\/client-ip-detector.js\");\r\n\r\n    (function ($) {\r\n        let currentMediaUrl = '';\r\n        let currentFilename = '';\r\n        \/\/ Store comments data globally for modal access\r\n        window.spotlightCommentsData = {};\r\n        window.highlightCommentsData = {};\r\n\r\n        \/\/ Suppress non-critical console messages from external scripts on page load\r\n        \/\/ These scripts auto-initialize and log messages - we'll keep only important ones\r\n        const originalConsoleLog = console.log;\r\n        const originalConsoleError = console.error;\r\n        const originalConsoleWarn = console.warn;\r\n\r\n        \/\/ Only suppress messages during initial page load (first 3 seconds)\r\n        const pageLoadTime = Date.now();\r\n        const suppressDuration = 3000; \/\/ 3 seconds\r\n\r\n        console.log = function (...args) {\r\n            const message = args.join(' ');\r\n            const elapsed = Date.now() - pageLoadTime;\r\n\r\n            \/\/ Allow important messages through\r\n            if (message.includes('Error') || message.includes('Failed') || message.includes('Uncaught')) {\r\n                originalConsoleLog.apply(console, args);\r\n            }\r\n            \/\/ Suppress verbose initialization messages during page load\r\n            else if (elapsed < suppressDuration && (\r\n                message.includes('Global Rate Limit Handler loaded') ||\r\n                message.includes('IP Detection System initialized') ||\r\n                message.includes('Client IP Detector loaded') ||\r\n                message.includes('All API requests will automatically include') ||\r\n                message.includes('Detecting IPv4 from free APIs') ||\r\n                message.includes('Checking 24 free IP APIs') ||\r\n                message.includes('Trying ipify-json') ||\r\n                message.includes('IP found from') ||\r\n                message.includes('IPv4 detected from free APIs') ||\r\n                message.includes('Sending IP to service') ||\r\n                message.includes('IP detected and ready') ||\r\n                message.includes('IP Detection in progress')\r\n            )) {\r\n                \/\/ Suppress these messages\r\n                return;\r\n            }\r\n            \/\/ Allow all other messages\r\n            else {\r\n                originalConsoleLog.apply(console, args);\r\n            }\r\n        };\r\n\r\n        console.error = function (...args) {\r\n            const message = args.join(' ');\r\n            \/\/ Suppress 405\/404 errors and JSON parse errors from IP detection scripts trying to reach non-existent endpoints\r\n            \/\/ These errors occur when running on Live Server (port 5501) instead of Laravel server (port 8002)\r\n            if (message.includes('405') || message.includes('404') ||\r\n                message.includes('Failed to send IP to service') ||\r\n                message.includes('Failed to load API list from backend') ||\r\n                message.includes('JSON.parse: unexpected character') ||\r\n                (message.includes('SyntaxError') && (message.includes('rate-limit-handler') || message.includes('api\/client-ip') || message.includes('api\/ip-finder'))) ||\r\n                (message.includes('api\/client-ip') || message.includes('api\/ip-finder'))) {\r\n                \/\/ These are expected when running on Live Server - IP detection still works via free APIs (ipify, etc.)\r\n                \/\/ The backend endpoints only exist on the Laravel server (port 8002)\r\n                return;\r\n            }\r\n            originalConsoleError.apply(console, args);\r\n        };\r\n\r\n        console.warn = function (...args) {\r\n            const message = args.join(' ');\r\n            \/\/ Suppress warnings from IP detection during page load\r\n            const elapsed = Date.now() - pageLoadTime;\r\n            if ((elapsed < suppressDuration && message.includes('IP Detection')) ||\r\n                message.includes('api\/client-ip') ||\r\n                message.includes('api\/ip-finder') ||\r\n                message.includes('405') ||\r\n                message.includes('404')) {\r\n                return;\r\n            }\r\n            originalConsoleWarn.apply(console, args);\r\n        };\r\n\r\n        \/\/ Restore original console after suppression period\r\n        setTimeout(() => {\r\n            console.log = originalConsoleLog;\r\n            console.error = originalConsoleError;\r\n            console.warn = originalConsoleWarn;\r\n        }, suppressDuration);\r\n\r\n        \/\/ View button click handler\r\n        $(\".view-btn\").on(\"click\", async function (e) {\r\n            e.preventDefault();\r\n\r\n            const username = $(\"#input-username\").val().trim();\r\n\r\n            if (username === \"\") {\r\n                $(\"#error-message\").text(\"Please enter a Snapchat username\").show();\r\n                return;\r\n            }\r\n\r\n            \/\/ Reset\r\n            $(\"#error-message\").hide();\r\n            $(\".view-btn\").prop(\"disabled\", true).html(\"<span style='font-weight: 600;'>Loading...<\/span>\");\r\n\r\n            \/\/ Show skeleton loading (hide placeholder, show skeleton)\r\n            $(\"#skeleton-loading\").show();\r\n            $(\"#actual-content\").hide();\r\n\r\n            \/\/ Use the global apiBaseUrl defined at the top\r\n            const apiUrl = apiBaseUrl + \"\/api\/snapchat\/user-details\";\r\n\r\n            \/\/ Get client IP from client-ip-detector.js (if available)\r\n            const clientIp = window.clientIpDetector?.getIp() || window.clientDetectedIpv4 || window.detectedClientIpv4 || null;\r\n\r\n            \/\/ Make request (use fetch to avoid XHR interception causing status:0)\r\n            try {\r\n                const headers = {\r\n                    \"Content-Type\": \"application\/json\",\r\n                };\r\n                if (clientIp) {\r\n                    headers[\"X-Client-IPv4\"] = clientIp;\r\n                }\r\n\r\n                const resp = await fetch(apiUrl, {\r\n                    method: \"POST\",\r\n                    headers,\r\n                    body: JSON.stringify({ username: username }),\r\n                });\r\n\r\n                let res = null;\r\n                try {\r\n                    res = await resp.json();\r\n                } catch (_) {\r\n                    res = null;\r\n                }\r\n\r\n                $(\".view-btn\").prop(\"disabled\", false).html(\"<i class='fa-solid fa-search'><\/i> View Profile\");\r\n\r\n                \/\/ Keep skeleton visible until DOM is fully built (hide\/show done at end of success path)\r\n\r\n                \/\/ Handle non-2xx\r\n                if (!resp.ok) {\r\n                    $(\"#skeleton-loading\").hide();\r\n                    $(\"#actual-content\").show();\r\n                    const msg =\r\n                        (res && (res.message || res.error)) ||\r\n                        (resp.status === 429 ? \"Rate limit exceeded. Please try again later.\" : \"Request failed. Please try again.\");\r\n                    $(\"#error-message\").text(msg).show();\r\n                    return;\r\n                }\r\n\r\n                if (res && res.status === \"error\") {\r\n                    $(\"#skeleton-loading\").hide();\r\n                    $(\"#actual-content\").show();\r\n                    $(\"#error-message\").text(res.message || \"An error occurred\").show();\r\n                    return;\r\n                }\r\n\r\n                \/\/ New simplified response structure from backend service\r\n                const data = (res && res.data) || {};\r\n\r\n                \/\/ Extract all data from flat structure\r\n                const userProfile = data.profile || {};\r\n                const pageMetadata = data.pageMetadata || {};\r\n                const pageLinks = data.pageLinks || {};\r\n                const linkPreview = data.linkPreview || {};\r\n                const relatedAccounts = data.relatedAccounts || [];\r\n                const spotlightMetadata = data.spotlightMetadata || [];\r\n                const story = data.story;\r\n                const storyMetadata = data.storyMetadata;\r\n                const curatedHighlights = data.curatedHighlights || [];\r\n                const spotlightHighlights = data.spotlightHighlights || [];\r\n                const spotlightComments = data.spotlightComments || [];\r\n                const lenses = data.lenses || [];\r\n\r\n                \/\/ Parse spotlight comments - already parsed by backend, but ensure it's an array\r\n                let spotlightCommentsByIndex = Array.isArray(spotlightComments) ? spotlightComments : [];\r\n\r\n                \/\/ Helper function to format timestamp\r\n                function formatTimestamp(timestampMs) {\r\n                    if (!timestampMs) return '';\r\n                    \/\/ Backend service already extracts value, so timestampMs is now a direct string\/number\r\n                    const timestamp = timestampMs;\r\n                    if (!timestamp) return '';\r\n                    const date = new Date(parseInt(timestamp));\r\n                    return date.toLocaleDateString('en-US', { year: 'numeric', month: 'short', day: 'numeric' });\r\n                }\r\n\r\n                \/\/ Helper function to get social icon\r\n                function getSocialIcon(url) {\r\n                    if (!url) return 'fa-link';\r\n                    const lowerUrl = url.toLowerCase();\r\n                    if (lowerUrl.includes('facebook')) return 'fa-brands fa-facebook';\r\n                    if (lowerUrl.includes('twitter') || lowerUrl.includes('x.com')) return 'fa-brands fa-twitter';\r\n                    if (lowerUrl.includes('instagram')) return 'fa-brands fa-instagram';\r\n                    if (lowerUrl.includes('youtube')) return 'fa-brands fa-youtube';\r\n                    if (lowerUrl.includes('tiktok')) return 'fa-brands fa-tiktok';\r\n                    if (lowerUrl.includes('linkedin')) return 'fa-brands fa-linkedin';\r\n                    return 'fa-link';\r\n                }\r\n\r\n                \/\/ Ensure result container is visible (already shown during loading)\r\n                $(\".tools-result\").show();\r\n                $(\".sc-result\").show();\r\n\r\n                \/\/ Update ProfileInfo section\r\n                const profilePicUrl = userProfile.profilePictureUrl || '';\r\n                const profileImageContainer = $('.profile-image-container .profile-image');\r\n\r\n                if (profileImageContainer.length > 0) {\r\n                    if (profilePicUrl) {\r\n                        const profilePic = '<img decoding=\"async\" src=\"' + profilePicUrl + '\" alt=\"Profile Picture\" style=\"width: 100%; height: 100%; object-fit: cover; border-radius: 50%;\" \/>';\r\n                        profileImageContainer.html(profilePic);\r\n                        profileImageContainer.css({\r\n                            'background': 'transparent',\r\n                            'padding': '0'\r\n                        }).attr('onclick', 'showMediaModal(\\'' + profilePicUrl + '\\', \\'image\\', \\'profile_picture.jpg\\')').css('cursor', 'pointer');\r\n                    } else {\r\n                        profileImageContainer.html('<i class=\"fa-brands fa-snapchat\" style=\"font-size: 60px;\"><\/i>');\r\n                    }\r\n                }\r\n\r\n                \/\/ Update username\r\n                if ($('#profile-username').length > 0) {\r\n                    let usernameText = '@' + (userProfile.username || username);\r\n                    if (userProfile.badge && userProfile.badge > 0) {\r\n                        usernameText += ' <i class=\"fa-solid fa-badge-check\" style=\"color: #FF9800;\"><\/i>';\r\n                    }\r\n                    $('#profile-username').html(usernameText);\r\n                }\r\n\r\n                \/\/ Update full name\r\n                if ($('#profile-fullname').length > 0) {\r\n                    const fullName = userProfile.title || (pageMetadata.pageTitle ? pageMetadata.pageTitle.split('(')[0].trim() : '');\r\n                    $('#profile-fullname').text(fullName);\r\n                }\r\n\r\n                \/\/ Update stats\r\n                if ($('#subscribers-count').length > 0) {\r\n                    $('#subscribers-count').text(formatNumber(userProfile.subscriberCount || 0));\r\n                }\r\n                if ($('#stories-count').length > 0) {\r\n                    $('#stories-count').text((story || storyMetadata) ? '1' : '0');\r\n                }\r\n                if ($('#highlights-count').length > 0) {\r\n                    $('#highlights-count').text(curatedHighlights.length);\r\n                }\r\n                if ($('#spotlights-count').length > 0) {\r\n                    $('#spotlights-count').text(spotlightHighlights.length);\r\n                }\r\n\r\n                \/\/ Update bio section in ProfileInfo\r\n                const bio = userProfile.bio || pageMetadata.pageDescription || '';\r\n                if (bio && $('#profile-bio-section').length > 0) {\r\n                    $('#profile-bio-section').html('<p>' + bio.replace(\/\\n\/g, '<br>') + '<\/p>').show();\r\n                }\r\n\r\n                \/\/ Build Related tab content (Related Accounts)\r\n                let relatedTabHTML = '';\r\n\r\n                \/\/ Build Other tab content (all other additional info)\r\n                let otherTabHTML = '';\r\n\r\n                \/\/ Category and Subcategory badges (Other tab)\r\n                if (userProfile.categoryStringId || userProfile.subcategoryStringId) {\r\n                    otherTabHTML += '<div style=\"margin: 20px 0; padding: 15px; background: rgba(255, 255, 255, 0.05); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                        '<div style=\"font-weight: 600; margin-bottom: 12px; color: #e0e0e0; font-size: 14px;\">Category:<\/div>' +\r\n                        '<div style=\"display: flex; flex-wrap: wrap; gap: 8px;\">';\r\n                    if (userProfile.categoryStringId) {\r\n                        const category = userProfile.categoryStringId.replace(\/public-profile-category-v3-\/g, '').replace(\/-\/g, ' ');\r\n                        otherTabHTML += '<span style=\"background: rgba(0, 188, 212, 0.2); color: #00BCD4; padding: 6px 14px; border-radius: 20px; font-size: 12px; font-weight: 600;\">' + category.charAt(0).toUpperCase() + category.slice(1) + '<\/span>';\r\n                    }\r\n                    if (userProfile.subcategoryStringId) {\r\n                        const subcategory = userProfile.subcategoryStringId.replace(\/public-profile-subcategory-v3-\/g, '').replace(\/-\/g, ' ');\r\n                        otherTabHTML += '<span style=\"background: rgba(255, 152, 0, 0.2); color: #FF9800; padding: 6px 14px; border-radius: 20px; font-size: 12px; font-weight: 600;\">' + subcategory.charAt(0).toUpperCase() + subcategory.slice(1) + '<\/span>';\r\n                    }\r\n                    otherTabHTML += '<\/div><\/div>';\r\n                }\r\n\r\n                \/\/ Address (Other tab)\r\n                if (userProfile.address) {\r\n                    otherTabHTML += '<div style=\"margin: 20px 0; padding: 15px; background: rgba(255, 255, 255, 0.05); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                        '<div style=\"font-weight: 600; margin-bottom: 8px; color: #e0e0e0; font-size: 14px;\">Location:<\/div>' +\r\n                        '<div style=\"font-size: 14px; color: #d0d0d0; display: flex; align-items: center; gap: 8px;\">' +\r\n                        '<i class=\"fa-solid fa-location-dot\" style=\"color: #00BCD4;\"><\/i>' +\r\n                        '<span>' + userProfile.address + '<\/span>' +\r\n                        '<\/div><\/div>';\r\n                }\r\n\r\n                \/\/ Website URL (Other tab)\r\n                if (userProfile.websiteUrl) {\r\n                    otherTabHTML += '<div style=\"margin: 20px 0; padding: 15px; background: rgba(255, 255, 255, 0.05); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                        '<div style=\"font-weight: 600; margin-bottom: 8px; color: #e0e0e0; font-size: 14px;\">Website:<\/div>' +\r\n                        '<a href=\"' + userProfile.websiteUrl + '\" target=\"_blank\" style=\"color: #00BCD4; text-decoration: none; font-size: 14px; display: flex; align-items: center; gap: 8px;\">' +\r\n                        '<i class=\"fa-solid fa-globe\"><\/i>' +\r\n                        '<span>' + userProfile.websiteUrl + '<\/span>' +\r\n                        '<\/a><\/div>';\r\n                }\r\n\r\n                \/\/ Social Links (sameAsLinks) - Other tab\r\n                if (userProfile.sameAsLinks && userProfile.sameAsLinks.length > 0) {\r\n                    otherTabHTML += '<div style=\"margin: 20px 0; padding: 15px; background: rgba(255, 255, 255, 0.05); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                        '<div style=\"font-weight: 600; margin-bottom: 12px; color: #e0e0e0; font-size: 14px;\">Social Links:<\/div>' +\r\n                        '<div style=\"display: flex; flex-wrap: wrap; gap: 10px;\">';\r\n                    userProfile.sameAsLinks.forEach(link => {\r\n                        if (link && link.url) {\r\n                            otherTabHTML += '<a href=\"' + link.url + '\" target=\"_blank\" style=\"display: inline-flex; align-items: center; padding: 8px 15px; background: rgba(255, 255, 255, 0.1); border-radius: 20px; text-decoration: none; color: #e0e0e0; font-size: 13px; transition: all 0.3s; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                                '<i class=\"' + getSocialIcon(link.url) + '\" style=\"margin-right: 8px; color: #00BCD4;\"><\/i>' +\r\n                                '<span>' + (link.name || 'Link') + '<\/span>' +\r\n                                '<\/a>';\r\n                        }\r\n                    });\r\n                    otherTabHTML += '<\/div><\/div>';\r\n                }\r\n\r\n                \/\/ Link Preview Section (Facebook\/Twitter Images, Canonical URL, etc.) - Other tab\r\n                if (linkPreview.title || linkPreview.description || linkPreview.facebookImage || linkPreview.twitterImage || linkPreview.canonicalUrl || linkPreview.snapchatTitle) {\r\n                    otherTabHTML += '<div style=\"margin: 20px 0; padding: 15px; background: rgba(255, 255, 255, 0.05); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1);\">';\r\n\r\n                    if (linkPreview.title) {\r\n                        otherTabHTML += '<div style=\"font-weight: 700; margin-bottom: 8px; color: #e0e0e0; font-size: 16px;\">' + linkPreview.title + '<\/div>';\r\n                    }\r\n\r\n                    if (linkPreview.snapchatTitle) {\r\n                        otherTabHTML += '<div style=\"font-weight: 600; margin-bottom: 8px; color: #FF9800; font-size: 14px;\"><i class=\"fa-brands fa-snapchat\" style=\"margin-right: 6px;\"><\/i>' + linkPreview.snapchatTitle + '<\/div>';\r\n                    }\r\n\r\n                    if (linkPreview.description) {\r\n                        otherTabHTML += '<div style=\"font-size: 14px; color: #a0a0a0; margin-bottom: 15px; line-height: 1.5;\">' + linkPreview.description + '<\/div>';\r\n                    }\r\n\r\n                    if (linkPreview.canonicalUrl) {\r\n                        otherTabHTML += '<div style=\"margin-bottom: 15px;\">' +\r\n                            '<a href=\"' + linkPreview.canonicalUrl + '\" target=\"_blank\" style=\"color: #00BCD4; text-decoration: none; font-size: 13px; display: flex; align-items: center; gap: 8px; word-break: break-all;\">' +\r\n                            '<i class=\"fa-solid fa-link\"><\/i>' +\r\n                            '<span>' + linkPreview.canonicalUrl + '<\/span>' +\r\n                            '<\/a>' +\r\n                            '<\/div>';\r\n                    }\r\n\r\n                    if (linkPreview.facebookImage || linkPreview.twitterImage) {\r\n                        otherTabHTML += '<div style=\"font-weight: 600; margin-bottom: 10px; color: #e0e0e0; font-size: 14px;\">Preview Images:<\/div>' +\r\n                            '<div style=\"display: flex; gap: 15px; flex-wrap: wrap;\">';\r\n                        if (linkPreview.facebookImage && linkPreview.facebookImage.url) {\r\n                            otherTabHTML += '<div style=\"cursor: pointer; text-align: center;\" onclick=\"showMediaModal(\\'' + linkPreview.facebookImage.url + '\\', \\'image\\', \\'facebook_preview.jpg\\')\">' +\r\n                                '<img decoding=\"async\" src=\"' + linkPreview.facebookImage.url + '\" alt=\"Facebook Preview\" style=\"width: 120px; height: 120px; object-fit: cover; border-radius: 10px; border: 2px solid #1877F2; box-shadow: 0 4px 10px rgba(0,0,0,0.2); transition: transform 0.2s;\" onmouseover=\"this.style.transform=\\'scale(1.05)\\'\" onmouseout=\"this.style.transform=\\'scale(1)\\'\" \/>' +\r\n                                '<div style=\"text-align: center; font-size: 11px; color: #a0a0a0; margin-top: 8px; font-weight: 600;\">Facebook<\/div>' +\r\n                                '<\/div>';\r\n                        }\r\n                        if (linkPreview.twitterImage && linkPreview.twitterImage.url) {\r\n                            otherTabHTML += '<div style=\"cursor: pointer; text-align: center;\" onclick=\"showMediaModal(\\'' + linkPreview.twitterImage.url + '\\', \\'image\\', \\'twitter_preview.jpg\\')\">' +\r\n                                '<img decoding=\"async\" src=\"' + linkPreview.twitterImage.url + '\" alt=\"Twitter Preview\" style=\"width: 120px; height: 120px; object-fit: cover; border-radius: 10px; border: 2px solid #1DA1F2; box-shadow: 0 4px 10px rgba(0,0,0,0.2); transition: transform 0.2s;\" onmouseover=\"this.style.transform=\\'scale(1.05)\\'\" onmouseout=\"this.style.transform=\\'scale(1)\\'\" \/>' +\r\n                                '<div style=\"text-align: center; font-size: 11px; color: #a0a0a0; margin-top: 8px; font-weight: 600;\">Twitter<\/div>' +\r\n                                '<\/div>';\r\n                        }\r\n                        otherTabHTML += '<\/div>';\r\n                    }\r\n\r\n                    otherTabHTML += '<\/div>';\r\n                }\r\n\r\n                \/\/ Square Hero Image (Cover Image) - Other tab\r\n                if (userProfile.squareHeroImageUrl) {\r\n                    otherTabHTML += '<div style=\"margin: 20px 0; padding: 15px; background: rgba(255, 255, 255, 0.05); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                        '<div style=\"font-weight: 600; margin-bottom: 10px; color: #e0e0e0; font-size: 14px;\">Cover Image:<\/div>' +\r\n                        '<div style=\"cursor: pointer; border-radius: 12px; overflow: hidden; box-shadow: 0 4px 15px rgba(0,0,0,0.3);\" onclick=\"showMediaModal(\\'' + userProfile.squareHeroImageUrl + '\\', \\'image\\', \\'cover_image.jpg\\')\">' +\r\n                        '<img decoding=\"async\" src=\"' + userProfile.squareHeroImageUrl + '\" alt=\"Cover Image\" style=\"width: 100%; max-width: 600px; height: auto; display: block;\" \/>' +\r\n                        '<\/div><\/div>';\r\n                }\r\n\r\n                \/\/ Snapcode Image - Other tab\r\n                if (userProfile.snapcodeImageUrl || pageLinks.snapcodeImageUrl) {\r\n                    const snapcodeUrl = userProfile.snapcodeImageUrl || pageLinks.snapcodeImageUrl;\r\n                    otherTabHTML += '<div style=\"margin: 20px 0; padding: 15px; background: rgba(255, 255, 255, 0.05); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1); text-align: center;\">' +\r\n                        '<div style=\"font-weight: 600; margin-bottom: 10px; color: #e0e0e0; font-size: 14px;\">Snapcode:<\/div>' +\r\n                        '<div style=\"cursor: pointer; display: inline-block; padding: 15px; background: rgba(255, 255, 255, 0.05); border-radius: 15px;\" onclick=\"showMediaModal(\\'' + snapcodeUrl + '\\', \\'image\\', \\'snapcode.svg\\')\">' +\r\n                        '<img decoding=\"async\" src=\"' + snapcodeUrl + '\" alt=\"Snapcode\" style=\"width: 180px; height: 180px; border-radius: 10px;\" \/>' +\r\n                        '<\/div><\/div>';\r\n                }\r\n\r\n\r\n                \/\/ Creation and Update Timestamps - Other tab\r\n                if (userProfile.creationTimestampMs || userProfile.lastUpdateTimestampMs) {\r\n                    otherTabHTML += '<div style=\"margin: 20px 0; padding: 15px; background: rgba(255, 255, 255, 0.05); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                        '<div style=\"font-weight: 600; margin-bottom: 10px; color: #e0e0e0; font-size: 14px;\">Timestamps:<\/div>' +\r\n                        '<div style=\"padding: 12px; background: rgba(255, 255, 255, 0.05); border-radius: 8px; font-size: 12px; color: #a0a0a0;\">';\r\n                    if (userProfile.creationTimestampMs) {\r\n                        otherTabHTML += '<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 5px;\"><i class=\"fa-solid fa-calendar-plus\" style=\"color: #00BCD4;\"><\/i><span>Created: ' + formatTimestamp(userProfile.creationTimestampMs) + '<\/span><\/div>';\r\n                    }\r\n                    if (userProfile.lastUpdateTimestampMs) {\r\n                        otherTabHTML += '<div style=\"display: flex; align-items: center; gap: 8px;\"><i class=\"fa-solid fa-clock\" style=\"color: #FF9800;\"><\/i><span>Updated: ' + formatTimestamp(userProfile.lastUpdateTimestampMs) + '<\/span><\/div>';\r\n                    }\r\n                    otherTabHTML += '<\/div><\/div>';\r\n                }\r\n\r\n                \/\/ Page Metadata - Other tab\r\n                if (pageMetadata.pageType || pageMetadata.pageTitle || pageMetadata.shareId) {\r\n                    otherTabHTML += '<div style=\"margin: 20px 0; padding: 15px; background: rgba(255, 255, 255, 0.05); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                        '<div style=\"font-weight: 600; margin-bottom: 12px; color: #e0e0e0; font-size: 14px;\">Page Metadata:<\/div>' +\r\n                        '<div style=\"padding: 12px; background: rgba(255, 255, 255, 0.05); border-radius: 8px; font-size: 12px; color: #a0a0a0;\">';\r\n                    if (pageMetadata.pageType) {\r\n                        otherTabHTML += '<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 5px;\"><i class=\"fa-solid fa-file\" style=\"color: #00BCD4;\"><\/i><span>Page Type: ' + pageMetadata.pageType + '<\/span><\/div>';\r\n                    }\r\n                    if (pageMetadata.pageTitle) {\r\n                        otherTabHTML += '<div style=\"display: flex; align-items: flex-start; gap: 8px; margin-bottom: 5px;\"><i class=\"fa-solid fa-heading\" style=\"color: #FF9800; margin-top: 3px;\"><\/i><span style=\"word-break: break-word;\">Page Title: ' + pageMetadata.pageTitle + '<\/span><\/div>';\r\n                    }\r\n                    if (pageMetadata.shareId) {\r\n                        otherTabHTML += '<div style=\"display: flex; align-items: center; gap: 8px;\"><i class=\"fa-solid fa-share\" style=\"color: #00BCD4;\"><\/i><span>Share ID: ' + pageMetadata.shareId + '<\/span><\/div>';\r\n                    }\r\n                    otherTabHTML += '<\/div><\/div>';\r\n                }\r\n\r\n                \/\/ Profile Additional Fields - Other tab\r\n                let profileFieldsHTML = '';\r\n                if (userProfile.badge !== undefined && userProfile.badge !== null) {\r\n                    profileFieldsHTML += '<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 5px;\"><i class=\"fa-solid fa-badge-check\" style=\"color: #FF9800;\"><\/i><span>Badge Level: ' + userProfile.badge + '<\/span><\/div>';\r\n                }\r\n                if (userProfile.businessProfileId) {\r\n                    profileFieldsHTML += '<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 5px;\"><i class=\"fa-solid fa-briefcase\" style=\"color: #00BCD4;\"><\/i><span>Business Profile ID: <code style=\"background: rgba(255,255,255,0.1); padding: 2px 6px; border-radius: 4px; font-size: 11px;\">' + userProfile.businessProfileId + '<\/code><\/span><\/div>';\r\n                }\r\n                if (userProfile.mutableName) {\r\n                    profileFieldsHTML += '<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 5px;\"><i class=\"fa-solid fa-signature\" style=\"color: #00BCD4;\"><\/i><span>Mutable Name: ' + userProfile.mutableName + '<\/span><\/div>';\r\n                }\r\n                if (userProfile.publisherType) {\r\n                    profileFieldsHTML += '<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 5px;\"><i class=\"fa-solid fa-user-tie\" style=\"color: #FF9800;\"><\/i><span>Publisher Type: ' + userProfile.publisherType + '<\/span><\/div>';\r\n                }\r\n                if (userProfile.primaryColor) {\r\n                    profileFieldsHTML += '<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 5px;\"><i class=\"fa-solid fa-palette\" style=\"color: ' + userProfile.primaryColor + ';\"><\/i><span>Primary Color: <span style=\"display: inline-block; width: 20px; height: 20px; background: ' + userProfile.primaryColor + '; border-radius: 4px; border: 1px solid rgba(255,255,255,0.2); margin-left: 5px;\"><\/span> ' + userProfile.primaryColor + '<\/span><\/div>';\r\n                }\r\n                if (userProfile.shouldHideUsername !== undefined) {\r\n                    profileFieldsHTML += '<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 5px;\"><i class=\"fa-solid fa-eye-slash\" style=\"color: ' + (userProfile.shouldHideUsername ? '#FF9800' : '#00BCD4') + ';\"><\/i><span>Hide Username: ' + (userProfile.shouldHideUsername ? 'Yes' : 'No') + '<\/span><\/div>';\r\n                }\r\n                if (userProfile.bitmoji3d) {\r\n                    profileFieldsHTML += '<div style=\"display: flex; align-items: center; gap: 8px; margin-bottom: 5px;\"><i class=\"fa-solid fa-user-astronaut\" style=\"color: #00BCD4;\"><\/i><span>3D Bitmoji: Available<\/span><\/div>';\r\n                }\r\n\r\n                if (profileFieldsHTML) {\r\n                    otherTabHTML += '<div style=\"margin: 20px 0; padding: 15px; background: rgba(255, 255, 255, 0.05); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                        '<div style=\"font-weight: 600; margin-bottom: 12px; color: #e0e0e0; font-size: 14px;\">Profile Additional Fields:<\/div>' +\r\n                        '<div style=\"padding: 12px; background: rgba(255, 255, 255, 0.05); border-radius: 8px; font-size: 12px; color: #a0a0a0;\">' +\r\n                        profileFieldsHTML +\r\n                        '<\/div><\/div>';\r\n                }\r\n\r\n                \/\/ Lenses - Other tab (already extracted above)\r\n                if (lenses.length > 0) {\r\n                    otherTabHTML += '<div style=\"margin: 20px 0; padding: 15px; background: rgba(255, 255, 255, 0.05); border-radius: 12px; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                        '<div style=\"font-weight: 600; margin-bottom: 12px; color: #e0e0e0; font-size: 14px;\">Lenses (' + lenses.length + '):<\/div>' +\r\n                        '<div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: 10px;\">';\r\n                    lenses.forEach((lens, index) => {\r\n                        otherTabHTML += '<div style=\"padding: 10px; background: rgba(255, 255, 255, 0.05); border-radius: 8px; text-align: center;\">' +\r\n                            '<i class=\"fa-solid fa-camera\" style=\"font-size: 24px; color: #00BCD4; margin-bottom: 5px;\"><\/i>' +\r\n                            '<div style=\"font-size: 11px; color: #a0a0a0;\">Lens ' + (index + 1) + '<\/div>' +\r\n                            '<\/div>';\r\n                    });\r\n                    otherTabHTML += '<\/div><\/div>';\r\n                }\r\n\r\n\r\n                \/\/ Related Accounts Section - Related tab\r\n                if (relatedAccounts.length > 0) {\r\n                    relatedTabHTML += '<div style=\"padding: 20px;\">' +\r\n                        '<div style=\"text-align: center; margin-bottom: 25px;\">' +\r\n                        '<h3 style=\"color: #e0e0e0; font-size: 22px; font-weight: 700; margin-bottom: 10px;\">Related Accounts<\/h3>' +\r\n                        '<p style=\"color: #a0a0a0; font-size: 14px;\">Accounts related to this profile<\/p>' +\r\n                        '<\/div>' +\r\n                        '<div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 20px;\">';\r\n\r\n                    relatedAccounts.forEach(account => {\r\n                        const accountPic = account.profilePictureUrl || '';\r\n                        const accountUsername = account.username || '';\r\n                        const accountTitle = account.title || accountUsername;\r\n\r\n                        if (accountUsername) {\r\n                            relatedTabHTML += '<div style=\"text-align: center; padding: 20px; background: rgba(255, 255, 255, 0.05); border-radius: 15px; transition: all 0.3s; border: 1px solid rgba(255, 255, 255, 0.1);\" onmouseover=\"this.style.transform=\\'translateY(-5px)\\'; this.style.boxShadow=\\'0 8px 20px rgba(0,0,0,0.3)\\'; this.style.borderColor=\\'rgba(0, 188, 212, 0.5)\\';\" onmouseout=\"this.style.transform=\\'translateY(0)\\'; this.style.boxShadow=\\'none\\'; this.style.borderColor=\\'rgba(255, 255, 255, 0.1)\\';\">' +\r\n                                (accountPic ? '<img decoding=\"async\" src=\"' + accountPic + '\" alt=\"' + accountTitle + '\" style=\"width: 80px; height: 80px; border-radius: 50%; object-fit: cover; margin-bottom: 12px; border: 3px solid rgba(255, 255, 255, 0.2);\" \/>' : '<div style=\"width: 80px; height: 80px; border-radius: 50%; background: rgba(255, 255, 255, 0.1); margin: 0 auto 12px; display: flex; align-items: center; justify-content: center;\"><i class=\"fa-brands fa-snapchat\" style=\"font-size: 35px; color: #a0a0a0;\"><\/i><\/div>') +\r\n                                '<div style=\"font-weight: 600; color: #e0e0e0; font-size: 14px; margin-bottom: 5px;\">' + accountTitle + '<\/div>' +\r\n                                '<div style=\"font-size: 12px; color: #a0a0a0;\">@' + accountUsername + '<\/div>' +\r\n                                '<\/div>';\r\n                        }\r\n                    });\r\n\r\n                    relatedTabHTML += '<\/div><\/div>';\r\n                } else {\r\n                    relatedTabHTML = '<div class=\"no-result\"><i class=\"fa-solid fa-users\"><\/i><p>No related accounts available<\/p><\/div>';\r\n                }\r\n\r\n                \/\/ Insert tab content\r\n                if (relatedTabHTML) {\r\n                    $('#related-content').html(relatedTabHTML);\r\n                }\r\n\r\n                if (otherTabHTML) {\r\n                    $('#other-content').html(otherTabHTML);\r\n                } else {\r\n                    $('#other-content').html('<div class=\"no-result\"><i class=\"fa-solid fa-info-circle\"><\/i><p>No additional information available<\/p><\/div>');\r\n                }\r\n\r\n                \/\/ Build content for each tab separately\r\n                let storyHTML = '';\r\n                let highlightsTabHTML = '';\r\n                let spotlightsTabHTML = '';\r\n\r\n                \/\/ Story Tab Content\r\n                if (story && story.snapList && story.snapList.length > 0) {\r\n                    storyHTML = '<div class=\"stories-grid\">';\r\n                    story.snapList.forEach((snap, index) => {\r\n                        const mediaUrl = snap.mediaUrl || '';\r\n                        const previewUrl = snap.mediaPreviewUrl || snap.mediaUrl || '';\r\n                        const isVideo = snap.snapMediaType === 1;\r\n\r\n                        storyHTML += '<div class=\"story-card\" style=\"background: rgba(255, 255, 255, 0.05); border-radius: 16px; overflow: hidden; box-shadow: 0 4px 15px rgba(0,0,0,0.1); transition: transform 0.3s; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                            '<div class=\"story-img-container\" data-type=\"' + (isVideo ? 'video' : 'image') + '\" data-media=\"' + mediaUrl + '\">' +\r\n                            '<img decoding=\"async\" class=\"story-thumb\" src=\"' + previewUrl + '\" alt=\"Story ' + (index + 1) + '\" \/>' +\r\n                            (isVideo ? '<button class=\"story-always-play\" onclick=\"playMedia(this.closest(\\'.story-img-container\\').querySelector(\\'.story-view-btn\\'))\" title=\"Play Video\"><i class=\"fa-solid fa-play\"><\/i><\/button>' : '') +\r\n                            '<button class=\"story-always-download\" onclick=\"window.downloadMedia(\\'' + mediaUrl + '\\', \\'snapchat_story_' + index + '_' + Date.now() + '.' + (isVideo ? 'mp4' : 'jpg') + '\\')\" title=\"Download\"><i class=\"fa-solid fa-download\"><\/i><\/button>' +\r\n                            '<div class=\"story-overlay\">' +\r\n                            '<button class=\"story-view-btn\" onclick=\"playMedia(this)\"><i class=\"fa-solid fa-' + (isVideo ? 'play' : 'expand') + '\"><\/i><\/button>' +\r\n                            (isVideo ? '<button class=\"story-fullscreen-btn\" style=\"display:none;\"><i class=\"fa-solid fa-expand\"><\/i><\/button>' : '') +\r\n                            '<button class=\"story-download-btn\" data-url=\"' + mediaUrl + '\" data-filename=\"snapchat_story_' + index + '_' + Date.now() + '.' + (isVideo ? 'mp4' : 'jpg') + '\" data-type=\"' + (isVideo ? 'video' : 'image') + '\" onclick=\"downloadMedia(this)\"><i class=\"fa-solid fa-download\"><\/i><\/button>' +\r\n                            '<\/div>' +\r\n                            '<\/div>' +\r\n                            '<\/div>';\r\n                    });\r\n                    storyHTML += '<\/div>';\r\n                } else {\r\n                    storyHTML = '<div class=\"no-result\"><i class=\"fa-solid fa-circle-play\"><\/i><p>No active story at this time<\/p><\/div>';\r\n                }\r\n\r\n                \/\/ Highlights Tab Content\r\n                if (curatedHighlights.length > 0) {\r\n                    highlightsTabHTML += '<div class=\"stories-grid\">';\r\n\r\n                    curatedHighlights.forEach((highlight, index) => {\r\n                        const thumbnailUrl = highlight.thumbnailUrl || '';\r\n                        const storyTitle = highlight.storyTitle || 'Highlight ' + (index + 1);\r\n                        const storySubtitle = highlight.storySubtitle || '';\r\n                        const snapList = highlight.snapList || [];\r\n                        const highlightId = highlight.storyId || '';\r\n\r\n                        if (thumbnailUrl && snapList.length > 0) {\r\n                            const firstSnap = snapList[0];\r\n                            const mediaUrl = firstSnap.mediaUrl || '';\r\n                            const previewUrl = firstSnap.mediaPreviewUrl || thumbnailUrl;\r\n                            const isVideo = firstSnap.snapMediaType === 1; \/\/ 1 = video, 0 = image\r\n                            const timestamp = firstSnap.timestampInSec || '';\r\n\r\n                            \/\/ Format timestamp\r\n                            let timestampText = '';\r\n                            if (timestamp) {\r\n                                const date = new Date(parseInt(timestamp) * 1000);\r\n                                timestampText = date.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' });\r\n                            }\r\n\r\n                            highlightsTabHTML += '<div class=\"story-card\" style=\"background: rgba(255, 255, 255, 0.05); border-radius: 16px; overflow: hidden; box-shadow: 0 4px 15px rgba(0,0,0,0.1); transition: transform 0.3s; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                                '<div class=\"story-img-container\" data-type=\"' + (isVideo ? 'video' : 'image') + '\" data-media=\"' + mediaUrl + '\">' +\r\n                                '<img decoding=\"async\" class=\"story-thumb\" src=\"' + previewUrl + '\" alt=\"' + storyTitle + '\" \/>' +\r\n                                (isVideo ? '<button class=\"story-always-play\" onclick=\"playMedia(this.closest(\\'.story-img-container\\').querySelector(\\'.story-view-btn\\'))\" title=\"Play Video\"><i class=\"fa-solid fa-play\"><\/i><\/button>' : '') +\r\n                                '<button class=\"story-always-download\" onclick=\"window.downloadMedia(\\'' + mediaUrl + '\\', \\'snapchat_highlight_' + index + '_' + Date.now() + '.' + (isVideo ? 'mp4' : 'jpg') + '\\')\" title=\"Download\"><i class=\"fa-solid fa-download\"><\/i><\/button>' +\r\n                                '<div class=\"story-overlay\">' +\r\n                                '<button class=\"story-view-btn\" onclick=\"playMedia(this)\"><i class=\"fa-solid fa-' + (isVideo ? 'play' : 'expand') + '\"><\/i><\/button>' +\r\n                                (isVideo ? '<button class=\"story-fullscreen-btn\" style=\"display:none;\"><i class=\"fa-solid fa-expand\"><\/i><\/button>' : '') +\r\n                                '<button class=\"story-download-btn\" data-url=\"' + mediaUrl + '\" data-filename=\"snapchat_highlight_' + index + '_' + Date.now() + '.' + (isVideo ? 'mp4' : 'jpg') + '\" data-type=\"' + (isVideo ? 'video' : 'image') + '\" onclick=\"downloadMedia(this)\"><i class=\"fa-solid fa-download\"><\/i><\/button>' +\r\n                                '<\/div>' +\r\n                                '<\/div>' +\r\n                                '<div style=\"padding: 20px;\">' +\r\n                                '<div style=\"font-weight: 700; color: #e0e0e0; margin-bottom: 10px; text-align: center; font-size: 18px;\">' + storyTitle + '<\/div>';\r\n\r\n                            if (storySubtitle) {\r\n                                highlightsTabHTML += '<div style=\"font-size: 13px; color: #a0a0a0; text-align: center; margin-bottom: 12px; font-style: italic;\">' + storySubtitle + '<\/div>';\r\n                            }\r\n\r\n                            \/\/ Compact stats\r\n                            highlightsTabHTML += '<div style=\"display: flex; justify-content: center; gap: 20px; margin-bottom: 15px; padding: 10px; background: rgba(255, 255, 255, 0.05); border-radius: 10px;\">' +\r\n                                '<div style=\"text-align: center;\"><div style=\"font-weight: 700; color: #00BCD4; font-size: 16px;\">' + snapList.length + '<\/div><div style=\"font-size: 11px; color: #a0a0a0;\">Snaps<\/div><\/div>' +\r\n                                '<div style=\"text-align: center;\"><div style=\"font-weight: 700; color: #FF9800; font-size: 16px;\">' + (isVideo ? 'Video' : 'Image') + '<\/div><div style=\"font-size: 11px; color: #a0a0a0;\">Type<\/div><\/div>' +\r\n                                '<\/div>';\r\n\r\n                            \/\/ Show all snaps in this highlight (compact grid)\r\n                            if (snapList.length > 1) {\r\n                                highlightsTabHTML += '<div style=\"margin: 10px 0; padding: 10px; background: rgba(255, 255, 255, 0.03); border-radius: 8px;\">' +\r\n                                    '<div style=\"font-size: 12px; color: #a0a0a0; margin-bottom: 8px; font-weight: 600; text-align: center;\">All Snaps (' + snapList.length + '):<\/div>' +\r\n                                    '<div style=\"display: grid; grid-template-columns: repeat(auto-fill, minmax(70px, 1fr)); gap: 8px;\">';\r\n                                snapList.forEach((snap, snapIndex) => {\r\n                                    const snapMediaUrl = snap.mediaUrl || '';\r\n                                    const snapPreviewUrl = snap.mediaPreviewUrl || '';\r\n                                    const snapIsVideo = snap.snapMediaType === 1;\r\n                                    if (snapPreviewUrl) {\r\n                                        highlightsTabHTML += '<div style=\"position: relative; cursor: pointer; border-radius: 8px; overflow: hidden;\">' +\r\n                                            '<img decoding=\"async\" src=\"' + snapPreviewUrl + '\" alt=\"Snap ' + (snapIndex + 1) + '\" style=\"width: 100%; aspect-ratio: 1; object-fit: cover;\" onclick=\"showMediaModal(\\'' + snapMediaUrl + '\\', \\'' + (snapIsVideo ? 'video' : 'image') + '\\', \\'snap_' + index + '_' + snapIndex + '.' + (snapIsVideo ? 'mp4' : 'jpg') + '\\')\" \/>' +\r\n                                            (snapIsVideo ? '<button class=\"story-always-play\" style=\"top: 5px; left: 5px; width: 28px; height: 28px; font-size: 11px;\" onclick=\"showMediaModal(\\'' + snapMediaUrl + '\\', \\'video\\', \\'snap_' + index + '_' + snapIndex + '.mp4\\')\" title=\"Play Video\"><i class=\"fa-solid fa-play\"><\/i><\/button>' : '') +\r\n                                            '<button class=\"story-always-download\" style=\"top: 5px; right: 5px; width: 28px; height: 28px; font-size: 11px;\" onclick=\"window.downloadMedia(\\'' + snapMediaUrl + '\\', \\'snap_' + index + '_' + snapIndex + '.' + (snapIsVideo ? 'mp4' : 'jpg') + '\\')\" title=\"Download\"><i class=\"fa-solid fa-download\"><\/i><\/button>' +\r\n                                            '<\/div>';\r\n                                    }\r\n                                });\r\n                                highlightsTabHTML += '<\/div><\/div>';\r\n                            }\r\n\r\n                            if (timestampText) {\r\n                                highlightsTabHTML += '<div style=\"text-align: center; font-size: 11px; color: #a0a0a0; margin-top: 12px; padding-top: 12px; border-top: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                                    '<i class=\"fa-solid fa-clock\" style=\"margin-right: 4px;\"><\/i>' +\r\n                                    timestampText +\r\n                                    '<\/div>';\r\n                            }\r\n\r\n                            highlightsTabHTML += '<\/div><\/div>';\r\n                        }\r\n                    });\r\n\r\n                    highlightsTabHTML += '<\/div>';\r\n                } else {\r\n                    highlightsTabHTML = '<div class=\"no-result\"><i class=\"fa-solid fa-star\"><\/i><p>No highlights available at this time<\/p><\/div>';\r\n                }\r\n\r\n                \/\/ Spotlights Tab Content\r\n                if (spotlightHighlights.length > 0) {\r\n                    \/\/ Calculate total engagement stats\r\n                    let totalViews = 0, totalComments = 0, totalShares = 0, totalBoosts = 0, totalRecommends = 0;\r\n                    spotlightMetadata.forEach(meta => {\r\n                        const stats = meta.engagementStats || {};\r\n                        if (stats.viewCount) totalViews += parseInt(stats.viewCount);\r\n                        if (stats.commentCount) totalComments += parseInt(stats.commentCount);\r\n                        if (stats.shareCount) totalShares += parseInt(stats.shareCount);\r\n                        if (stats.boostCount) totalBoosts += parseInt(stats.boostCount);\r\n                        if (stats.recommendCount) totalRecommends += parseInt(stats.recommendCount);\r\n                    });\r\n\r\n                    spotlightsTabHTML += '<div class=\"stories-grid\">';\r\n\r\n                    spotlightHighlights.forEach((spotlight, index) => {\r\n                        const thumbnailUrl = spotlight.thumbnailUrl || '';\r\n                        const snapList = spotlight.snapList || [];\r\n                        const spotlightMeta = spotlightMetadata[index] || {};\r\n                        const engagementStats = spotlightMeta.engagementStats || {};\r\n                        const videoMeta = spotlightMeta.videoMetadata || {};\r\n                        const hashtags = spotlightMeta.hashtags || [];\r\n                        const description = videoMeta.description || spotlightMeta.description || '';\r\n                        const embeddedTextCaption = videoMeta.embeddedTextCaption || '';\r\n                        const contextCards = spotlightMeta.contextCards || [];\r\n\r\n                        if (thumbnailUrl && snapList.length > 0) {\r\n                            const firstSnap = snapList[0];\r\n                            const mediaUrl = firstSnap.mediaUrl || '';\r\n                            const previewUrl = firstSnap.mediaPreviewUrl || thumbnailUrl;\r\n                            const isVideo = firstSnap.snapMediaType === 1;\r\n\r\n                            \/\/ Get snapId\/storyId to match with comments\r\n                            const storyId = spotlight.storyId || '';\r\n                            const snapId = firstSnap.snapId || storyId || '';\r\n\r\n                            \/\/ Match comments - backend already parsed, use index-based access\r\n                            let comments = [];\r\n                            if (Array.isArray(spotlightComments) && spotlightComments[index]) {\r\n                                comments = spotlightComments[index];\r\n                            } else if (spotlightCommentsByIndex && spotlightCommentsByIndex[index]) {\r\n                                comments = spotlightCommentsByIndex[index];\r\n                            }\r\n\r\n                            \/\/ Format duration\r\n                            let durationText = '';\r\n                            if (videoMeta.durationMs) {\r\n                                const seconds = Math.floor(parseInt(videoMeta.durationMs) \/ 1000);\r\n                                const minutes = Math.floor(seconds \/ 60);\r\n                                const secs = seconds % 60;\r\n                                durationText = minutes > 0 ? minutes + ':' + (secs < 10 ? '0' : '') + secs : secs + 's';\r\n                            }\r\n\r\n                            spotlightsTabHTML += '<div class=\"story-card\" style=\"background: rgba(255, 255, 255, 0.05); border-radius: 16px; overflow: hidden; box-shadow: 0 4px 15px rgba(0,0,0,0.1); transition: transform 0.3s; border: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                                '<div class=\"story-img-container\" data-type=\"' + (isVideo ? 'video' : 'image') + '\" data-media=\"' + mediaUrl + '\">' +\r\n                                '<img decoding=\"async\" class=\"story-thumb\" src=\"' + previewUrl + '\" alt=\"Spotlight ' + (index + 1) + '\" \/>' +\r\n                                (isVideo ? '<button class=\"story-always-play\" onclick=\"playMedia(this.closest(\\'.story-img-container\\').querySelector(\\'.story-view-btn\\'))\" title=\"Play Video\"><i class=\"fa-solid fa-play\"><\/i><\/button>' : '') +\r\n                                '<button class=\"story-always-download\" onclick=\"window.downloadMedia(\\'' + mediaUrl + '\\', \\'snapchat_spotlight_' + index + '_' + Date.now() + '.' + (isVideo ? 'mp4' : 'jpg') + '\\')\" title=\"Download\"><i class=\"fa-solid fa-download\"><\/i><\/button>' +\r\n                                (durationText ? '<div style=\"position: absolute; bottom: 10px; right: 10px; background: rgba(0,0,0,0.8); color: white; padding: 4px 8px; border-radius: 4px; font-size: 12px; font-weight: 600;\">' + durationText + '<\/div>' : '') +\r\n                                '<div class=\"story-overlay\">' +\r\n                                '<button class=\"story-view-btn\" onclick=\"playMedia(this)\"><i class=\"fa-solid fa-' + (isVideo ? 'play' : 'expand') + '\"><\/i><\/button>' +\r\n                                (isVideo ? '<button class=\"story-fullscreen-btn\" style=\"display:none;\"><i class=\"fa-solid fa-expand\"><\/i><\/button>' : '') +\r\n                                '<button class=\"story-download-btn\" data-url=\"' + mediaUrl + '\" data-filename=\"snapchat_spotlight_' + index + '_' + Date.now() + '.' + (isVideo ? 'mp4' : 'jpg') + '\" data-type=\"' + (isVideo ? 'video' : 'image') + '\" onclick=\"downloadMedia(this)\"><i class=\"fa-solid fa-download\"><\/i><\/button>' +\r\n                                ((comments.length > 0 || engagementStats.commentCount) ? '<button class=\"story-comment-btn\" onclick=\"showCommentsModal(' + index + ', \\'spotlight\\')\"><i class=\"fa-solid fa-comments\"><\/i><\/button>' : '') +\r\n                                '<\/div>' +\r\n                                '<\/div>' +\r\n                                '<div style=\"padding: 20px;\">' +\r\n                                '<div style=\"font-weight: 700; color: #e0e0e0; margin-bottom: 15px; text-align: center; font-size: 18px;\">Spotlight ' + (index + 1) + '<\/div>';\r\n\r\n                            \/\/ Compact Engagement Stats\r\n                            if (engagementStats.viewCount || engagementStats.commentCount || engagementStats.shareCount || engagementStats.boostCount) {\r\n                                spotlightsTabHTML += '<div style=\"display: flex; justify-content: center; gap: 20px; margin-bottom: 15px; padding: 12px; background: rgba(255, 255, 255, 0.05); border-radius: 10px;\">';\r\n                                if (engagementStats.viewCount) {\r\n                                    spotlightsTabHTML += '<div style=\"text-align: center;\"><div style=\"font-weight: 700; color: #00BCD4; font-size: 16px;\">' + formatNumber(engagementStats.viewCount) + '<\/div><div style=\"font-size: 11px; color: #a0a0a0;\">Views<\/div><\/div>';\r\n                                }\r\n                                if (engagementStats.commentCount) {\r\n                                    spotlightsTabHTML += '<div style=\"text-align: center;\"><div style=\"font-weight: 700; color: #FF9800; font-size: 16px;\">' + formatNumber(engagementStats.commentCount) + '<\/div><div style=\"font-size: 11px; color: #a0a0a0;\">Comments<\/div><\/div>';\r\n                                }\r\n                                if (engagementStats.shareCount) {\r\n                                    spotlightsTabHTML += '<div style=\"text-align: center;\"><div style=\"font-weight: 700; color: #25D366; font-size: 16px;\">' + formatNumber(engagementStats.shareCount) + '<\/div><div style=\"font-size: 11px; color: #a0a0a0;\">Shares<\/div><\/div>';\r\n                                }\r\n                                if (engagementStats.boostCount) {\r\n                                    spotlightsTabHTML += '<div style=\"text-align: center;\"><div style=\"font-weight: 700; color: #FF9800; font-size: 16px;\">' + formatNumber(engagementStats.boostCount) + '<\/div><div style=\"font-size: 11px; color: #a0a0a0;\">Boosts<\/div><\/div>';\r\n                                }\r\n                                spotlightsTabHTML += '<\/div>';\r\n                            }\r\n\r\n                            \/\/ Description (if available)\r\n                            if (description) {\r\n                                spotlightsTabHTML += '<div style=\"margin: 10px 0; padding: 10px; background: rgba(255, 255, 255, 0.05); border-radius: 8px; font-size: 13px; color: #d0d0d0; line-height: 1.4; text-align: center;\">' + description + '<\/div>';\r\n                            }\r\n\r\n                            \/\/ Hashtags (compact)\r\n                            if (hashtags.length > 0) {\r\n                                spotlightsTabHTML += '<div style=\"margin: 10px 0; text-align: center;\">';\r\n                                hashtags.forEach(tag => {\r\n                                    spotlightsTabHTML += '<span style=\"background: rgba(255, 152, 0, 0.2); color: #FF9800; padding: 4px 10px; border-radius: 15px; font-size: 11px; font-weight: 600; margin: 3px;\">#' + tag + '<\/span>';\r\n                                });\r\n                                spotlightsTabHTML += '<\/div>';\r\n                            }\r\n\r\n                            \/\/ Comment Button - Prominent\r\n                            if (comments.length > 0 || engagementStats.commentCount) {\r\n                                const commentCount = comments.length || engagementStats.commentCount || 0;\r\n                                spotlightsTabHTML += '<div style=\"text-align: center; margin-top: 15px;\">' +\r\n                                    '<button onclick=\"showCommentsModal(' + index + ', \\'spotlight\\')\" style=\"padding: 12px 30px; background: linear-gradient(135deg, #00BCD4, #FF9800); color: white; border: none; border-radius: 25px; font-weight: 700; cursor: pointer; font-size: 15px; transition: transform 0.2s; box-shadow: 0 4px 15px rgba(0, 188, 212, 0.3); width: 100%;\">' +\r\n                                    '<i class=\"fa-solid fa-comments\" style=\"margin-right: 8px;\"><\/i>' +\r\n                                    'View Comments (' + formatNumber(commentCount) + ')' +\r\n                                    '<\/button>' +\r\n                                    '<\/div>';\r\n                            }\r\n\r\n                            \/\/ Upload Date (compact)\r\n                            if (videoMeta.uploadDateMs) {\r\n                                const uploadDate = new Date(parseInt(videoMeta.uploadDateMs));\r\n                                spotlightsTabHTML += '<div style=\"text-align: center; font-size: 11px; color: #a0a0a0; margin-top: 12px; padding-top: 12px; border-top: 1px solid rgba(255, 255, 255, 0.1);\">' +\r\n                                    '<i class=\"fa-solid fa-clock\" style=\"margin-right: 4px;\"><\/i>' +\r\n                                    uploadDate.toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' }) +\r\n                                    '<\/div>';\r\n                            }\r\n\r\n                            spotlightsTabHTML += '<\/div><\/div>';\r\n                        }\r\n                    });\r\n\r\n                    spotlightsTabHTML += '<\/div>';\r\n                } else {\r\n                    spotlightsTabHTML = '<div class=\"no-result\"><i class=\"fa-solid fa-fire\"><\/i><p>No spotlights available at this time<\/p><\/div>';\r\n                }\r\n\r\n                \/\/ Update highlights cards to match dark theme\r\n                highlightsTabHTML = highlightsTabHTML.replace(\/background: white\/g, 'background: rgba(255, 255, 255, 0.05)');\r\n                highlightsTabHTML = highlightsTabHTML.replace(\/color: #333\/g, 'color: #e0e0e0');\r\n                highlightsTabHTML = highlightsTabHTML.replace(\/color: #666\/g, 'color: #a0a0a0');\r\n                highlightsTabHTML = highlightsTabHTML.replace(\/border: 2px solid rgba\\(0, 0, 0, 0\\.1\\)\/g, 'border: 1px solid rgba(255, 255, 255, 0.1)');\r\n\r\n                \/\/ Populate tab contents\r\n                \/\/ Highlights tab - show curatedHighlights\r\n                if ($('#highlights-content').length > 0) {\r\n                    $('#highlights-content').html(highlightsTabHTML || '<div class=\"no-result\"><i class=\"fa-solid fa-bookmark\"><\/i><p>No highlights available<\/p><\/div>');\r\n                }\r\n                \/\/ Story tab - show story only (not highlights)\r\n                if ($('#story-content').length > 0) {\r\n                    $('#story-content').html(storyHTML || '<div class=\"no-result\"><i class=\"fa-solid fa-circle-play\"><\/i><p>No active story at this time<\/p><\/div>');\r\n                }\r\n                \/\/ Spotlights tab\r\n                if ($('#spotlights-content').length > 0) {\r\n                    $('#spotlights-content').html(spotlightsTabHTML || '<div class=\"no-result\"><i class=\"fa-solid fa-fire\"><\/i><p>No spotlights available<\/p><\/div>');\r\n                }\r\n\r\n                \/\/ Always set Highlights as the default active tab\r\n                \/\/ Tabs order: Highlights(0), Spotlights(1), Story(2), Related(3), Other(4)\r\n                $('.sc-tabs button').removeClass('active');\r\n                $('.tab-content').removeClass('active').hide();\r\n\r\n                \/\/ Always show Highlights tab by default\r\n                $('#highlights-content').addClass('active').show();\r\n                $('.sc-tabs button').eq(0).addClass('active');\r\n\r\n                \/\/ Ensure all containers are visible (already visible by default now)\r\n                $(\".sc-profile-header\").show();\r\n                $(\".sc-tabs\").show();\r\n\r\n                \/\/ Story action button handlers (play\/download) - delegated, so register once\r\n                $(document).on(\"click\", \".story-action-btn\", function (e) {\r\n                    e.preventDefault();\r\n                    e.stopPropagation();\r\n\r\n                    var index = parseInt($(this).attr(\"data-index\"), 10);\r\n                    var action = $(this).attr(\"data-action\");\r\n\r\n                    if (isNaN(index)) {\r\n                        return;\r\n                    }\r\n\r\n                    var data = window._snapchatStoriesData || {};\r\n                    var stories = data.stories || [];\r\n\r\n                    if (!stories || stories.length === 0) {\r\n                        return;\r\n                    }\r\n\r\n                    var story = stories[index];\r\n                    if (!story) {\r\n                        return;\r\n                    }\r\n\r\n                    if (action === \"play\") {\r\n                        var firstSnap = story.snaps && story.snaps[0];\r\n                        if (firstSnap) {\r\n                            var mediaUrl = firstSnap.mediaUrl;\r\n                            if (!mediaUrl) {\r\n                                var storyCard = $('.story-card[data-index=\"' + index + '\"]');\r\n                                var imgContainer = storyCard.find('.story-img-container');\r\n                                mediaUrl = imgContainer.attr('data-media');\r\n                            }\r\n\r\n                            var isVideo = false;\r\n                            var snapMediaType = firstSnap.snapMediaType;\r\n\r\n                            if (snapMediaType === 1 || snapMediaType === '1' || parseInt(snapMediaType) === 1) {\r\n                                isVideo = true;\r\n                            } else if (snapMediaType === 2 || snapMediaType === '2' || parseInt(snapMediaType) === 2) {\r\n                                isVideo = true;\r\n                            }\r\n\r\n                            if (!isVideo && story.snaps && story.snaps.length > 0) {\r\n                                story.snaps.forEach(function (snap) {\r\n                                    var st = snap.snapMediaType;\r\n                                    if (st === 1 || st === '1' || parseInt(st) === 1 || st === 2 || st === '2' || parseInt(st) === 2) {\r\n                                        isVideo = true;\r\n                                    }\r\n                                });\r\n                            }\r\n\r\n                            if (!isVideo && mediaUrl) {\r\n                                if (mediaUrl.includes('.1322')) {\r\n                                    isVideo = true;\r\n                                } else {\r\n                                    var videoExtensions = ['.mp4', '.mov', '.webm', '.avi', '.mkv', 'video', 'mp4'];\r\n                                    var urlLower = mediaUrl.toLowerCase();\r\n                                    isVideo = videoExtensions.some(function (ext) {\r\n                                        return urlLower.includes(ext);\r\n                                    });\r\n                                }\r\n                            }\r\n\r\n                            if (mediaUrl) {\r\n                                if (isVideo) {\r\n                                    try {\r\n                                        if (typeof window.showMediaModal === 'function') {\r\n                                            var fullUrl = window.resolveFullVideoUrl(mediaUrl, 'video');\r\n                                            window.showMediaModal(fullUrl || mediaUrl, 'video', 'story_' + index + '_' + Date.now() + '.mp4');\r\n                                        } else {\r\n                                            window.open(mediaUrl, '_blank');\r\n                                        }\r\n                                    } catch (err) {\r\n                                        window.open(mediaUrl, '_blank');\r\n                                    }\r\n                                } else {\r\n                                    try {\r\n                                        if (typeof window.showMediaModal === 'function') {\r\n                                            window.showMediaModal(mediaUrl, 'image', 'story_' + index + '_' + Date.now() + '.jpg');\r\n                                        } else {\r\n                                            window.open(mediaUrl, '_blank');\r\n                                        }\r\n                                    } catch (err) {\r\n                                        window.open(mediaUrl, '_blank');\r\n                                    }\r\n                                }\r\n                            }\r\n                        }\r\n                    } else if (action === \"download\") {\r\n                        var firstSnap = story.snaps && story.snaps[0];\r\n                        if (firstSnap) {\r\n                            var mediaUrl = firstSnap.mediaUrl;\r\n                            if (!mediaUrl) {\r\n                                var storyCard = $('.story-card[data-index=\"' + index + '\"]');\r\n                                var imgContainer = storyCard.find('.story-img-container');\r\n                                mediaUrl = imgContainer.attr('data-media');\r\n                            }\r\n                            if (!mediaUrl && window.getFullMediaUrl) {\r\n                                mediaUrl = window.getFullMediaUrl(index);\r\n                            }\r\n                            var isVideo = false;\r\n                            if (firstSnap.snapMediaType === 1 || firstSnap.snapMediaType === 2 || firstSnap.snapMediaType === '1' || firstSnap.snapMediaType === '2') {\r\n                                isVideo = true;\r\n                            } else if (mediaUrl && (mediaUrl.includes('.1322') || mediaUrl.match(\/\\.mp4|\\.mov|\\.webm\/i))) {\r\n                                isVideo = true;\r\n                            }\r\n                            if (mediaUrl) {\r\n                                if (isVideo && window.resolveFullVideoUrl) {\r\n                                    mediaUrl = window.resolveFullVideoUrl(mediaUrl, 'video');\r\n                                }\r\n                                if (typeof window.downloadMedia === 'function') {\r\n                                    window.downloadMedia(mediaUrl, 'story_' + index + '_' + Date.now() + '.' + (isVideo ? 'mp4' : 'jpg'));\r\n                                } else {\r\n                                    window.open(mediaUrl, '_blank');\r\n                                }\r\n                            }\r\n                        }\r\n                    }\r\n                });\r\n                $(\"#tab-content\").show();\r\n\r\n                \/\/ Scroll to result\r\n                setTimeout(() => {\r\n                    $(\".sc-result\")[0].scrollIntoView({ behavior: 'smooth', block: 'start' });\r\n                }, 500);\r\n\r\n                \/\/ Store spotlight comments data for modal access\r\n                spotlightHighlights.forEach((spotlight, index) => {\r\n                    const spotlightMeta = spotlightMetadata[index] || {};\r\n                    const engagementStats = spotlightMeta.engagementStats || {};\r\n\r\n                    \/\/ Get comments from transformed data (already parsed by backend)\r\n                    let comments = [];\r\n                    if (Array.isArray(spotlightComments) && spotlightComments[index]) {\r\n                        comments = spotlightComments[index];\r\n                    } else if (spotlightCommentsByIndex && spotlightCommentsByIndex[index]) {\r\n                        comments = spotlightCommentsByIndex[index];\r\n                    }\r\n\r\n                    window.spotlightCommentsData[index] = {\r\n                        title: 'Spotlight ' + (index + 1),\r\n                        comments: comments,\r\n                        commentCount: engagementStats.commentCount || comments.length || 0\r\n                    };\r\n                });\r\n\r\n                \/\/ Data is ready: hide loading, show content (next frame so DOM has painted)\r\n                requestAnimationFrame(function () {\r\n                    requestAnimationFrame(function () {\r\n                        $(\"#skeleton-loading\").hide();\r\n                        $(\"#actual-content\").show();\r\n                    });\r\n                });\r\n            } catch (err) {\r\n                $(\".view-btn\").prop(\"disabled\", false).html(\"<i class='fa-solid fa-search'><\/i> View Profile\");\r\n                $(\"#skeleton-loading\").hide();\r\n                $(\"#actual-content\").show();\r\n\r\n                let errorMsg = \"Something went wrong. Please try again.\";\r\n\r\n                \/\/ Check for network\/CORS errors\r\n                if (err && err.message) {\r\n                    if (err.message.includes(\"Failed to fetch\") || err.message.includes(\"NetworkError\")) {\r\n                        errorMsg = \"Unable to connect to \" + apiBaseUrl + \". Please check if the server is running.\";\r\n                    } else {\r\n                        \/\/ Remove technical terms from error message\r\n                        errorMsg = String(err.message).replace(\/API|api|endpoint|server|CORS|cors|Laravel|laravel|port \\d+\/gi, '').trim();\r\n                        if (!errorMsg || errorMsg.length < 3) {\r\n                            errorMsg = \"Something went wrong. Please try again.\";\r\n                        }\r\n                    }\r\n                }\r\n\r\n                $(\"#error-message\").text(errorMsg).show();\r\n            }\r\n        });\r\n\r\n        \/\/ Enter key support\r\n        $(\"#input-username\").on(\"keypress\", function (e) {\r\n            if (e.key === \"Enter\") {\r\n                $(\".view-btn\").click();\r\n            }\r\n        });\r\n\r\n        \/\/ Switch tab function\r\n        window.switchTab = function (tabName, buttonElement) {\r\n            \/\/ Update active button\r\n            document.querySelectorAll('.sc-tabs button').forEach(btn => {\r\n                btn.classList.remove('active');\r\n            });\r\n            if (buttonElement) {\r\n                buttonElement.classList.add('active');\r\n            }\r\n\r\n            \/\/ Hide all tab contents and remove active class\r\n            document.querySelectorAll('.tab-content').forEach(content => {\r\n                content.classList.remove('active');\r\n                content.style.display = 'none';\r\n            });\r\n\r\n            \/\/ Show selected tab content\r\n            const targetContent = document.getElementById(tabName + '-content');\r\n            if (targetContent) {\r\n                targetContent.classList.add('active');\r\n                targetContent.style.display = 'block';\r\n            }\r\n\r\n            \/\/ If Story tab is clicked, fetch stories API\r\n            if (tabName === 'story') {\r\n                const username = $(\"#input-username\").val().trim();\r\n                if (username) {\r\n                    fetchStoriesForProfile(username);\r\n                } else {\r\n                    \/\/ Show placeholder if no username\r\n                    $('#story-content').html('<div class=\"no-result\"><i class=\"fa-solid fa-circle-play\" style=\"font-size: 48px; color: rgba(255, 255, 255, 0.2); margin-bottom: 15px;\"><\/i><p>Enter a Snapchat username above and click Story to view stories anonymously.<\/p><\/div>');\r\n                }\r\n            }\r\n        };\r\n\r\n        \/\/ HTML escape function\r\n        function esc(str) {\r\n            if (!str) return \"\";\r\n            return String(str)\r\n                .replace(\/&\/g, \"\\u0026amp;\")\r\n\t\t\t\t\t\t\t\t.replace(\/<\/g, \"\\u0026lt;\")\r\n\t\t\t\t\t\t\t\t.replace(\/>\/g, \"\\u0026gt;\")\r\n\t\t\t\t\t\t\t\t.replace(\/\"\/g, \"\\u0026quot;\")\r\n\t\t\t\t\t\t\t\t.replace(\/'\/g, \"\\u0026#39;\");\r\n        }\r\n\r\n        \/\/ Function to fetch stories API (similar to snapchatstoryviewer.html)\r\n        async function fetchStoriesForProfile(username) {\r\n            if (!username) return;\r\n\r\n            \/\/ Show loading state\r\n            $('#story-content').html('<div class=\"no-result\"><i class=\"fa-solid fa-spinner fa-spin\" style=\"font-size: 48px; color: rgba(255, 255, 255, 0.2); margin-bottom: 15px;\"><\/i><p>Loading stories...<\/p><\/div>');\r\n\r\n            try {\r\n                const apiUrl = apiBaseUrl + \"\/api\/snapchat\/stories\";\r\n                const clientIp = window.clientIpDetector?.getIp() || window.clientDetectedIpv4 || window.detectedClientIpv4 || null;\r\n\r\n                const headers = { \"Content-Type\": \"application\/json\" };\r\n                if (clientIp) {\r\n                    headers[\"X-Client-IPv4\"] = clientIp;\r\n                }\r\n\r\n                const resp = await fetch(apiUrl, {\r\n                    method: \"POST\",\r\n                    headers: headers,\r\n                    body: JSON.stringify({ username: username }),\r\n                });\r\n\r\n                const responseText = await resp.text();\r\n                if (!responseText || responseText.trim().length === 0) {\r\n                    throw new Error(\"No data received. Please try again.\");\r\n                }\r\n\r\n                if (responseText.trim().startsWith(\"<\")) {\r\n                    throw new Error(\"Something went wrong. Please try again later.\");\r\n                }\r\n\r\n                let res = null;\r\n                try {\r\n                    res = JSON.parse(responseText);\r\n                } catch (parseErr) {\r\n                    throw new Error(\"Unable to process the response. Please try again.\");\r\n                }\r\n\r\n                if (!resp.ok) {\r\n                    let msg = (res && (res.message || res.error)) || \"Something went wrong. Please try again.\";\r\n                    msg = msg.replace(\/API|api|endpoint|server|CORS|cors\/gi, '').trim();\r\n                    if (!msg || msg.length < 3) {\r\n                        msg = \"Something went wrong. Please try again.\";\r\n                    }\r\n                    $('#story-content').html('<div class=\"no-result\"><i class=\"fa-solid fa-circle-play\"><\/i><p>' + esc(msg) + '<\/p><\/div>');\r\n                    return;\r\n                }\r\n\r\n                if (res && res.status === \"error\") {\r\n                    let msg = res.message || \"Something went wrong. Please try again.\";\r\n                    msg = msg.replace(\/API|api|endpoint|server|CORS|cors\/gi, '').trim();\r\n                    if (!msg || msg.length < 3) {\r\n                        msg = \"Something went wrong. Please try again.\";\r\n                    }\r\n                    $('#story-content').html('<div class=\"no-result\"><i class=\"fa-solid fa-circle-play\"><\/i><p>' + esc(msg) + '<\/p><\/div>');\r\n                    return;\r\n                }\r\n\r\n                const data = (res && res.data) || {};\r\n                window._snapchatStoriesData = data;\r\n                renderStoriesInProfile(data);\r\n\r\n            } catch (err) {\r\n                let errorMsg = \"Something went wrong. Please try again.\";\r\n                if (err && err.message) {\r\n                    if (err.message.includes(\"Failed to fetch\") || err.message.includes(\"NetworkError\")) {\r\n                        errorMsg = \"Unable to connect to \" + apiBaseUrl + \". Please check if the server is running.\";\r\n                    } else {\r\n                        errorMsg = String(err.message).replace(\/API|api|endpoint|server|CORS|cors|Laravel|laravel|port \\d+\/gi, '').trim();\r\n                        if (!errorMsg || errorMsg.length < 3) {\r\n                            errorMsg = \"Something went wrong. Please try again.\";\r\n                        }\r\n                    }\r\n                }\r\n                $('#story-content').html('<div class=\"no-result\"><i class=\"fa-solid fa-circle-play\"><\/i><p>' + esc(errorMsg) + '<\/p><\/div>');\r\n            }\r\n        }\r\n\r\n        \/\/ Helper function for date formatting\r\n        function formatDateOnly(sec) {\r\n            if (!sec) return \"Unknown\";\r\n            var n = parseInt(sec, 10);\r\n            if (isNaN(n)) return \"Unknown\";\r\n            var d = new Date(n * 1000);\r\n            return d.toLocaleDateString(undefined, { year: \"numeric\", month: \"short\", day: \"numeric\" });\r\n        }\r\n\r\n        function formatTimestamp(sec) {\r\n            if (!sec) return \"Unknown time\";\r\n            var n = parseInt(sec, 10);\r\n            if (isNaN(n)) return \"Unknown time\";\r\n            var d = new Date(n * 1000);\r\n            return d.toLocaleString();\r\n        }\r\n\r\n        \/\/ Helper function to get full mediaUrl\r\n        window.getFullMediaUrl = function (storyIndex, snapIndex) {\r\n            if (window._snapchatStoriesData && window._snapchatStoriesData.stories && window._snapchatStoriesData.stories[storyIndex]) {\r\n                const story = window._snapchatStoriesData.stories[storyIndex];\r\n                if (snapIndex !== undefined && story.snaps && story.snaps[snapIndex]) {\r\n                    const snap = story.snaps[snapIndex];\r\n                    if (snap.mediaUrl) {\r\n                        return snap.mediaUrl;\r\n                    }\r\n                } else if (story.snaps && story.snaps.length > 0) {\r\n                    for (let i = 0; i < story.snaps.length; i++) {\r\n                        const snap = story.snaps[i];\r\n                        if (snap.mediaUrl) {\r\n                            return snap.mediaUrl;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return null;\r\n        };\r\n\r\n        \/\/ Helper function to resolve preview URLs to full video URLs\r\n        window.resolveFullVideoUrl = function (url, mediaType) {\r\n            if (!url) return url;\r\n            const isVideoUrl = mediaType === 'video' || url.includes('.1322') || url.match(\/\\.mp4|\\.mov|\\.webm\/i);\r\n            if (!isVideoUrl) return url;\r\n\r\n            if (window._snapchatStoriesData && window._snapchatStoriesData.stories) {\r\n                for (let sIdx = 0; sIdx < window._snapchatStoriesData.stories.length; sIdx++) {\r\n                    const story = window._snapchatStoriesData.stories[sIdx];\r\n                    if (story && story.snaps) {\r\n                        for (let snapIdx = 0; snapIdx < story.snaps.length; snapIdx++) {\r\n                            const snap = story.snaps[snapIdx];\r\n                            if (snap.mediaPreviewUrl === url && snap.mediaUrl) {\r\n                                return snap.mediaUrl;\r\n                            }\r\n                            if (snap.mediaUrl === url) {\r\n                                return url;\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return url;\r\n        };\r\n\r\n        \/\/ Function to toggle snap list visibility\r\n        window.toggleSnapList = function (index) {\r\n            var snapList = $(\"#snap-list-\" + index);\r\n            if (snapList.length) {\r\n                snapList.toggleClass(\"collapsed\");\r\n            }\r\n        };\r\n\r\n        \/\/ Function to render stories in profile viewer (same as snapchatstoryviewer.html)\r\n        function renderStoriesInProfile(data) {\r\n            const stories = data.stories || [];\r\n\r\n            if (!stories.length) {\r\n                $('#story-content').html('<div class=\"no-result\"><i class=\"fa-solid fa-clapperboard\"><\/i><p>No public stories were found for this user.<\/p><\/div>');\r\n                return;\r\n            }\r\n\r\n            var html = \"\";\r\n            stories.forEach(function (story, index) {\r\n                var snaps = story.snaps || [];\r\n                var thumb = story.thumbnailUrl || (snaps[0] && (snaps[0].mediaPreviewUrl || snaps[0].mediaUrl)) || \"\";\r\n                var title = story.storyTitle || (\"Story \" + (index + 1));\r\n                var firstTs = snaps[0] && snaps[0].timestampInSec;\r\n                var dateText = formatDateOnly(firstTs);\r\n                var subtitle = story.storySubtitle || \"\";\r\n                var emoji = story.emoji || \"\";\r\n                var storyId = story.storyId || \"\";\r\n                var storyShareId = story.storyShareId || \"\";\r\n\r\n                var firstSnap = snaps[0] || {};\r\n                var firstMediaUrl = firstSnap.mediaUrl || firstSnap.mediaPreviewUrl || thumb || \"\";\r\n\r\n                \/\/ Detect video\r\n                var isVideo = false;\r\n                var videoSnap = null;\r\n\r\n                snaps.forEach(function (snap, snapIdx) {\r\n                    var snapMediaType = snap.snapMediaType;\r\n                    var snapUrl = snap.mediaUrl || snap.mediaPreviewUrl || '';\r\n\r\n                    var isSnapVideo = false;\r\n                    if (snapMediaType === 1 || snapMediaType === '1' || parseInt(snapMediaType) === 1) {\r\n                        isSnapVideo = true;\r\n                    } else if (snapMediaType === 2 || snapMediaType === '2' || parseInt(snapMediaType) === 2) {\r\n                        isSnapVideo = true;\r\n                    }\r\n\r\n                    if (!isSnapVideo && snapUrl) {\r\n                        if (snapUrl.includes('.1322') || snapUrl.match(\/\\.\\d{4}\/)) {\r\n                            var urlMatch = snapUrl.match(\/\\.(\\d{3,4})\/);\r\n                            if (urlMatch && urlMatch[1] !== '400' && urlMatch[1] !== '410') {\r\n                                isSnapVideo = true;\r\n                            }\r\n                        }\r\n                    }\r\n\r\n                    if (isSnapVideo) {\r\n                        isVideo = true;\r\n                        videoSnap = snap;\r\n                    }\r\n                });\r\n\r\n                if (videoSnap) {\r\n                    if (videoSnap.mediaUrl) {\r\n                        firstMediaUrl = videoSnap.mediaUrl;\r\n                    } else {\r\n                        var foundUrl = null;\r\n                        snaps.forEach(function (snap) {\r\n                            if (snap.mediaUrl && !foundUrl) {\r\n                                foundUrl = snap.mediaUrl;\r\n                            }\r\n                        });\r\n                        if (foundUrl) {\r\n                            firstMediaUrl = foundUrl;\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (!isVideo && firstMediaUrl) {\r\n                    if (firstMediaUrl.includes('.1322')) {\r\n                        isVideo = true;\r\n                    } else {\r\n                        var videoExtensions = ['.mp4', '.mov', '.webm', '.avi', '.mkv', 'video', 'mp4'];\r\n                        var urlLower = firstMediaUrl.toLowerCase();\r\n                        isVideo = videoExtensions.some(function (ext) {\r\n                            return urlLower.includes(ext);\r\n                        });\r\n                    }\r\n                }\r\n\r\n                var snapListHtml = \"\";\r\n                if (snaps.length) {\r\n                    snaps.forEach(function (snap, sIndex) {\r\n                        var snapThumb = snap.mediaPreviewUrl || snap.mediaUrl || \"\";\r\n                        var snapMediaUrl = snap.mediaUrl || \"\";\r\n                        var snapTime = formatTimestamp(snap.timestampInSec);\r\n\r\n                        var isVideo = false;\r\n                        var snapMediaType = snap.snapMediaType;\r\n\r\n                        if (snapMediaType === 1 || snapMediaType === '1' || parseInt(snapMediaType) === 1) {\r\n                            isVideo = true;\r\n                        } else if (snapMediaType === 2 || snapMediaType === '2' || parseInt(snapMediaType) === 2) {\r\n                            isVideo = true;\r\n                        }\r\n\r\n                        if (!isVideo && snapMediaUrl) {\r\n                            if (snapMediaUrl.includes('.1322')) {\r\n                                isVideo = true;\r\n                            } else {\r\n                                var videoExtensions = ['.mp4', '.mov', '.webm', '.avi', '.mkv', 'video', 'mp4'];\r\n                                var urlLower = snapMediaUrl.toLowerCase();\r\n                                isVideo = videoExtensions.some(function (ext) {\r\n                                    return urlLower.includes(ext);\r\n                                });\r\n                            }\r\n                        }\r\n\r\n                        var mediaType = isVideo ? \"Video\" : \"Image\";\r\n                        var hasAttach = snap.hasAttachment ? \"Yes\" : \"No\";\r\n                        var coords = (snap.lat && snap.lng) ? (snap.lat + \", \" + snap.lng) : \"-\";\r\n                        var snapTitle = snap.snapTitle || \"\";\r\n                        var snapSubtitles = snap.snapSubtitles || \"\";\r\n                        var overlayUrl = snap.overlayUrl || \"\";\r\n                        var attachmentUrl = snap.attachmentUrl || \"\";\r\n\r\n                        snapListHtml += '<div class=\"snap-item\">' +\r\n                            '<div class=\"snap-thumb\" style=\"position:relative;cursor:pointer;\" onclick=\"showMediaModal(\\'' + esc(snapMediaUrl) + '\\', \\'' + (isVideo ? 'video' : 'image') + '\\', \\'snap_' + index + '_' + sIndex + '_' + Date.now() + '.' + (isVideo ? 'mp4' : 'jpg') + '\\')\">' +\r\n                            (snapThumb\r\n                                ? '<img decoding=\"async\" src=\"' + esc(snapThumb) + '\" alt=\"Snap ' + (sIndex + 1) + '\">'\r\n                                : '<div style=\"width:100%;height:100%;background:rgba(255,255,255,0.05);display:flex;align-items:center;justify-content:center;\"><i class=\"fa-solid fa-image\" style=\"color:rgba(255,255,255,0.3);\"><\/i><\/div>'\r\n                            ) +\r\n                            (isVideo ? '<button class=\"story-always-play\" style=\"top: 5px; left: 5px; width: 28px; height: 28px; font-size: 11px;\" onclick=\"event.stopPropagation(); showMediaModal(\\'' + esc(snapMediaUrl) + '\\', \\'video\\', \\'snap_' + index + '_' + sIndex + '.mp4\\')\" title=\"Play Video\"><i class=\"fa-solid fa-play\"><\/i><\/button>' : '') +\r\n                            '<button class=\"story-always-download\" style=\"top: 5px; right: 5px; width: 28px; height: 28px; font-size: 11px;\" onclick=\"event.stopPropagation(); (function(storyIdx, snapIdx, isVid) { var url = window.getFullMediaUrl(storyIdx, snapIdx); if (url) { window.downloadMedia(url, \\'snap_\\' + storyIdx + \\'_\\' + snapIdx + \\'_\\' + Date.now() + \\'.\\' + (isVid ? \\'mp4\\' : \\'jpg\\')); } })(' + index + ', ' + sIndex + ', ' + (isVideo ? 'true' : 'false') + ')\" title=\"Download\"><i class=\"fa-solid fa-download\"><\/i><\/button>' +\r\n                            '<\/div>' +\r\n                            '<div class=\"snap-meta\">' +\r\n                            '<div class=\"snap-badge\">Snap ' + (sIndex + 1) + \" \u2022 \" + esc(mediaType) + \"<\/div>\" +\r\n                            (snapTitle ? '<div class=\"story-meta-row\"><span class=\"story-meta-label\">Title:<\/span><span class=\"story-meta-value\">' + esc(snapTitle) + \"<\/span><\/div>\" : \"\") +\r\n                            (snapSubtitles ? '<div class=\"story-meta-row\"><span class=\"story-meta-label\">Subtitles:<\/span><span class=\"story-meta-value\">' + esc(snapSubtitles) + \"<\/span><\/div>\" : \"\") +\r\n                            '<div class=\"story-meta-row\"><span class=\"story-meta-label\">Time:<\/span><span class=\"story-meta-value\">' + esc(snapTime) + \"<\/span><\/div>\" +\r\n                            '<div class=\"story-meta-row\"><span class=\"story-meta-label\">Location:<\/span><span class=\"story-meta-value\">' + esc(coords) + \"<\/span><\/div>\" +\r\n                            '<div class=\"story-meta-row\"><span class=\"story-meta-label\">Attachment:<\/span><span class=\"story-meta-value\">' + esc(hasAttach) + (attachmentUrl ? ' <a href=\"' + esc(attachmentUrl).replace(\/\"\/g, '\"') + '\" target=\"_blank\" style=\"color:#00BCD4;margin-left:5px;\"><i class=\"fa-solid fa-external-link\"><\/i><\/a>' : '') + '<\/span><\/div>' +\r\n                            (overlayUrl ? '<div class=\"story-meta-row\"><span class=\"story-meta-label\">Overlay:<\/span><span class=\"story-meta-value\"><a href=\"' + esc(overlayUrl).replace(\/\"\/g, '\"') + '\" target=\"_blank\" style=\"color:#00BCD4;\"><i class=\"fa-solid fa-external-link\"><\/i> View<\/a><\/span><\/div>' : '') +\r\n                            \"<\/div>\" +\r\n                            \"<\/div>\";\r\n                    });\r\n                } else {\r\n                    snapListHtml = '<div class=\"snap-item\"><div class=\"snap-meta\"><span class=\"story-meta-value\">No snaps listed for this story.<\/span><\/div><\/div>';\r\n                }\r\n\r\n                html += '<div class=\"story-card\" data-index=\"' + index + '\">' +\r\n                    '<div class=\"story-img-container\" data-type=\"' + (isVideo ? 'video' : 'image') + '\" data-media=\"' + esc(firstMediaUrl) + '\">' +\r\n                    (thumb ? '<img decoding=\"async\" src=\"' + esc(thumb) + '\" alt=\"' + esc(title) + '\" class=\"story-thumb\">' : '<div style=\"width:100%;height:100%;background:rgba(255,255,255,0.05);display:flex;align-items:center;justify-content:center;\"><i class=\"fa-solid fa-image\" style=\"color:rgba(255,255,255,0.3);font-size:48px;\"><\/i><\/div>') +\r\n                    (isVideo ? '<button class=\"story-always-play\" onclick=\"event.stopPropagation(); playMedia(this.closest(\\'.story-img-container\\').querySelector(\\'.story-view-btn\\'))\" title=\"Play Video\"><i class=\"fa-solid fa-play\"><\/i><\/button>' : '') +\r\n                    '<button class=\"story-always-download\" onclick=\"event.stopPropagation(); (function(idx, isVid) { var url = window.getFullMediaUrl(idx) || $(this).closest(\\'.story-img-container\\').attr(\\'data-media\\'); if (url) { window.downloadMedia(url, \\'story_\\' + idx + \\'_\\' + Date.now() + \\'.\\' + (isVid ? \\'mp4\\' : \\'jpg\\')); } }).call(this, ' + index + ', ' + (isVideo ? 'true' : 'false') + ')\" title=\"Download\"><i class=\"fa-solid fa-download\"><\/i><\/button>' +\r\n                    '<div class=\"story-overlay\">' +\r\n                    '<button class=\"story-view-btn\" onclick=\"event.stopPropagation(); playMedia(this); return false;\"><i class=\"fa-solid fa-' + (isVideo ? 'play' : 'expand') + '\"><\/i><\/button>' +\r\n                    (isVideo ? '<button class=\"story-fullscreen-btn\" style=\"display:none;\"><i class=\"fa-solid fa-expand\"><\/i><\/button>' : '') +\r\n                    '<button class=\"story-download-btn\" data-url=\"' + esc(firstMediaUrl) + '\" data-filename=\"story_' + index + '_' + Date.now() + '.' + (isVideo ? 'mp4' : 'jpg') + '\" data-type=\"' + (isVideo ? 'video' : 'image') + '\" onclick=\"event.stopPropagation(); downloadMedia(this); return false;\"><i class=\"fa-solid fa-download\"><\/i><\/button>' +\r\n                    '<\/div>' +\r\n                    '<div style=\"position:absolute;bottom:15px;left:15px;right:15px;display:flex;justify-content:space-between;align-items:flex-end;z-index:5;\">' +\r\n                    '<div class=\"story-title\">' + (emoji ? esc(emoji) + \" \" : \"\") + esc(title) + \"<\/div>\" +\r\n                    '<div class=\"story-badge\" onclick=\"event.stopPropagation(); toggleSnapList(' + index + ')\" title=\"Click to show\/hide snaps\"><i class=\"fa-solid fa-clapperboard\"><\/i><span>' + snaps.length + \" snaps<\/span><\/div>\" +\r\n                    \"<\/div>\" +\r\n                    \"<\/div>\" +\r\n                    '<div class=\"story-meta\">' +\r\n                    '<div class=\"story-meta-row\"><span class=\"story-meta-label\">Title:<\/span><span class=\"story-meta-value\">' + esc(title) + \"<\/span><\/div>\" +\r\n                    (subtitle ? '<div class=\"story-meta-row\"><span class=\"story-meta-label\">Subtitle:<\/span><span class=\"story-meta-value\">' + esc(subtitle) + \"<\/span><\/div>\" : \"\") +\r\n                    '<div class=\"story-meta-row\"><span class=\"story-meta-label\">Date:<\/span><span class=\"story-meta-value\">' + (dateText ? esc(dateText) : \"Unknown\") + \"<\/span><\/div>\" +\r\n                    \"<\/div>\" +\r\n                    '<div class=\"story-actions\">' +\r\n                    '<button class=\"story-action-btn\" data-action=\"play\" data-index=\"' + index + '\"><i class=\"fa-solid fa-' + (isVideo ? 'play' : 'expand') + '\"><\/i> ' + (isVideo ? 'Play' : 'View') + '<\/button>' +\r\n                    '<button class=\"story-action-btn\" data-action=\"download\" data-index=\"' + index + '\"><i class=\"fa-solid fa-download\"><\/i> Download<\/button>' +\r\n                    \"<\/div>\" +\r\n                    '<div class=\"snap-list collapsed\" id=\"snap-list-' + index + '\">' + snapListHtml + \"<\/div>\" +\r\n                    \"<\/div>\";\r\n            });\r\n\r\n            $('#story-content').html('<div class=\"stories-grid\">' + html + '<\/div>');\r\n        }\r\n\r\n        \/\/ Profile image expand handler\r\n        $(document).on('click', '.view-profile-img', function () {\r\n            const profileImage = $(this).siblings('.profile-image');\r\n            const imgSrc = profileImage.find('img').attr('src');\r\n            if (imgSrc) {\r\n                showMediaModal(imgSrc, 'image', 'profile_picture.jpg');\r\n            }\r\n        });\r\n\r\n        \/\/ Format number function\r\n        function formatNumber(num) {\r\n            if (!num) return '0';\r\n            const n = parseInt(num);\r\n            if (n >= 1000000) return (n \/ 1000000).toFixed(1) + 'M';\r\n            if (n >= 1000) return (n \/ 1000).toFixed(1) + 'K';\r\n            return n.toString();\r\n        }\r\n\r\n        \/\/ Function to pause all videos except the current one\r\n        function pauseAllVideosExcept(currentVideo) {\r\n            $(\"video.story-video\").each(function () {\r\n                if (this !== currentVideo) {\r\n                    try {\r\n                        if (!this.paused) {\r\n                            this.pause();\r\n                        }\r\n                        \/\/ Reset UI for paused videos\r\n                        const container = $(this).closest('.story-img-container');\r\n                        const overlay = container.find('.story-overlay');\r\n                        const viewBtn = overlay.find('.story-view-btn');\r\n                        const fullscreenBtn = overlay.find('.story-fullscreen-btn');\r\n                        const thumbnail = container.find('.story-thumb');\r\n\r\n                        $(this).hide();\r\n                        thumbnail.show();\r\n                        viewBtn.html('<i class=\"fa-solid fa-play\"><\/i>');\r\n                        fullscreenBtn.hide();\r\n                    } catch (e) {\r\n                        console.warn(\"Error pausing video:\", e);\r\n                    }\r\n                }\r\n            });\r\n        }\r\n\r\n        \/\/ Play media function (similar to Instagram)\r\n        window.playMedia = function (btn) {\r\n            const container = $(btn).closest('.story-img-container');\r\n            const mediaType = container.data('type');\r\n            const mediaUrl = container.data('media');\r\n            const overlay = container.find('.story-overlay');\r\n            const thumbnail = container.find('.story-thumb');\r\n            const viewBtn = $(btn);\r\n            const fullscreenBtn = overlay.find('.story-fullscreen-btn');\r\n\r\n            if (mediaType === 'video') {\r\n                \/\/ Check if video already exists\r\n                let video = container.find('video.story-video');\r\n                let videoElement = video.length > 0 ? video.get(0) : null;\r\n\r\n                if (!videoElement) {\r\n                    \/\/ Create video element\r\n                    video = $('<video class=\"story-video\" controls playsinline style=\"width:100%;height:100%;object-fit:cover;\"><\/video>');\r\n                    video.attr('src', mediaUrl);\r\n                    container.append(video);\r\n                    videoElement = video.get(0);\r\n                }\r\n\r\n                if (videoElement.paused) {\r\n                    \/\/ Pause all other videos first\r\n                    pauseAllVideosExcept(videoElement);\r\n\r\n                    thumbnail.hide();\r\n                    video.show();\r\n\r\n                    \/\/ Set video to start from beginning and play with a small delay\r\n                    videoElement.currentTime = 0;\r\n                    setTimeout(() => {\r\n                        videoElement.play()\r\n                            .then(() => {\r\n                                viewBtn.html('<i class=\"fa-solid fa-pause\"><\/i>');\r\n                                fullscreenBtn.show();\r\n                            })\r\n                            .catch((e) => {\r\n                                console.warn(\"Video play error:\", e);\r\n                                \/\/ Reset to play button if video fails\r\n                                viewBtn.html('<i class=\"fa-solid fa-play\"><\/i>');\r\n                                fullscreenBtn.hide();\r\n                                video.hide();\r\n                                thumbnail.show();\r\n                            });\r\n                    }, 100);\r\n                } else {\r\n                    try {\r\n                        videoElement.pause();\r\n                        viewBtn.html('<i class=\"fa-solid fa-play\"><\/i>');\r\n                        fullscreenBtn.hide();\r\n                        video.hide();\r\n                        thumbnail.show();\r\n                    } catch (e) {\r\n                        console.warn(\"Error pausing video:\", e);\r\n                    }\r\n                }\r\n            } else {\r\n                \/\/ For images, show in modal with download option\r\n                const filename = 'snapchat_image_' + Date.now() + '.jpg';\r\n                showMediaModal(mediaUrl, 'image', filename);\r\n            }\r\n        };\r\n\r\n        \/\/ Fullscreen button handler - Show media in modal with download option\r\n        $(document).on('click', '.story-fullscreen-btn', function () {\r\n            const container = $(this).closest('.story-img-container');\r\n            const mediaUrl = container.data('media');\r\n            const mediaType = container.data('type');\r\n            const video = container.find('video.story-video').get(0);\r\n            const thumbnail = container.find('.story-thumb');\r\n            const overlay = container.find('.story-overlay');\r\n            const viewBtn = overlay.find('.story-view-btn');\r\n            const fullscreenBtn = $(this);\r\n\r\n            \/\/ Pause the current video and reset the UI\r\n            if (video && !video.paused) {\r\n                video.pause();\r\n            }\r\n\r\n            \/\/ Hide video and show thumbnail\r\n            container.find('video.story-video').hide();\r\n            thumbnail.show();\r\n\r\n            \/\/ Reset buttons to initial state\r\n            viewBtn.html('<i class=\"fa-solid fa-play\"><\/i>');\r\n            fullscreenBtn.hide();\r\n\r\n            \/\/ Show video in modal with download option\r\n            const filename = 'snapchat_' + (container.closest('.story-card').find('.story-title').text() || 'media') + '_' + Date.now() + '.' + (mediaType === 'video' ? 'mp4' : 'jpg');\r\n            showMediaModal(mediaUrl, mediaType, filename);\r\n        });\r\n\r\n        \/\/ Download media function (supports both button click and direct call)\r\n        window.downloadMedia = function (btnOrUrl, urlOrFilename, filename) {\r\n            let url, downloadFilename, mediaType;\r\n\r\n            \/\/ If first argument is a button element\r\n            if (btnOrUrl && typeof btnOrUrl === 'object' && $(btnOrUrl).length > 0) {\r\n                url = $(btnOrUrl).data('url');\r\n                downloadFilename = $(btnOrUrl).data('filename');\r\n                mediaType = $(btnOrUrl).data('type') || 'image';\r\n            } else {\r\n                \/\/ Direct call with url and filename\r\n                url = btnOrUrl || urlOrFilename;\r\n                downloadFilename = urlOrFilename || filename || 'snapchat_media_' + Date.now() + '.jpg';\r\n                \/\/ Try to detect media type from filename extension\r\n                if (downloadFilename.toLowerCase().endsWith('.mp4') || downloadFilename.toLowerCase().endsWith('.mov') || downloadFilename.toLowerCase().endsWith('.webm')) {\r\n                    mediaType = 'video';\r\n                } else {\r\n                    mediaType = 'image';\r\n                }\r\n            }\r\n\r\n            \/\/ Ensure images always use .jpg extension\r\n            if (mediaType === 'image' && downloadFilename) {\r\n                \/\/ Remove any existing extension and add .jpg\r\n                downloadFilename = downloadFilename.replace(\/\\.(jpg|jpeg|png|gif|webp|bmp|svg)$\/i, '') + '.jpg';\r\n            }\r\n\r\n            if (url) {\r\n                \/\/ Use fetch to download with proper CORS handling\r\n                fetch(url)\r\n                    .then(response => response.blob())\r\n                    .then(blob => {\r\n                        const blobUrl = window.URL.createObjectURL(blob);\r\n                        const link = document.createElement('a');\r\n                        link.href = blobUrl;\r\n                        \/\/ Ensure final filename has correct extension\r\n                        if (mediaType === 'image') {\r\n                            link.download = downloadFilename || 'snapchat_media_' + Date.now() + '.jpg';\r\n                        } else {\r\n                            link.download = downloadFilename || 'snapchat_media_' + Date.now() + '.mp4';\r\n                        }\r\n                        document.body.appendChild(link);\r\n                        link.click();\r\n                        document.body.removeChild(link);\r\n                        window.URL.revokeObjectURL(blobUrl);\r\n\r\n                        \/\/ Show success message\r\n                        $(\"#error-message\").text(\"Download started!\").css(\"color\", \"green\").show();\r\n                        setTimeout(() => $(\"#error-message\").hide(), 2000);\r\n                    })\r\n                    .catch(err => {\r\n                        console.error('Download failed:', err);\r\n                        \/\/ Fallback: open in new tab\r\n                        window.open(url, '_blank');\r\n                    });\r\n            }\r\n        };\r\n\r\n        \/\/ Download function (legacy)\r\n        \/\/ Helper function to download media from URL directly\r\n        function downloadMediaFromUrl(url, filename, type) {\r\n            if (!url) return;\r\n\r\n            \/\/ Ensure images always use .jpg extension\r\n            let finalFilename = filename;\r\n            if (type === 'image' || (!type && !filename.toLowerCase().endsWith('.mp4') && !filename.toLowerCase().endsWith('.mov') && !filename.toLowerCase().endsWith('.webm'))) {\r\n                finalFilename = filename.replace(\/\\.(jpg|jpeg|png|gif|webp|bmp|svg)$\/i, '') + '.jpg';\r\n            }\r\n\r\n            const link = document.createElement('a');\r\n            link.href = url;\r\n            link.download = finalFilename;\r\n            link.target = '_blank';\r\n\r\n            \/\/ For CORS issues, open in new tab\r\n            if (url.startsWith('http')) {\r\n                window.open(url, '_blank');\r\n            } else {\r\n                document.body.appendChild(link);\r\n                link.click();\r\n                document.body.removeChild(link);\r\n            }\r\n        }\r\n\r\n        function downloadMedia(url, filename) {\r\n            \/\/ Ensure images always use .jpg extension\r\n            let finalFilename = filename;\r\n            if (!filename.toLowerCase().endsWith('.mp4') && !filename.toLowerCase().endsWith('.mov') && !filename.toLowerCase().endsWith('.webm')) {\r\n                finalFilename = filename.replace(\/\\.(jpg|jpeg|png|gif|webp|bmp|svg)$\/i, '') + '.jpg';\r\n            }\r\n\r\n            fetch(url)\r\n                .then(response => response.blob())\r\n                .then(blob => {\r\n                    const blobUrl = window.URL.createObjectURL(blob);\r\n                    const link = document.createElement('a');\r\n                    link.href = blobUrl;\r\n                    link.download = finalFilename;\r\n                    document.body.appendChild(link);\r\n                    link.click();\r\n                    document.body.removeChild(link);\r\n                    window.URL.revokeObjectURL(blobUrl);\r\n                })\r\n                .catch(err => {\r\n                    console.error('Download failed:', err);\r\n                    window.open(url, '_blank');\r\n                });\r\n        }\r\n\r\n        \/\/ Modal functions - Legacy (for backward compatibility)\r\n        \/\/ Note: This now uses the new dynamic modal system\r\n        window.showModal = function (mediaUrl, mediaType, filename) {\r\n            showMediaModal(mediaUrl, mediaType, filename);\r\n        };\r\n\r\n        \/\/ Ensure old modal is hidden on page load\r\n        $(document).ready(function () {\r\n            $(\"#sc-modal\").hide();\r\n        });\r\n\r\n        \/\/ Show media in modal with download option (similar to Instagram)\r\n        window.showMediaModal = function (mediaUrl, mediaType, filename) {\r\n            \/\/ Close existing modal if any\r\n            $('.sc-media-modal').remove();\r\n\r\n            const modal = $('<div class=\"sc-media-modal profile-img-modal\">');\r\n            const backdrop = $('<div class=\"sc-modal-backdrop\">');\r\n            const content = $('<div class=\"sc-modal-content\">');\r\n            const actions = $('<div class=\"sc-modal-actions\">');\r\n            const downloadBtn = $('<button class=\"sc-modal-download-btn\">');\r\n            const closeBtn = $('<button class=\"sc-close-modal\">');\r\n\r\n            \/\/ Create media element based on type\r\n            let mediaElement;\r\n            if (mediaType === 'video') {\r\n                mediaElement = $('<video class=\"sc-modal-media\" controls autoplay playsinline style=\"max-width: 90vw; max-height: 70vh; object-fit: contain;\" \/>');\r\n                mediaElement.attr('src', mediaUrl);\r\n            } else {\r\n                mediaElement = $('<img class=\"sc-modal-media modal-img\" referrerpolicy=\"no-referrer\" alt=\"Media\" style=\"max-width: 90vw; max-height: 70vh; object-fit: contain;\" \/>');\r\n                mediaElement.attr('src', mediaUrl);\r\n            }\r\n\r\n            \/\/ Download button\r\n            downloadBtn.html('<i class=\"fa-solid fa-download\"><\/i> Download');\r\n            downloadBtn.on('click', function () {\r\n                let downloadFilename = filename || 'snapchat_media_' + Date.now();\r\n                \/\/ Ensure images always use .jpg extension, videos use .mp4\r\n                if (mediaType === 'video') {\r\n                    downloadFilename = downloadFilename.replace(\/\\.(mp4|mov|webm|avi)$\/i, '') + '.mp4';\r\n                } else {\r\n                    \/\/ It's an image, ensure .jpg extension\r\n                    downloadFilename = downloadFilename.replace(\/\\.(jpg|jpeg|png|gif|webp|bmp|svg)$\/i, '') + '.jpg';\r\n                }\r\n                window.downloadMedia(mediaUrl, downloadFilename);\r\n            });\r\n\r\n            \/\/ Close button\r\n            closeBtn.html('<i class=\"fa-solid fa-xmark\"><\/i>');\r\n\r\n            \/\/ Assemble modal\r\n            actions.append(downloadBtn);\r\n            content.append(mediaElement, actions, closeBtn);\r\n            modal.append(backdrop, content);\r\n\r\n            \/\/ Add modal to body\r\n            $('body').append(modal);\r\n\r\n            \/\/ Show modal with animation\r\n            setTimeout(function () {\r\n                modal.addClass('active');\r\n                $('body').addClass('sc-modal-open');\r\n            }, 10);\r\n\r\n            \/\/ Close modal when clicking close button or backdrop\r\n            closeBtn.on('click', function () {\r\n                modal.removeClass('active');\r\n                setTimeout(function () {\r\n                    modal.remove();\r\n                    $('body').removeClass('sc-modal-open');\r\n                }, 300);\r\n            });\r\n\r\n            backdrop.on('click', function () {\r\n                modal.removeClass('active');\r\n                setTimeout(function () {\r\n                    modal.remove();\r\n                    $('body').removeClass('sc-modal-open');\r\n                }, 300);\r\n            });\r\n\r\n            \/\/ Close on Escape key\r\n            $(document).on('keydown.scmodal', function (e) {\r\n                if (e.key === 'Escape' && modal.hasClass('active')) {\r\n                    modal.removeClass('active');\r\n                    setTimeout(function () {\r\n                        modal.remove();\r\n                        $('body').removeClass('sc-modal-open');\r\n                        $(document).off('keydown.scmodal');\r\n                    }, 300);\r\n                }\r\n            });\r\n        };\r\n\r\n        window.closeModal = function () {\r\n            \/\/ Close legacy modal\r\n            $(\"#sc-modal\").css('display', 'none');\r\n            $(\"#modal-media\").empty();\r\n            currentMediaUrl = '';\r\n            currentFilename = '';\r\n\r\n            \/\/ Also close any dynamically created modals\r\n            $('.sc-media-modal').removeClass('active');\r\n            setTimeout(function () {\r\n                $('.sc-media-modal').remove();\r\n                $('body').removeClass('sc-modal-open');\r\n            }, 300);\r\n        };\r\n\r\n        \/\/ Download button in modal\r\n        $(\"#modal-download-btn\").on(\"click\", function () {\r\n            if (currentMediaUrl) {\r\n                let filename = currentFilename || 'snapchat_media_' + Date.now() + '.jpg';\r\n                \/\/ Ensure images always use .jpg extension\r\n                if (!filename.toLowerCase().endsWith('.mp4') && !filename.toLowerCase().endsWith('.mov') && !filename.toLowerCase().endsWith('.webm')) {\r\n                    \/\/ It's an image, ensure .jpg extension\r\n                    filename = filename.replace(\/\\.(jpg|jpeg|png|gif|webp|bmp|svg)$\/i, '') + '.jpg';\r\n                }\r\n                window.downloadMedia(currentMediaUrl, filename);\r\n            }\r\n        });\r\n\r\n        \/\/ Close modal on backdrop click\r\n        $(\"#sc-modal\").on(\"click\", function (e) {\r\n            if (e.target === this) {\r\n                closeModal();\r\n            }\r\n        });\r\n\r\n        \/\/ Show Comments Modal Function\r\n        window.showCommentsModal = function (index, type) {\r\n            let commentData = null;\r\n            if (type === 'spotlight') {\r\n                commentData = window.spotlightCommentsData[index];\r\n            } else if (type === 'highlight') {\r\n                commentData = window.highlightCommentsData[index];\r\n            }\r\n\r\n            if (!commentData || !commentData.comments || commentData.comments.length === 0) {\r\n                alert('No comments available for this ' + type);\r\n                return;\r\n            }\r\n\r\n            const modal = $('#sc-comment-modal');\r\n            const title = $('#comment-modal-title');\r\n            const body = $('#comment-modal-body');\r\n\r\n            title.text(commentData.title + ' - Comments (' + commentData.comments.length + ')');\r\n            body.empty();\r\n\r\n            \/\/ Display comments\r\n            commentData.comments.forEach((comment, idx) => {\r\n                const commentText = comment.replyText || '';\r\n                const commenterName = comment.replyPosterDisplayName || 'Anonymous';\r\n                const commentTime = comment.replyTimestampMs ? new Date(parseInt(comment.replyTimestampMs)).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric', hour: '2-digit', minute: '2-digit' }) : '';\r\n                const reactCount = comment.reactCounts && comment.reactCounts.length > 0 ? comment.reactCounts[0].reactCount : '0';\r\n                const threadCount = comment.threadedReplyCount || '0';\r\n\r\n                if (commentText) {\r\n                    const commentHTML = '<div class=\"sc-comment-item\">' +\r\n                        '<div class=\"sc-comment-header\">' +\r\n                        '<span class=\"sc-comment-author\">' + commenterName + '<\/span>' +\r\n                        (commentTime ? '<span class=\"sc-comment-time\">' + commentTime + '<\/span>' : '') +\r\n                        '<\/div>' +\r\n                        '<div class=\"sc-comment-text\">' + commentText + '<\/div>' +\r\n                        '<div class=\"sc-comment-stats\">' +\r\n                        (parseInt(reactCount) > 0 ? '<span><i class=\"fa-solid fa-heart\" style=\"color: #FF6B00;\"><\/i> ' + reactCount + '<\/span>' : '') +\r\n                        (parseInt(threadCount) > 0 ? '<span><i class=\"fa-solid fa-reply\"><\/i> ' + threadCount + ' replies<\/span>' : '') +\r\n                        '<\/div>' +\r\n                        '<\/div>';\r\n                    body.append(commentHTML);\r\n                }\r\n            });\r\n\r\n            \/\/ Show modal\r\n            modal.addClass('active');\r\n            $('body').addClass('sc-modal-open');\r\n        };\r\n\r\n        \/\/ Close Comments Modal Function\r\n        window.closeCommentsModal = function () {\r\n            $('#sc-comment-modal').removeClass('active');\r\n            $('body').removeClass('sc-modal-open');\r\n        };\r\n\r\n        \/\/ Close comment modal on backdrop click\r\n        $('#sc-comment-modal').on('click', function (e) {\r\n            if ($(e.target).hasClass('sc-comment-modal')) {\r\n                closeCommentsModal();\r\n            }\r\n        });\r\n\r\n        \/\/ Close comment modal on Escape key\r\n        $(document).on('keydown', function (e) {\r\n            if (e.key === 'Escape' && $('#sc-comment-modal').hasClass('active')) {\r\n                closeCommentsModal();\r\n            }\r\n        });\r\n\r\n    })(jQuery);\r\n\r\n<\/script>\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n<style>\r\n*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\r\n\r\n.sv{\r\n  --grad:      linear-gradient(135deg,#F5C518,#FF5E2E);\r\n  --grad-soft: linear-gradient(135deg,#FFF7D6,#FFE5C0);\r\n  --grad-text: linear-gradient(135deg,#C98A00,#D93D0A);\r\n  --ink:   #17171A;\r\n  --body:  #52525E;\r\n  --border:#E8E8F0;\r\n  --wh:    #FFFFFF;\r\n  --ow:    #F7F8FA;\r\n  --r:     9px;\r\n  --ease:  cubic-bezier(.4,0,.2,1);\r\n  --spring:cubic-bezier(.34,1.56,.64,1);\r\n  font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",\"Helvetica Neue\",Arial,sans-serif;\r\n  -webkit-font-smoothing:antialiased;\r\n  color:var(--ink);\r\n}\r\n\r\n.sv-sec  {width:100%;padding:110px 32px}\r\n.sv-bg-wh{background:var(--wh)}\r\n.sv-bg-ow{background:var(--ow)}\r\n.sv-inner{max-width:1200px;margin:0 auto}\r\n\r\n.sv-hd{text-align:center;margin-bottom:72px}\r\n.sv-hd h2{\r\n  font-size:clamp(1.6rem,2.6vw,2.5rem);\r\n  font-weight:800;letter-spacing:-.04em;\r\n  line-height:1.15;white-space:nowrap;margin-bottom:18px;\r\n}\r\n.sv-hd p{font-size:clamp(.9rem,1.1vw,1.0625rem);color:var(--body);max-width:540px;margin:0 auto;line-height:1.75}\r\n.sv-gx{\r\n  background:var(--grad-text);\r\n  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;\r\n}\r\n\r\n.sv-g4{display:grid;grid-template-columns:repeat(4,1fr);gap:26px}\r\n.sv-g3{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}\r\n\r\n.sv-ico{\r\n  width:68px;height:68px;min-width:68px;border-radius:var(--r);\r\n  background:var(--grad-soft);\r\n  display:flex;align-items:center;justify-content:center;\r\n  transition:background .3s var(--ease),transform .3s var(--spring);\r\n}\r\n.sv-ico svg{\r\n  width:30px;height:30px;stroke:#A55C00;stroke-width:1.55;\r\n  stroke-linecap:round;stroke-linejoin:round;fill:none;\r\n  transition:stroke .3s var(--ease);\r\n}\r\n\r\n\/* Card A *\/\r\n.sv-ca{\r\n  background:var(--wh);border-radius:var(--r);\r\n  padding:42px 32px 38px;border:1px solid var(--border);\r\n  position:relative;overflow:hidden;\r\n  opacity:0;transform:translateY(18px);\r\n  transition:opacity .44s var(--ease),transform .36s var(--ease),\r\n    box-shadow .3s var(--ease),border-color .3s var(--ease);\r\n}\r\n.sv-ca .sv-ico{margin-bottom:26px}\r\n.sv-ca::before{\r\n  content:'';position:absolute;top:0;left:0;right:0;height:2px;\r\n  background:var(--grad);opacity:0;transition:opacity .28s var(--ease);\r\n}\r\n.sv-ca.sv-on{opacity:1;transform:translateY(0)}\r\n.sv-ca.sv-on:hover{transform:translateY(-6px);box-shadow:0 20px 50px rgba(160,80,0,.09);border-color:transparent}\r\n.sv-ca.sv-on:hover::before{opacity:1}\r\n.sv-ca.sv-on:hover .sv-ico{background:var(--grad);transform:scale(1.1) rotate(-4deg)}\r\n.sv-ca.sv-on:hover .sv-ico svg{stroke:#fff}\r\n\r\n\/* Card B *\/\r\n.sv-cb{\r\n  background:var(--wh);border-radius:var(--r);\r\n  padding:60px 32px 56px;border:1px solid var(--border);\r\n  display:flex;flex-direction:column;align-items:center;text-align:center;\r\n  position:relative;overflow:hidden;\r\n  opacity:0;transform:translateY(18px);\r\n  transition:opacity .44s var(--ease),transform .36s var(--ease),\r\n    box-shadow .3s var(--ease),border-color .3s var(--ease);\r\n}\r\n.sv-cb::before{\r\n  content:'';position:absolute;top:0;left:0;right:0;height:2px;\r\n  background:var(--grad);opacity:0;transition:opacity .28s var(--ease);\r\n}\r\n.sv-cb .sv-ico{margin-bottom:26px}\r\n.sv-cb-body{width:100%}\r\n.sv-cb.sv-on{opacity:1;transform:translateY(0)}\r\n.sv-cb.sv-on:hover{transform:translateY(-5px);box-shadow:0 18px 44px rgba(160,80,0,.08);border-color:transparent}\r\n.sv-cb.sv-on:hover::before{opacity:1}\r\n.sv-cb.sv-on:hover .sv-ico{background:var(--grad);transform:scale(1.1)}\r\n.sv-cb.sv-on:hover .sv-ico svg{stroke:#fff}\r\n\r\n.sv-ca h3,.sv-cb h3{font-size:1.1rem;font-weight:700;color:var(--ink);margin-bottom:12px;line-height:1.3}\r\n.sv-ca p,.sv-cb p{font-size:.9375rem;color:var(--body);line-height:1.75;margin:0}\r\n\r\n@media(max-width:1100px){\r\n  .sv-g4,.sv-g3{grid-template-columns:repeat(2,1fr)}\r\n  .sv-hd h2{white-space:normal;font-size:1.9rem}\r\n}\r\n@media(max-width:640px){\r\n  .sv-sec{padding:56px 16px}\r\n  .sv-hd{margin-bottom:36px}\r\n  .sv-hd h2{font-size:1.25rem}\r\n  .sv-hd p{font-size:.875rem}\r\n  .sv-g4,.sv-g3{grid-template-columns:repeat(2,1fr);gap:12px}\r\n  .sv-ca{padding:22px 16px 20px}\r\n  .sv-ca .sv-ico{width:44px;height:44px;min-width:44px;margin-bottom:14px}\r\n  .sv-cb{padding:28px 16px 24px}\r\n  .sv-cb .sv-ico{width:44px;height:44px;min-width:44px;margin-bottom:14px}\r\n  .sv-ico svg{width:20px;height:20px}\r\n  .sv-ca h3,.sv-cb h3{font-size:.875rem;margin-bottom:7px}\r\n  .sv-ca p,.sv-cb p{font-size:.8rem}\r\n}\r\n@media(scripting:none){.sv-ca,.sv-cb{opacity:1!important;transform:none!important}}\r\n<\/style>\r\n\r\n<div class=\"sv\">\r\n\r\n<!-- Section 1 \u00b7 White \u00b7 8 cards \u00b7 4-col -->\r\n\t\r\n\t<section class=\"sv-sec sv-bg-wh\" aria-labelledby=\"sv-h1\">\r\n  \t<div class=\"sv-inner\">\r\n\t\t\t\t\r\n\t\t<\/div>\r\n\t<\/section>\r\n\t\r\n\t\r\n<section class=\"sv-sec sv-bg-wh\" aria-labelledby=\"sv-h1\">\r\n  <div class=\"sv-inner\">\r\n    <div class=\"sv-hd\">\r\n      <h2 id=\"sv-h1\">How <span class=\"sv-gx\">Snapchat Viewer<\/span> Works<\/h2>\r\n      <p>Browse any public Snapchat profile anonymously. No account, no login, no trace left behind.<\/p>\r\n    <\/div>\r\n    <div class=\"sv-g4\" data-sv-grid>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\"\/><\/svg><\/div>\r\n        <h3>Enter Any Username<\/h3>\r\n        <p>Type a public Snapchat username to instantly fetch their profile, stories, and saved highlights.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><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><\/div>\r\n        <h3>Browse Freely<\/h3>\r\n        <p>View public stories, highlights, and spotlight content from any profile without restrictions.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"\/><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"\/><\/svg><\/div>\r\n        <h3>Stay Fully Anonymous<\/h3>\r\n        <p>Profile owners receive zero notification. Your identity stays completely invisible every visit.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><\/div>\r\n        <h3>No Login Required<\/h3>\r\n        <p>Access all public Snapchat content without signing in, registering, or sharing any credentials.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"\/><\/svg><\/div>\r\n        <h3>Instant Load<\/h3>\r\n        <p>Content appears in seconds. Our optimized pipeline fetches every profile at maximum speed.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><rect x=\"5\" y=\"2\" width=\"14\" height=\"20\" rx=\"2\"\/><line x1=\"12\" y1=\"18\" x2=\"12.01\" y2=\"18\"\/><\/svg><\/div>\r\n        <h3>Mobile Optimized<\/h3>\r\n        <p>Fully responsive across all phones, tablets, and desktops with a smooth native-like experience.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><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><\/div>\r\n        <h3>Download Content<\/h3>\r\n        <p>Save snaps, highlights, and reels directly to your device in their full original quality.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><polyline points=\"23 4 23 10 17 10\"\/><polyline points=\"1 20 1 14 7 14\"\/><path d=\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\"\/><\/svg><\/div>\r\n        <h3>Real-Time Updates<\/h3>\r\n        <p>Live sync fetches the latest content the moment it is posted. Always fresh, always current.<\/p>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- Section 2 \u00b7 Off-white \u00b7 6 cards \u00b7 3-col -->\r\n<section class=\"sv-sec sv-bg-ow\" aria-labelledby=\"sv-h2\">\r\n  <div class=\"sv-inner\">\r\n    <div class=\"sv-hd\">\r\n      <h2 id=\"sv-h2\">How <span class=\"sv-gx\">Snapchat Viewer<\/span> Privacy Works<\/h2>\r\n      <p>Built with anonymity at its core. No logs, no footprint, no way to detect your visit.<\/p>\r\n    <\/div>\r\n    <div class=\"sv-g3\" data-sv-grid>\r\n\r\n      <div class=\"sv-cb\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\/><polyline points=\"9 12 11 14 15 10\"\/><\/svg><\/div>\r\n        <div class=\"sv-cb-body\">\r\n          <h3>Zero Activity Tracking<\/h3>\r\n          <p>We never record, log, or analyze your search queries, viewing history, or browsing behavior on this platform.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"sv-cb\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><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=\"18\" y1=\"8\" x2=\"23\" y2=\"13\"\/><line x1=\"23\" y1=\"8\" x2=\"18\" y2=\"13\"\/><\/svg><\/div>\r\n        <div class=\"sv-cb-body\">\r\n          <h3>No Account Needed<\/h3>\r\n          <p>Browse all public content completely freely. No registration, no subscription, and no personal data required.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"sv-cb\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><rect x=\"3\" y=\"11\" width=\"18\" height=\"11\" rx=\"2\"\/><path d=\"M7 11V7a5 5 0 0 1 10 0v4\"\/><\/svg><\/div>\r\n        <div class=\"sv-cb-body\">\r\n          <h3>Encrypted Connection<\/h3>\r\n          <p>All data in transit is secured with HTTPS and TLS encryption to keep every single session fully protected.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"sv-cb\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><ellipse cx=\"12\" cy=\"5\" rx=\"9\" ry=\"3\"\/><path d=\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\"\/><path d=\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\"\/><\/svg><\/div>\r\n        <div class=\"sv-cb-body\">\r\n          <h3>No Data Stored<\/h3>\r\n          <p>All searches run in memory only. Nothing is ever written to our servers, databases, or any external storage.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"sv-cb\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><path d=\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\"\/><line x1=\"1\" y1=\"1\" x2=\"23\" y2=\"23\"\/><\/svg><\/div>\r\n        <div class=\"sv-cb-body\">\r\n          <h3>Ghost Mode Viewing<\/h3>\r\n          <p>Profile owners cannot detect your visit at all. You stay completely invisible to every account you view.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"sv-cb\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><path d=\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\"\/><line x1=\"7\" y1=\"7\" x2=\"7.01\" y2=\"7\"\/><\/svg><\/div>\r\n        <div class=\"sv-cb-body\">\r\n          <h3>Always 100% Free<\/h3>\r\n          <p>Every privacy feature is permanently free. No subscription, no paywall, and absolutely no hidden costs ever.<\/p>\r\n        <\/div>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<!-- Section 3 \u00b7 White \u00b7 8 cards \u00b7 4-col -->\r\n<section class=\"sv-sec sv-bg-wh\" aria-labelledby=\"sv-h3\">\r\n  <div class=\"sv-inner\">\r\n    <div class=\"sv-hd\">\r\n      <h2 id=\"sv-h3\">How <span class=\"sv-gx\">Snapchat Viewer<\/span> Features Work<\/h2>\r\n      <p>From spotlights to snap maps. Every tool built for seamless, private Snapchat exploration.<\/p>\r\n    <\/div>\r\n    <div class=\"sv-g4\" data-sv-grid>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><polygon points=\"10 8 16 12 10 16 10 8\"\/><\/svg><\/div>\r\n        <h3>Public Viewer<\/h3>\r\n        <p>Watch any public Snapchat content anonymously. No login required, no notification sent.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><path d=\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\"\/><circle cx=\"12\" cy=\"7\" r=\"4\"\/><\/svg><\/div>\r\n        <h3>Profile Explorer<\/h3>\r\n        <p>View Snapchat bios, profile details, and public info without following or adding the user.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><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><\/div>\r\n        <h3>Highlights Viewer<\/h3>\r\n        <p>Access saved highlights from any public profile. Browse every pinned collection completely freely.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><polyline points=\"23 6 13.5 15.5 8.5 10.5 1 18\"\/><polyline points=\"17 6 23 6 23 12\"\/><\/svg><\/div>\r\n        <h3>Spotlight Browser<\/h3>\r\n        <p>Explore trending Spotlight content and discover viral creator snaps from around the world.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><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><\/div>\r\n        <h3>Content Downloader<\/h3>\r\n        <p>Save snaps, full sequences, and highlight reels to your device in original quality.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><polygon points=\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\"\/><line x1=\"8\" y1=\"2\" x2=\"8\" y2=\"18\"\/><line x1=\"16\" y1=\"6\" x2=\"16\" y2=\"22\"\/><\/svg><\/div>\r\n        <h3>Snap Map Viewer<\/h3>\r\n        <p>Browse location-tagged public snaps pinned on the Snap Map from cities worldwide.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><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><\/div>\r\n        <h3>Group Content Access<\/h3>\r\n        <p>View public group content and community collections without joining or requesting access.<\/p>\r\n      <\/div>\r\n\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><polyline points=\"21 8 21 21 3 21 3 8\"\/><rect x=\"1\" y=\"3\" width=\"22\" height=\"5\"\/><line x1=\"10\" y1=\"12\" x2=\"14\" y2=\"12\"\/><\/svg><\/div>\r\n        <h3>Content Archive<\/h3>\r\n        <p>Browse archived content and older snaps saved to profiles before they expire permanently.<\/p>\r\n      <\/div>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<\/div>\r\n\r\n<noscript><style>.sv-ca,.sv-cb{opacity:1!important;transform:none!important}<\/style><\/noscript>\r\n\r\n<script defer>\r\n(function(){\r\n  var io=new IntersectionObserver(function(e){\r\n    e.forEach(function(n){\r\n      if(!n.isIntersecting)return;\r\n      n.target.querySelectorAll('.sv-ca,.sv-cb').forEach(function(c,i){\r\n        setTimeout(function(){c.classList.add('sv-on')},i*65);\r\n      });\r\n      io.unobserve(n.target);\r\n    });\r\n  },{threshold:.06,rootMargin:'0px 0px -40px 0px'});\r\n  document.querySelectorAll('[data-sv-grid]').forEach(function(g){io.observe(g)});\r\n  document.querySelectorAll('.sv-ca,.sv-cb').forEach(function(c){\r\n    c.setAttribute('tabindex','0');c.setAttribute('role','article');\r\n  });\r\n})();\r\n<\/script><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":4,"featured_media":0,"parent":5600,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-homepage.php","meta":{"footnotes":""},"class_list":["post-5594","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ary-themes.com\/wp-json\/wp\/v2\/pages\/5594","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ary-themes.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ary-themes.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ary-themes.com\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/ary-themes.com\/wp-json\/wp\/v2\/comments?post=5594"}],"version-history":[{"count":4,"href":"https:\/\/ary-themes.com\/wp-json\/wp\/v2\/pages\/5594\/revisions"}],"predecessor-version":[{"id":5598,"href":"https:\/\/ary-themes.com\/wp-json\/wp\/v2\/pages\/5594\/revisions\/5598"}],"up":[{"embeddable":true,"href":"https:\/\/ary-themes.com\/wp-json\/wp\/v2\/pages\/5600"}],"wp:attachment":[{"href":"https:\/\/ary-themes.com\/wp-json\/wp\/v2\/media?parent=5594"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}