{"id":5612,"date":"2026-02-20T00:00:11","date_gmt":"2026-02-20T00:00:11","guid":{"rendered":"https:\/\/ary-themes.com\/?page_id=5612"},"modified":"2026-03-04T08:59:38","modified_gmt":"2026-03-04T08:59:38","slug":"snapchat-web","status":"publish","type":"page","link":"https:\/\/ary-themes.com\/tools\/social-viewer\/snapchat-web\/","title":{"rendered":"Snapchat Web Viewer \u2013 Browse Snaps Online"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"5612\" class=\"elementor elementor-5612\">\n\t\t\t\t<div class=\"elementor-element elementor-element-77ae4cd4 e-con-full e-flex e-con e-parent\" data-id=\"77ae4cd4\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4fd48bd7 elementor-widget elementor-widget-shortcode\" data-id=\"4fd48bd7\" 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: Main Gradient Background using present background colors *\/\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% { background-position: 0% 50%; }\r\n        50% { background-position: 100% 50%; }\r\n        100% { background-position: 0% 50%; }\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        \/* 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        backdrop-filter: blur(12px);\r\n        color: #333;\r\n        text-align: center;\r\n        \/* Minimal Drop Shadow *\/\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        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    \/* Header Styles *\/\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    .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        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        border-color: #F2A14B;\r\n        background: #fff;\r\n        \/* Glow Interaction on Focus *\/\r\n        box-shadow: 0 0 15px rgba(242, 161, 75, 0.3);\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 ease;\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        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        \/* Hover Effect & Glow *\/\r\n        transform: translateY(-3px);\r\n        box-shadow: 0 10px 25px rgba(242, 161, 75, 0.5);\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        \/* 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 { opacity: 0; transform: translateY(20px); }\r\n        to { opacity: 1; transform: translateY(0); }\r\n    }\r\n\r\n    \/* Skeleton Loaders *\/\r\n    @keyframes shimmer {\r\n        0% { background-position: -1000px 0; }\r\n        100% { background-position: 1000px 0; }\r\n    }\r\n\r\n    .sc-anonymous-viewer .skeleton-profile-header {\r\n        display: flex; gap: 30px; padding: 30px;\r\n        background: #f5f5f5; border-radius: 16px; margin-bottom: 20px; border: 1px solid #eee;\r\n    }\r\n    .sc-anonymous-viewer .skeleton-avatar {\r\n        width: 150px; height: 150px; border-radius: 50%;\r\n        background: linear-gradient(90deg, #e0e0e0 25%, #f0f0f0 50%, #e0e0e0 75%);\r\n        background-size: 1000px 100%; animation: shimmer 2s infinite linear; flex-shrink: 0; border: 4px solid #fff;\r\n    }\r\n    .sc-anonymous-viewer .skeleton-profile-info { flex: 1; display: flex; flex-direction: column; gap: 15px; }\r\n    .sc-anonymous-viewer .skeleton-username, .sc-anonymous-viewer .skeleton-fullname, .sc-anonymous-viewer .skeleton-stat, .sc-anonymous-viewer .skeleton-bio, .sc-anonymous-viewer .skeleton-tab, .sc-anonymous-viewer .skeleton-content-img {\r\n        background: linear-gradient(90deg, #e0e0e0 25%, #f0f0f0 50%, #e0e0e0 75%);\r\n        background-size: 1000px 100%; animation: shimmer 2s infinite linear; border-radius: 6px;\r\n    }\r\n    .sc-anonymous-viewer .skeleton-username { height: 28px; width: 180px; }\r\n    .sc-anonymous-viewer .skeleton-fullname { height: 20px; width: 140px; }\r\n    .sc-anonymous-viewer .skeleton-stats { display: flex; gap: 25px; margin-top: 10px; }\r\n    .sc-anonymous-viewer .skeleton-stat { height: 40px; width: 60px; }\r\n    .sc-anonymous-viewer .skeleton-bio { height: 60px; width: 100%; margin-top: 15px; }\r\n    .sc-anonymous-viewer .skeleton-tabs { display: flex; justify-content: center; gap: 15px; margin-bottom: 30px; }\r\n    .sc-anonymous-viewer .skeleton-tab { height: 40px; width: 100px; border-radius: 50px; }\r\n    .sc-anonymous-viewer .skeleton-content-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 20px; }\r\n    .sc-anonymous-viewer .skeleton-content-item { border-radius: 16px; overflow: hidden; background: #f5f5f5; aspect-ratio: 9 \/ 16; }\r\n    .sc-anonymous-viewer .skeleton-content-img { width: 100%; height: 100%; }\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        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        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; height: 150px; border-radius: 50%; object-fit: cover;\r\n        border: 4px solid #fff; box-shadow: 0 10px 25px rgba(242, 161, 75, 0.2);\r\n        background: linear-gradient(to bottom right, #F2A14B, #e08e35);\r\n        padding: 3px; min-height: 150px; min-width: 150px;\r\n        display: flex; align-items: center; justify-content: center;\r\n        color: #fff; font-size: 60px;\r\n    }\r\n\r\n    .sc-anonymous-viewer .view-profile-img {\r\n        position: absolute; bottom: 5px; right: 5px;\r\n        background-color: #F2A14B; color: white;\r\n        border: none; border-radius: 50%;\r\n        width: 36px; height: 36px;\r\n        display: flex; justify-content: center; align-items: center;\r\n        cursor: pointer; transition: all 0.3s;\r\n        box-shadow: 0 5px 15px rgba(242, 161, 75, 0.4); z-index: 5;\r\n    }\r\n\r\n    .sc-anonymous-viewer .profile-info { flex: 1; text-align: left; min-width: 250px; }\r\n    .sc-anonymous-viewer .profile-info h3 { font-size: 24px; margin: 0 0 5px; font-weight: 700; color: #F2A14B; }\r\n    .sc-anonymous-viewer .profile-info h4 { font-size: 18px; margin: 0 0 15px; font-weight: 600; color: #666; }\r\n    \r\n    .sc-anonymous-viewer .stats { display: flex; gap: 25px; margin: 15px 0; }\r\n    .sc-anonymous-viewer .stat-item { display: flex; flex-direction: column; align-items: center; }\r\n    .sc-anonymous-viewer .stat-value { font-size: 20px; font-weight: 700; color: #333; }\r\n    .sc-anonymous-viewer .stat-label { font-size: 14px; color: #777; margin-top: 3px; }\r\n    \r\n    .sc-anonymous-viewer .profile-bio { margin-top: 25px; padding-top: 20px; border-top: 1px solid #eee; text-align: left; color: #444; line-height: 1.6; }\r\n    .sc-anonymous-viewer .profile-link { display: inline-flex; align-items: center; gap: 5px; color: #F2A14B; text-decoration: none; font-weight: 500; margin-top: 10px; }\r\n\r\n    \/* Tabs *\/\r\n    .sc-anonymous-viewer .sc-tabs { display: flex; justify-content: center; margin: 30px 0; gap: 15px; flex-wrap: wrap; }\r\n    .sc-anonymous-viewer .sc-tabs button {\r\n        background: #f0f0f0; color: #555; border: none; font-weight: 600; font-size: 15px;\r\n        padding: 12px 24px; cursor: pointer; border-radius: 50px;\r\n        transition: all 0.3s; display: flex; align-items: center; gap: 8px;\r\n        box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05); border: 1px solid transparent;\r\n    }\r\n    .sc-anonymous-viewer .sc-tabs button.active {\r\n        background: linear-gradient(135deg, #F2A14B, #e08e35); color: white;\r\n        box-shadow: 0 5px 15px rgba(242, 161, 75, 0.3); transform: translateY(-2px); border: none;\r\n    }\r\n    .sc-anonymous-viewer .tab-content { padding: 20px; text-align: center; color: #555; display: none; }\r\n    .sc-anonymous-viewer .tab-content.active { display: block; }\r\n\r\n    .sc-anonymous-viewer .no-result {\r\n        border: 2px dashed #ccc; padding: 30px 20px; margin-top: 30px;\r\n        text-align: center; font-size: 16px; font-weight: 500;\r\n        border-radius: 12px; color: #777; background: #fafafa;\r\n    }\r\n    .sc-anonymous-viewer .no-result i { font-size: 48px; color: #ddd; margin-bottom: 15px; display: block; }\r\n\r\n    \/* Stories Grid *\/\r\n    .sc-anonymous-viewer .stories-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 25px; margin-top: 30px; padding: 20px 0; }\r\n    .sc-anonymous-viewer .story-card { border-radius: 16px; overflow: hidden; background: #fff; box-shadow: 0 5px 20px rgba(0, 0, 0, 0.05); transition: all 0.3s; border: 1px solid #eee; animation: slideUp 0.5s ease-out; animation-fill-mode: both; }\r\n    @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }\r\n    .sc-anonymous-viewer .story-img-container { position: relative; overflow: hidden; aspect-ratio: 9 \/ 16; }\r\n    .sc-anonymous-viewer .story-thumb { width: 100%; height: 100%; object-fit: cover; display: block; }\r\n    .sc-anonymous-viewer .story-overlay { position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient(to bottom, rgba(0, 0, 0, 0) 50%, rgba(0, 0, 0, 0.5) 100%); display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity 0.3s ease; pointer-events: none; }\r\n    .sc-anonymous-viewer .story-overlay button { pointer-events: auto; }\r\n    .sc-anonymous-viewer .story-img-container:hover .story-overlay { opacity: 1; }\r\n    \r\n    .sc-anonymous-viewer .story-view-btn, .sc-anonymous-viewer .story-download-btn, .sc-anonymous-viewer .story-comment-btn {\r\n        background: rgba(255, 255, 255, 0.95); color: #F2A14B; width: 45px; height: 45px;\r\n        border-radius: 50%; display: flex; align-items: center; justify-content: center;\r\n        cursor: pointer; transition: all 0.3s; border: none; font-size: 16px;\r\n        margin: 0 5px; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);\r\n    }\r\n\r\n    \/* Comment Modal *\/\r\n    .sc-comment-modal { position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 10000; display: none; align-items: center; justify-content: center; background: rgba(0, 0, 0, 0.8); }\r\n    .sc-comment-modal.active { display: flex; }\r\n    .sc-comment-modal-content { background: white; border-radius: 20px; width: 90%; max-width: 600px; max-height: 80vh; display: flex; flex-direction: column; box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); }\r\n    .sc-comment-modal-header { padding: 20px; border-bottom: 2px solid #eee; display: flex; justify-content: space-between; align-items: center; }\r\n    .sc-comment-modal-header h3 { margin: 0; color: #333; font-size: 20px; font-weight: 700; }\r\n    .sc-comment-modal-close { background: none; border: none; font-size: 24px; color: #666; cursor: pointer; padding: 5px 10px; }\r\n    .sc-comment-modal-body { padding: 20px; overflow-y: auto; flex: 1; }\r\n    .sc-comment-item { padding: 15px; margin-bottom: 15px; background: #f9f9f9; border-radius: 12px; border-left: 4px solid #F2A14B; }\r\n    .sc-comment-author { font-weight: 700; color: #333; font-size: 14px; margin-right: 10px; }\r\n    .sc-comment-text { color: #444; font-size: 14px; line-height: 1.5; margin-bottom: 8px; }\r\n    \r\n    .sc-anonymous-viewer .story-meta { padding: 15px; border-top: 1px solid #eee; }\r\n    .sc-anonymous-viewer .story-meta-row { display: flex; justify-content: space-between; margin-bottom: 8px; font-size: 13px; }\r\n    .sc-anonymous-viewer .story-meta-label { color: #888; font-weight: 500; }\r\n    .sc-anonymous-viewer .story-meta-value { color: #333; }\r\n    .sc-anonymous-viewer .story-actions { display: flex; gap: 10px; padding: 15px; border-top: 1px solid #eee; }\r\n    .sc-anonymous-viewer .story-action-btn { flex: 1; padding: 10px; border-radius: 8px; border: none; background: #f5f5f5; color: #555; cursor: pointer; font-weight: 600; font-size: 13px; display: flex; align-items: center; justify-content: center; gap: 6px; transition: all 0.3s; }\r\n    .sc-anonymous-viewer .story-action-btn:hover { background: rgba(242, 161, 75, 0.1); color: #F2A14B; }\r\n    \r\n    .sc-anonymous-viewer .snap-list { border-top: 1px solid #eee; padding: 15px; max-height: 400px; overflow-y: auto; display: block; }\r\n    .sc-anonymous-viewer .snap-item { display: flex; gap: 12px; margin-bottom: 12px; padding-bottom: 12px; border-bottom: 1px solid #eee; }\r\n    .sc-anonymous-viewer .snap-thumb { width: 60px; height: 90px; border-radius: 8px; overflow: hidden; flex-shrink: 0; background: #eee; }\r\n    .sc-anonymous-viewer .snap-thumb img { width: 100%; height: 100%; object-fit: cover; }\r\n    .sc-anonymous-viewer .snap-meta { flex: 1; font-size: 12px; }\r\n    .sc-anonymous-viewer .snap-badge { display: inline-block; padding: 2px 8px; border-radius: 999px; background: rgba(242, 161, 75, 0.1); color: #F2A14B; font-size: 11px; margin-bottom: 6px; font-weight: 600; }\r\n\r\n    \/* Modal Fixes *\/\r\n    .sc-modal-backdrop { background: rgba(0, 0, 0, 0.9); display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; z-index: 9999; justify-content: center; align-items: center; }\r\n    .sc-modal-content { background: white; border-radius: 20px; padding: 30px; max-width: 90vw; max-height: 90vh; position: relative; text-align: center; }\r\n    .sc-close-modal { position: absolute; top: 15px; right: 15px; background: #F2A14B; color: white; border: none; width: 40px; height: 40px; border-radius: 50%; cursor: pointer; display: flex; align-items: center; justify-content: center; }\r\n    .sc-modal-download-btn { margin-top: 20px; padding: 12px 24px; background: linear-gradient(135deg, #F2A14B, #e08e35); color: white; border: none; border-radius: 10px; cursor: pointer; font-weight: 600; display: inline-flex; align-items: center; gap: 8px; }\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        \/* 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        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    \/* 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        \/* Hover Interaction - Glow and Lift *\/\r\n        transform: translateY(-7px);\r\n        box-shadow: 0 15px 35px rgba(0,0,0,0.1), 0 0 15px rgba(242, 161, 75, 0.15);\r\n        border-color: rgba(242, 161, 75, 0.5);\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        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 { grid-template-columns: repeat(2, 1fr); }\r\n        .sc-grid-6 { grid-template-columns: repeat(2, 1fr); }\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        \/* General Spacing *\/\r\n        .sc-anonymous-viewer .main-contain { padding-top: 20px; }\r\n        .sc-tool-wrapper { padding: 25px 15px; margin-bottom: 20px; width: 96%; }\r\n        \r\n        \/* 1. Profile Header Layout Change *\/\r\n        .sc-profile-header { padding: 15px; }\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; height: 28px; font-size: 12px;\r\n            bottom: 0; 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; \/* Forces this section below the floated image *\/\r\n            display: flex;\r\n            width: 100%;\r\n            justify-content: space-between; \/* Evenly spaced *\/\r\n            gap: 10px;\r\n            margin: 0;\r\n            padding-top: 20px; \/* Space between top section and stats *\/\r\n            border-top: 1px solid rgba(0,0,0,0.03); \/* Optional subtle divider *\/\r\n        }\r\n\r\n        .sc-anonymous-viewer .stat-item { \r\n            align-items: center; \r\n            flex: 1; \/* 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        .sc-anonymous-viewer .sc-tabs button {\r\n            padding: 8px 12px;\r\n            font-size: 13px;\r\n            flex: 1 1 auto; \/* 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 { padding: 30px 0; }\r\n        .sc-content-title { font-size: 24px; margin-bottom: 25px; }\r\n        \r\n        .sc-grid-6, .sc-grid-8 {\r\n            grid-template-columns: repeat(2, 1fr); \r\n            gap: 10px; \r\n        }\r\n        \r\n        .sc-info-card { padding: 15px 12px; min-height: 160px; }\r\n        .sc-card-icon { width: 40px; height: 40px; font-size: 18px; margin-bottom: 12px; }\r\n        .sc-card-title { font-size: 14px; margin-bottom: 6px; line-height: 1.3; }\r\n        .sc-card-text { font-size: 11px; line-height: 1.4; }\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<\/span> Web Viewer - Browse Snaps Online<\/h1>\r\n                <p>View and download Snapchat stories, highlights, and spotlights anonymously.<\/p>\r\n            <\/div><\/div>\r\n        <div class=\"sc-tool-wrapper\">\r\n           \r\n\r\n            <div class=\"sc-input-area\">\r\n                <div style=\"width: 100%; text-align: left; margin-bottom: 10px;\">\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\" 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 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 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<\/div>\r\n\r\n\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                     .replace(\/<\/g, \"\\u0026lt;\")\r\n                     .replace(\/>\/g, \"\\u0026gt;\")\r\n                    .replace(\/\"\/g, \"\\u0026quot;\")\r\n                    .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<style>\r\n*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}\r\n\r\n.sv{\r\n  --grad:      linear-gradient(135deg,#4F46E5,#2563EB);\r\n  --grad-soft: linear-gradient(135deg,#EEF2FF,#DBEAFE);\r\n  --grad-text: linear-gradient(135deg,#4338CA,#1D4ED8);\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:#3730A3;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(55,48,163,.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(55,48,163,.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\r\n\/* \u2500\u2500 INTERACTION: Animated border draw \u2500\u2500 *\/\r\n.sv-ca::after,.sv-cb::after{\r\n  content:'';position:absolute;inset:-1px;border-radius:calc(var(--r) + 1px);\r\n  background:var(--grad);\r\n  opacity:0;\r\n  -webkit-mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);\r\n  mask:linear-gradient(#fff 0 0) content-box,linear-gradient(#fff 0 0);\r\n  -webkit-mask-composite:xor;mask-composite:exclude;\r\n  padding:2px;\r\n  clip-path:inset(0 100% 0 0 round calc(var(--r)+1px));\r\n  transition:clip-path .5s cubic-bezier(.4,0,.2,1),opacity .2s;\r\n  pointer-events:none;\r\n}\r\n.sv-ca>*,.sv-cb>*,.sv-cb-body{position:relative;z-index:1}\r\n.sv-ca.sv-on:hover::after,.sv-cb.sv-on:hover::after{opacity:1;clip-path:inset(0 0% 0 0 round calc(var(--r)+1px))}\r\n.sv-ca.sv-on:hover::before,.sv-cb.sv-on:hover::before{opacity:0}\r\n.sv-ca.sv-on:hover{transform:translateY(-5px);box-shadow:0 14px 36px rgba(55,48,163,.1);border-color:transparent}\r\n.sv-cb.sv-on:hover{transform:translateY(-4px);box-shadow:0 12px 30px rgba(55,48,163,.08);border-color:transparent}\r\n.sv-ca.sv-on:hover .sv-ico,.sv-cb.sv-on:hover .sv-ico{background:var(--grad);transform:scale(1.1) rotate(-4deg)}\r\n.sv-ca.sv-on:hover .sv-ico svg,.sv-cb.sv-on:hover .sv-ico svg{stroke:#fff}\r\n\r\n<\/style>\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 Web Viewer<\/span> Works<\/h2>\r\n      <p>Access any public Snapchat profile directly in your browser. No app download, no account needed.<\/p>\r\n    <\/div>\r\n    <div class=\"sv-g4\" data-sv-grid>\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\"\/><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"\/><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"\/><\/svg><\/div>\r\n        <h3>Open in Any Browser<\/h3>\r\n        <p>Use our web viewer from any browser on any device without installing any app or extension.<\/p>\r\n      <\/div>\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>Search by Username<\/h3>\r\n        <p>Enter any public Snapchat username to instantly load their full profile in your browser.<\/p>\r\n      <\/div>\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>Full Profile View<\/h3>\r\n        <p>See snaps, stories, highlights, and public profile details all in one clean web interface.<\/p>\r\n      <\/div>\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>Anonymous Browsing<\/h3>\r\n        <p>View any profile without them knowing. Your identity is never revealed during any visit.<\/p>\r\n      <\/div>\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"\/><line x1=\"3\" y1=\"9\" x2=\"21\" y2=\"9\"\/><line x1=\"9\" y1=\"21\" x2=\"9\" y2=\"9\"\/><\/svg><\/div>\r\n        <h3>No App Required<\/h3>\r\n        <p>Everything works directly in browser. No downloads, no installs, no permissions needed.<\/p>\r\n      <\/div>\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"\/><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"\/><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"\/><\/svg><\/div>\r\n        <h3>Desktop Optimized<\/h3>\r\n        <p>Enjoy a wide-screen desktop layout designed specifically for large monitors and displays.<\/p>\r\n      <\/div>\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 from Browser<\/h3>\r\n        <p>Save any content you find directly from the browser with one click at original quality.<\/p>\r\n      <\/div>\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><path d=\"M5 12.55a11 11 0 0 1 14.08 0\"\/><path d=\"M1.42 9a16 16 0 0 1 21.16 0\"\/><path d=\"M8.53 16.11a6 6 0 0 1 6.95 0\"\/><circle cx=\"12\" cy=\"20\" r=\"1\"\/><\/svg><\/div>\r\n        <h3>Works Anywhere Online<\/h3>\r\n        <p>Access any public Snapchat profile from any internet connection worldwide at any time.<\/p>\r\n      <\/div>\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 Web Viewer<\/span> Privacy Works<\/h2>\r\n      <p>Privacy-first web browsing. Your activity stays hidden and your data stays yours.<\/p>\r\n    <\/div>\r\n    <div class=\"sv-g3\" data-sv-grid>\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>No Browser Tracking<\/h3>\r\n          <p>We never install cookies, trackers, or any scripts that monitor your browsing behavior.<\/p>\r\n        <\/div>\r\n      <\/div>\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>Zero Registration<\/h3>\r\n          <p>No account creation, no personal data collection. Just open and start viewing immediately.<\/p>\r\n        <\/div>\r\n      <\/div>\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>Secure HTTPS Only<\/h3>\r\n          <p>All web traffic is encrypted end-to-end with HTTPS to protect your privacy completely.<\/p>\r\n        <\/div>\r\n      <\/div>\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 Retained<\/h3>\r\n          <p>Nothing from your session is written to disk. All processing happens in temporary memory.<\/p>\r\n        <\/div>\r\n      <\/div>\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>Profile-Owner Invisible<\/h3>\r\n          <p>The Snapchat user whose profile you visit will never see any record of your viewing.<\/p>\r\n        <\/div>\r\n      <\/div>\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>Completely Free to Use<\/h3>\r\n          <p>Full web viewer access is free for everyone with no premium tier or paid upgrade.<\/p>\r\n        <\/div>\r\n      <\/div>\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 Web Viewer<\/span> Features Work<\/h2>\r\n      <p>Everything you need to browse Snapchat content fully in your web browser.<\/p>\r\n    <\/div>\r\n    <div class=\"sv-g4\" data-sv-grid>\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\"\/><line x1=\"2\" y1=\"12\" x2=\"22\" y2=\"12\"\/><path d=\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\"\/><\/svg><\/div>\r\n        <h3>Web-Based Viewer<\/h3>\r\n        <p>View any public Snapchat profile directly in browser with no redirects or app prompts.<\/p>\r\n      <\/div>\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><rect x=\"2\" y=\"3\" width=\"20\" height=\"14\" rx=\"2\"\/><line x1=\"8\" y1=\"21\" x2=\"16\" y2=\"21\"\/><line x1=\"12\" y1=\"17\" x2=\"12\" y2=\"21\"\/><\/svg><\/div>\r\n        <h3>Desktop Interface<\/h3>\r\n        <p>A purpose-built desktop layout with wide panels, sidebar navigation, and full controls.<\/p>\r\n      <\/div>\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"\/><path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"\/><\/svg><\/div>\r\n        <h3>Direct URL Access<\/h3>\r\n        <p>Paste a Snapchat profile URL directly into our viewer to open it instantly in browser.<\/p>\r\n      <\/div>\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><polygon points=\"12 2 2 7 12 12 22 7 12 2\"\/><polyline points=\"2 17 12 22 22 17\"\/><polyline points=\"2 12 12 17 22 12\"\/><\/svg><\/div>\r\n        <h3>Multi-Profile Tabs<\/h3>\r\n        <p>View multiple Snapchat profiles at the same time in separate browser-based viewer tabs.<\/p>\r\n      <\/div>\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"\/><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"\/><polyline points=\"21 15 16 10 5 21\"\/><\/svg><\/div>\r\n        <h3>Media Gallery<\/h3>\r\n        <p>Browse all photos and videos from a profile in a responsive web-based media gallery.<\/p>\r\n      <\/div>\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>Web Downloader<\/h3>\r\n        <p>Download photos, videos, and highlights directly from browser without any extra tools.<\/p>\r\n      <\/div>\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\"\/><line x1=\"11\" y1=\"8\" x2=\"11\" y2=\"14\"\/><line x1=\"8\" y1=\"11\" x2=\"14\" y2=\"11\"\/><\/svg><\/div>\r\n        <h3>Zoom and Preview<\/h3>\r\n        <p>Click any media to open a full-screen zoom preview with smooth in-browser navigation.<\/p>\r\n      <\/div>\r\n      <div class=\"sv-ca\">\r\n        <div class=\"sv-ico\"><svg viewBox=\"0 0 24 24\"><polyline points=\"1 4 1 10 7 10\"\/><path d=\"M3.51 15a9 9 0 1 0 .49-3.51\"\/><\/svg><\/div>\r\n        <h3>Live Feed Updates<\/h3>\r\n        <p>The web viewer refreshes content in real time so you always see the latest posts.<\/p>\r\n      <\/div>\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-5612","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ary-themes.com\/wp-json\/wp\/v2\/pages\/5612","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=5612"}],"version-history":[{"count":4,"href":"https:\/\/ary-themes.com\/wp-json\/wp\/v2\/pages\/5612\/revisions"}],"predecessor-version":[{"id":5616,"href":"https:\/\/ary-themes.com\/wp-json\/wp\/v2\/pages\/5612\/revisions\/5616"}],"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=5612"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}