{"id":6614,"date":"2026-07-18T05:59:14","date_gmt":"2026-07-18T05:59:14","guid":{"rendered":"https:\/\/assistyu.com\/?page_id=6614"},"modified":"2026-07-19T08:29:30","modified_gmt":"2026-07-19T08:29:30","slug":"network-security-scan","status":"publish","type":"page","link":"https:\/\/assistyu.com\/it\/network-security-scan\/","title":{"rendered":"Network Security Scan"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"6614\" class=\"elementor elementor-6614\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5645394 e-con-full e-flex e-con e-parent\" data-id=\"5645394\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-95bcf90 elementor-widget elementor-widget-html\" data-id=\"95bcf90\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\" \/>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" \/>\n    <title>AssistYU \u2014 Network Scan<\/title>\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\" \/>\n    <link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin \/>\n    <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Space+Grotesk:wght@400;500;600;700&family=Inter:wght@400;500;600&family=JetBrains+Mono:wght@400;500;600;700&display=swap\" rel=\"stylesheet\" \/>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n\n        :root {\n            --ayu-bg-deep: #060815;\n            --ayu-bg-navy: #090d24;\n            --ayu-bg-navy-2: #0b1130;\n            --ayu-text-primary: #ffffff;\n            --ayu-text-secondary: #d4daff;\n            --ayu-text-tertiary: #bcc4f0;\n\n            --glass-border: rgba(79, 110, 247, 0.15);\n            --border: rgba(79, 110, 247, 0.18);\n            --border-strong: rgba(79, 110, 247, 0.30);\n            --cyan: #4f6ef7;\n            --blue: #4f6ef7;\n            --violet: #8a6bff;\n            --danger: #ff3d68;\n            --safe: #22e6a8;\n            --amber: #ffb84d;\n\n            --font-display: 'Space Grotesk', sans-serif;\n            --font-body: 'Inter', sans-serif;\n            --font-mono: 'JetBrains Mono', monospace;\n        }\n\n        html,\n        body {\n            min-height: 100vh;\n            background: #060815;\n            color: var(--ayu-text-primary);\n            font-family: var(--font-body);\n            -webkit-font-smoothing: antialiased;\n            -moz-osx-font-smoothing: grayscale;\n            text-rendering: optimizeLegibility;\n            position: relative;\n            isolation: isolate;\n            overflow-x: hidden;\n        }\n\n        \/* \u2500\u2500 PAGE BACKGROUND GRADIENT \u2500\u2500 *\/\n        .page-bg {\n            position: absolute;\n            inset: 0;\n            z-index: 0;\n            pointer-events: none;\n            background: linear-gradient(180deg,\n                    #060815 0%,\n                    #060815 20%,\n                    #090d24 50%,\n                    #060815 80%,\n                    #060815 100%);\n        }\n\n        \/* \u2500\u2500 BACKGROUND LAYERS (restricted to middle 60%) \u2500\u2500 *\/\n        .bg-layers {\n            position: absolute;\n            inset: 0;\n            z-index: 0;\n            pointer-events: none;\n            \/* Only show in the middle 60% *\/\n            mask-image: linear-gradient(to bottom,\n                    transparent 0%,\n                    black 20%,\n                    black 80%,\n                    transparent 100%);\n            -webkit-mask-image: linear-gradient(to bottom,\n                    transparent 0%,\n                    black 20%,\n                    black 80%,\n                    transparent 100%);\n        }\n\n        .ayu-bg-world {\n            position: absolute;\n            inset: 0;\n            background-image: url('https:\/\/assistyu.com\/wp-content\/uploads\/2026\/07\/scan-network-scaled.jpeg?w=1600&q=80');\n            background-size: cover;\n            background-position: center;\n            opacity: 0.10;\n            mask-image: radial-gradient(ellipse 80% 70% at 50% 40%, black 20%, transparent 75%);\n            -webkit-mask-image: radial-gradient(ellipse 80% 70% at 50% 40%, black 20%, transparent 75%);\n        }\n\n        .ayu-bg-dots {\n            position: absolute;\n            inset: 0;\n            background-image: radial-gradient(circle at 1px 1px, rgba(79, 110, 247, 0.08) 1px, transparent 1px);\n            background-size: 48px 48px;\n            mask-image: radial-gradient(ellipse 60% 50% at 50% 50%, black 20%, transparent 70%);\n            -webkit-mask-image: radial-gradient(ellipse 60% 50% at 50% 50%, black 20%, transparent 70%);\n        }\n\n        .ayu-bg-glow {\n            position: absolute;\n            inset: 0;\n            background:\n                radial-gradient(ellipse 50% 40% at 15% 15%, rgba(79, 110, 247, 0.12), transparent 55%),\n                radial-gradient(ellipse 35% 30% at 50% 50%, rgba(236, 72, 153, 0.04), transparent 60%),\n                radial-gradient(ellipse 50% 40% at 70% 20%, rgba(34, 211, 238, 0.06), transparent 50%);\n        }\n\n        .ayu-bg-orb-1 {\n            position: absolute;\n            width: 400px;\n            height: 400px;\n            top: 10%;\n            left: 5%;\n            border-radius: 50%;\n            background: radial-gradient(circle, rgba(79, 110, 247, 0.06) 0%, transparent 70%);\n            animation: ayuOrbFloat1 20s ease-in-out infinite;\n        }\n\n        .ayu-bg-orb-2 {\n            position: absolute;\n            width: 300px;\n            height: 300px;\n            bottom: 15%;\n            right: 10%;\n            border-radius: 50%;\n            background: radial-gradient(circle, rgba(139, 92, 246, 0.06) 0%, transparent 70%);\n            animation: ayuOrbFloat2 25s ease-in-out infinite;\n        }\n\n        @keyframes ayuOrbFloat1 {\n            0%,\n            100% {\n                transform: translate(0, 0) scale(1);\n            }\n            33% {\n                transform: translate(30px, -20px) scale(1.05);\n            }\n            66% {\n                transform: translate(-15px, 15px) scale(0.95);\n            }\n        }\n        @keyframes ayuOrbFloat2 {\n            0%,\n            100% {\n                transform: translate(0, 0) scale(1);\n            }\n            33% {\n                transform: translate(-20px, 25px) scale(1.08);\n            }\n            66% {\n                transform: translate(25px, -10px) scale(0.92);\n            }\n        }\n\n        \/* \u2500\u2500 content overlay \u2500\u2500 *\/\n        .ayu-content-overlay {\n            position: relative;\n            z-index: 1;\n        }\n\n        a {\n            color: inherit;\n            text-decoration: none;\n        }\n        button {\n            font-family: inherit;\n            cursor: pointer;\n        }\n        ::selection {\n            background: var(--cyan);\n            color: #04060d;\n        }\n        html {\n            scroll-behavior: smooth;\n        }\n        @media(prefers-reduced-motion:reduce) {\n            html {\n                scroll-behavior: auto;\n            }\n        }\n        a:focus-visible,\n        button:focus-visible,\n        .swi input:focus-visible+.sws,\n        .map-click:focus-visible,\n        .card:focus-visible {\n            outline: 2px solid var(--cyan);\n            outline-offset: 3px;\n            border-radius: 8px;\n        }\n\n        main {\n            max-width: 95%;\n            margin: 0 auto;\n            padding: 130px clamp(20px, 4vw, 60px) 48px;\n            position: relative;\n            z-index: 1;\n        }\n\n        \/* =============================================\n           START SCREEN\n           ============================================= *\/\n        #start-view {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            min-height: calc(80vh - 130px);\n            text-align: center;\n            animation: fadeUp .6s cubic-bezier(.2, .8, .2, 1);\n        }\n        @keyframes fadeUp {\n            from {\n                opacity: 0;\n                transform: translateY(18px);\n            }\n            to {\n                opacity: 1;\n                transform: none;\n            }\n        }\n        .start-shield {\n            position: relative;\n            width: 80px;\n            height: 80px;\n            margin-bottom: 28px;\n        }\n        .start-shield svg {\n            width: 80px;\n            height: 80px;\n            color: var(--cyan);\n            filter: drop-shadow(0 0 24px rgba(79, 110, 247, 0.40));\n        }\n        .start-shield::after {\n            content: '';\n            position: absolute;\n            inset: -12px;\n            border-radius: 50%;\n            background: radial-gradient(circle, rgba(79, 110, 247, 0.10), transparent 70%);\n            animation: pulse 2.5s ease-in-out infinite;\n        }\n        @keyframes pulse {\n            0%,\n            100% {\n                transform: scale(1);\n                opacity: .6;\n            }\n            50% {\n                transform: scale(1.15);\n                opacity: 1;\n            }\n        }\n        .start-title {\n            font-family: var(--font-display);\n            font-weight: 700;\n            font-size: clamp(28px, 5vw, 48px);\n            color: var(--ayu-text-primary);\n            letter-spacing: -0.03em;\n            line-height: 1.15;\n            margin-bottom: 12px;\n        }\n        .start-title span {\n            color: var(--cyan);\n        }\n        .start-sub {\n            font-family: var(--font-body);\n            font-size: clamp(14px, 1.5vw, 18px);\n            color: var(--ayu-text-secondary);\n            line-height: 1.6;\n            max-width: 520px;\n            margin-bottom: 36px;\n        }\n        .start-cta {\n            display: inline-flex;\n            align-items: center;\n            gap: 12px;\n            padding: 16px 36px;\n            border-radius: 14px;\n            border: none;\n            cursor: pointer;\n            font-family: var(--font-display);\n            font-weight: 600;\n            font-size: 16px;\n            color: var(--ayu-text-primary);\n            letter-spacing: 0.2px;\n            background: linear-gradient(135deg, rgba(79, 110, 247, 0.20), rgba(138, 107, 255, 0.16));\n            border: 1px solid rgba(79, 110, 247, 0.40);\n            box-shadow: 0 4px 24px rgba(79, 110, 247, 0.20), 0 0 60px rgba(79, 110, 247, 0.06);\n            transition: all .3s cubic-bezier(.2, .8, .2, 1);\n            position: relative;\n            overflow: hidden;\n        }\n        .start-cta::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            border-radius: 14px;\n            background: linear-gradient(135deg, rgba(255, 255, 255, 0.05), transparent);\n            pointer-events: none;\n        }\n        .start-cta svg {\n            width: 20px;\n            height: 20px;\n            color: var(--cyan);\n            transition: transform .3s;\n        }\n        .start-cta:hover {\n            transform: translateY(-3px);\n            box-shadow: 0 8px 36px rgba(79, 110, 247, 0.30), 0 0 80px rgba(79, 110, 247, 0.10);\n            border-color: rgba(79, 110, 247, 0.60);\n            background: linear-gradient(135deg, rgba(79, 110, 247, 0.28), rgba(138, 107, 255, 0.22));\n        }\n        .start-cta:hover svg {\n            transform: translateX(3px);\n        }\n        .start-cta:active {\n            transform: translateY(-1px);\n            box-shadow: 0 4px 20px rgba(79, 110, 247, 0.22);\n        }\n        .start-features {\n            display: flex;\n            gap: 24px;\n            margin-top: 40px;\n            flex-wrap: wrap;\n            justify-content: center;\n        }\n        .start-feat {\n            display: flex;\n            align-items: center;\n            gap: 8px;\n            font-family: var(--font-mono);\n            font-size: 11px;\n            letter-spacing: 0.5px;\n            color: var(--ayu-text-tertiary);\n            text-transform: uppercase;\n        }\n        .start-feat-dot {\n            width: 5px;\n            height: 5px;\n            border-radius: 50%;\n            background: var(--cyan);\n            box-shadow: 0 0 8px rgba(79, 110, 247, 0.5);\n        }\n\n        \/* =============================================\n           SCAN STAGE\n           ============================================= *\/\n        #scan-stage {\n            display: none;\n            margin-top: 28px;\n            text-align: center;\n        }\n        #scan-stage .eyebrow {\n            text-align: center;\n            font-size: 12px;\n            letter-spacing: 1.5px;\n            color: var(--ayu-text-tertiary);\n            text-transform: uppercase;\n            font-weight: 500;\n        }\n        #scan-stage .eyebrow span {\n            color: var(--cyan);\n        }\n        #scan-stage .hl {\n            display: block;\n            font-family: var(--font-display);\n            font-size: clamp(24px, 4vw, 42px);\n            font-weight: 700;\n            line-height: 1.15;\n            margin-top: 8px;\n            color: var(--ayu-text-primary);\n            text-align: center;\n        }\n        #scan-stage .sw-t {\n            transition: color .4s;\n        }\n        #scan-stage .sw-t.scanning {\n            color: var(--cyan);\n            text-shadow: 0 0 30px rgba(79, 110, 247, 0.4);\n        }\n        #scan-stage .sw-t.exposed {\n            color: var(--danger);\n            text-shadow: 0 0 30px rgba(255, 61, 104, 0.4);\n        }\n        #scan-stage .sw-t.protected {\n            color: var(--safe);\n            text-shadow: 0 0 30px rgba(34, 230, 168, 0.4);\n        }\n\n        .scan-grid {\n            margin-top: 12px;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 12px;\n            width: 100%;\n            max-width: 700px;\n            margin-left: auto;\n            margin-right: auto;\n        }\n        .radar-sec {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            margin-bottom: 8px;\n        }\n        .radar-box {\n            position: relative;\n            width: min(340px, 55vw);\n            aspect-ratio: 1;\n        }\n        #radarCanvas {\n            width: 100%;\n            height: 100%;\n            display: block;\n        }\n        .rl {\n            margin-top: 12px;\n            font-family: var(--font-mono);\n            font-size: 10px;\n            letter-spacing: 2px;\n            color: var(--ayu-text-tertiary);\n            text-transform: uppercase;\n        }\n        .rl .live {\n            color: var(--cyan);\n            animation: lp 1.5s ease-in-out infinite;\n        }\n        @keyframes lp {\n            0%,\n            100% {\n                opacity: 1;\n            }\n            50% {\n                opacity: .4;\n            }\n        }\n\n        .ensec {\n            width: 100%;\n            max-width: min(340px, 55vw);\n            margin: 0 auto;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 10px;\n        }\n        .ensec .enb {\n            width: 100%;\n            height: 6px;\n            border-radius: 99px;\n            background: rgba(79, 110, 247, 0.10);\n            overflow: hidden;\n            position: relative;\n        }\n        .ensec .enbf {\n            height: 100%;\n            width: 0%;\n            border-radius: 99px;\n            background: linear-gradient(90deg, var(--cyan), var(--blue), var(--violet));\n            transition: width .4s;\n            box-shadow: 0 0 16px rgba(79, 110, 247, 0.5);\n        }\n        .ensec .enp {\n            font-family: var(--font-mono);\n            font-size: 13px;\n            font-weight: 600;\n            color: var(--ayu-text-primary);\n            letter-spacing: 1px;\n        }\n        .ensec .enp .pct {\n            color: var(--cyan);\n        }\n        .ensec .en-status {\n            font-family: var(--font-body);\n            font-size: 13px;\n            color: var(--ayu-text-secondary);\n            letter-spacing: 0.3px;\n            min-height: 1.6em;\n            transition: color .3s;\n        }\n        .ensec .en-status.done {\n            color: var(--safe);\n            font-weight: 500;\n        }\n        .ensec .en-status .highlight {\n            color: var(--cyan);\n            font-weight: 600;\n        }\n        .ensec .en-status .done-highlight {\n            color: var(--safe);\n            font-weight: 600;\n        }\n\n        \/* =============================================\n           VERDICT VIEW\n           ============================================= *\/\n        #verdict-view {\n            display: none;\n            padding-top: 20px;\n        }\n\n        \/* ---- verdict header ---- *\/\n        .verdict-header {\n            margin-top: 40px;\n            text-align: center;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 12px;\n            animation: fadeUp .6s cubic-bezier(.2, .8, .2, 1);\n        }\n        .verdict-header .vb {\n            width: 48px;\n            height: 48px;\n            border-radius: 13px;\n            flex-shrink: 0;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            backdrop-filter: blur(8px);\n            transition: all .4s;\n        }\n        .verdict-header .vb.dg {\n            background: rgba(255, 61, 104, 0.12);\n            border: 1px solid rgba(255, 61, 104, 0.35);\n            color: var(--danger);\n            box-shadow: 0 0 22px rgba(255, 61, 104, 0.20), inset 0 1px 0 rgba(255, 255, 255, 0.05);\n        }\n        .verdict-header .vb.sg {\n            background: rgba(34, 230, 168, 0.12);\n            border: 1px solid rgba(34, 230, 168, 0.35);\n            color: var(--safe);\n            box-shadow: 0 0 22px rgba(34, 230, 168, 0.20), inset 0 1px 0 rgba(255, 255, 255, 0.05);\n        }\n        .verdict-header .vb svg {\n            width: 22px;\n            height: 22px;\n        }\n        .verdict-header .vht-title {\n            font-family: var(--font-display);\n            font-weight: 700;\n            font-size: clamp(28px, 5vw, 48px);\n            color: var(--ayu-text-primary);\n            letter-spacing: -0.03em;\n            line-height: 1.15;\n        }\n        .verdict-header .vht-desc {\n            font-family: var(--font-body);\n            font-size: clamp(14px, 1.5vw, 18px);\n            color: var(--ayu-text-secondary);\n            line-height: 1.6;\n            max-width: 520px;\n        }\n        .verdict-header.exposed .vht-desc {\n            color: var(--danger);\n        }\n        .verdict-header.protected .vht-desc {\n            color: var(--safe);\n        }\n\n        \/* ---- hero blocks (side by side) ---- *\/\n        .hero-blocks {\n            display: flex;\n            gap: 20px;\n            margin-top: 32px;\n            align-items: stretch;\n            animation: fadeUp .6s cubic-bezier(.2, .8, .2, 1);\n        }\n        .hero-block {\n            flex: 1;\n            min-width: 0;\n            border-radius: 20px;\n            padding: 28px 30px;\n            backdrop-filter: blur(16px);\n            border: 1px solid var(--border-strong);\n            background: linear-gradient(135deg, rgba(9, 13, 36, 0.85), rgba(6, 8, 21, 0.75));\n            box-shadow: 0 8px 40px rgba(0, 0, 0, 0.35);\n            display: flex;\n            flex-direction: column;\n            position: relative;\n            overflow: hidden;\n            transition: border-color .4s, box-shadow .4s, background .4s;\n        }\n        .hero-block::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            border-radius: 18px;\n            pointer-events: none;\n            background: repeating-linear-gradient(0deg, transparent, transparent 3px, rgba(255, 255, 255, 0.010) 3px, rgba(255, 255, 255, 0.010) 4px);\n        }\n        .hero-block.exposed {\n            border-color: rgba(255, 61, 104, 0.28);\n            box-shadow: 0 8px 40px rgba(0, 0, 0, 0.35), 0 0 60px rgba(255, 61, 104, 0.10), inset 0 1px 0 rgba(255, 255, 255, 0.04);\n        }\n        .hero-block.exposed::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            border-radius: 18px;\n            background:\n                radial-gradient(38% 55% at 20% 30%, rgba(255, 61, 104, 0.18), transparent 70%),\n                radial-gradient(45% 60% at 80% 70%, rgba(255, 184, 77, 0.10), transparent 70%),\n                radial-gradient(30% 45% at 55% 90%, rgba(255, 61, 104, 0.08), transparent 70%);\n            animation: vhSmoke 15s ease-in-out infinite alternate;\n            pointer-events: none;\n        }\n        .hero-block.protected {\n            border-color: rgba(34, 230, 168, 0.28);\n            box-shadow: 0 8px 40px rgba(0, 0, 0, 0.35), 0 0 60px rgba(34, 230, 168, 0.10), inset 0 1px 0 rgba(255, 255, 255, 0.04);\n        }\n        .hero-block.protected::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            border-radius: 18px;\n            background:\n                radial-gradient(38% 55% at 20% 30%, rgba(34, 230, 168, 0.18), transparent 70%),\n                radial-gradient(45% 60% at 80% 70%, rgba(79, 110, 247, 0.12), transparent 70%),\n                radial-gradient(30% 45% at 55% 90%, rgba(34, 230, 168, 0.08), transparent 70%);\n            animation: vhSmoke 15s ease-in-out infinite alternate;\n            pointer-events: none;\n        }\n        @keyframes vhSmoke {\n            0% {\n                transform: translate(-2%, -1%) scale(1);\n            }\n            50% {\n                transform: translate(2%, 2%) scale(1.08);\n            }\n            100% {\n                transform: translate(-1%, 3%) scale(1.02);\n            }\n        }\n        @media(prefers-reduced-motion:reduce) {\n            .hero-block::after {\n                animation: none;\n            }\n        }\n        .hero-block>* {\n            position: relative;\n            z-index: 2;\n        }\n\n        \/* left block *\/\n        .hero-left .threats-header {\n            display: flex;\n            align-items: center;\n            gap: 12px;\n            flex-wrap: wrap;\n            margin-bottom: 6px;\n        }\n        .hero-left .threats-label {\n            font-family: var(--font-mono);\n            font-size: 12px;\n            font-weight: 700;\n            letter-spacing: 2px;\n            text-transform: uppercase;\n        }\n        .hero-left .threats-label.danger {\n            color: var(--danger);\n        }\n        .hero-left .threats-label.safe {\n            color: var(--safe);\n        }\n        .hero-left .threats-badges {\n            display: flex;\n            gap: 8px;\n            flex-wrap: wrap;\n        }\n        .hero-left .badge {\n            display: inline-flex;\n            align-items: center;\n            gap: 5px;\n            padding: 2px 10px;\n            border-radius: 999px;\n            font-family: var(--font-mono);\n            font-size: 10px;\n            font-weight: 700;\n            letter-spacing: 0.5px;\n            border: 1px solid transparent;\n        }\n        .hero-left .badge.crit {\n            background: rgba(255, 61, 104, 0.12);\n            color: var(--danger);\n            border-color: rgba(255, 61, 104, 0.30);\n        }\n        .hero-left .badge.warn {\n            background: rgba(255, 184, 77, 0.12);\n            color: var(--amber);\n            border-color: rgba(255, 184, 77, 0.30);\n        }\n        .hero-left .badge .dot {\n            width: 4px;\n            height: 4px;\n            border-radius: 50%;\n            background: currentColor;\n            box-shadow: 0 0 6px currentColor;\n        }\n        .hero-left .threats-count {\n            font-family: var(--font-display);\n            font-size: clamp(40px, 6vw, 68px);\n            font-weight: 700;\n            color: var(--ayu-text-primary);\n            letter-spacing: -0.02em;\n            line-height: 1;\n            margin: 6px 0 2px;\n        }\n        .hero-left .threats-count .num {\n            color: var(--danger);\n        }\n        .hero-left .threats-count .num.safe {\n            color: var(--safe);\n        }\n        .hero-left .threats-detail {\n            font-family: var(--font-body);\n            font-size: clamp(15px, 1.4vw, 20px);\n            color: var(--ayu-text-secondary);\n            line-height: 1.5;\n            margin-bottom: 12px;\n        }\n        .hero-left .threats-detail .highlight {\n            color: var(--ayu-text-primary);\n            font-weight: 500;\n        }\n        .hero-left .toggle-row {\n            display: flex;\n            align-items: center;\n            gap: 14px;\n            margin-top: auto;\n            padding-top: 10px;\n            border-top: 1px solid rgba(79, 110, 247, 0.08);\n        }\n        .hero-left .toggle-label {\n            font-family: var(--font-mono);\n            font-size: 12px;\n            font-weight: 600;\n            color: var(--ayu-text-secondary);\n            letter-spacing: 0.5px;\n            text-transform: uppercase;\n            transition: color .3s;\n        }\n        .hero-left .toggle-label.active {\n            color: var(--safe);\n        }\n        .hero-left .swi {\n            position: relative;\n            width: 44px;\n            height: 22px;\n            flex-shrink: 0;\n        }\n        .hero-left .swi input {\n            opacity: 0;\n            width: 0;\n            height: 0;\n        }\n        .hero-left .sws {\n            position: absolute;\n            inset: 0;\n            background: #1c2440;\n            border-radius: 999px;\n            transition: all .3s;\n            border: 1px solid var(--border-strong);\n            cursor: pointer;\n        }\n        .hero-left .sws::before {\n            content: '';\n            position: absolute;\n            width: 14px;\n            height: 14px;\n            left: 3px;\n            top: 3px;\n            background: #8a97bd;\n            border-radius: 50%;\n            transition: all .3s;\n        }\n        .hero-left .swi input:checked+.sws {\n            background: linear-gradient(90deg, var(--cyan), var(--safe));\n            border-color: transparent;\n            box-shadow: 0 0 18px rgba(34, 230, 168, 0.35);\n        }\n        .hero-left .swi input:checked+.sws::before {\n            transform: translateX(22px);\n            background: #04101a;\n        }\n\n        \/* right block *\/\n        .hero-right {\n            align-items: center;\n            justify-content: center;\n            text-align: center;\n        }\n        .hero-right .gauge-wrap {\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            gap: 8px;\n            width: 100%;\n        }\n        .hero-right .gauge-ring {\n            position: relative;\n            width: 120px;\n            height: 120px;\n            flex-shrink: 0;\n            filter: drop-shadow(0 4px 20px rgba(0, 0, 0, 0.4));\n        }\n        .hero-right .gauge-ring svg {\n            width: 120px;\n            height: 120px;\n            transform: rotate(-90deg);\n            overflow: visible;\n        }\n        .hero-right .gauge-ring circle {\n            fill: none;\n            stroke-linecap: round;\n        }\n        .hero-right .gauge-ring .g-bg {\n            stroke: rgba(79, 110, 247, 0.08);\n            stroke-width: 7;\n        }\n        .hero-right .gauge-ring .g-fill {\n            stroke-width: 8;\n            transition: stroke-dashoffset 1.4s cubic-bezier(.4, 0, .2, 1), stroke .5s;\n            filter: drop-shadow(0 0 12px rgba(0, 0, 0, 0.3));\n        }\n        .hero-right .gauge-ring .g-inner {\n            position: absolute;\n            inset: 10px;\n            border-radius: 50%;\n            background: radial-gradient(circle at 35% 35%, rgba(255, 255, 255, 0.06), transparent 60%),\n                linear-gradient(135deg, rgba(9, 13, 36, 0.95), rgba(6, 8, 21, 0.90));\n            border: 1px solid rgba(79, 110, 247, 0.08);\n            box-shadow: inset 0 2px 10px rgba(0, 0, 0, 0.4), inset 0 -1px 4px rgba(255, 255, 255, 0.03);\n        }\n        .hero-right .gauge-ring .g-num {\n            position: absolute;\n            inset: 0;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            font-family: var(--font-display);\n        }\n        .hero-right .gauge-ring .g-num-val {\n            font-size: 34px;\n            font-weight: 700;\n            color: var(--ayu-text-primary);\n            line-height: 1;\n            letter-spacing: -0.02em;\n        }\n        .hero-right .gauge-ring .g-num-of {\n            font-size: 11px;\n            font-weight: 500;\n            color: var(--ayu-text-tertiary);\n            letter-spacing: 1px;\n            margin-top: 0px;\n        }\n        .hero-right .gauge-grade {\n            font-family: var(--font-display);\n            font-size: clamp(18px, 2vw, 26px);\n            font-weight: 700;\n            letter-spacing: 0.3px;\n            margin-top: 2px;\n        }\n        .hero-right .gauge-grade .sub {\n            font-family: var(--font-body);\n            font-size: clamp(13px, 1.2vw, 16px);\n            font-weight: 400;\n            color: var(--ayu-text-secondary);\n            display: block;\n            margin-top: 2px;\n        }\n        .hero-right .gauge-tags {\n            display: flex;\n            gap: 8px;\n            flex-wrap: wrap;\n            justify-content: center;\n            margin-top: 4px;\n        }\n        .hero-right .gauge-tags .tag {\n            font-family: var(--font-mono);\n            font-size: 10px;\n            font-weight: 500;\n            padding: 4px 12px;\n            border-radius: 999px;\n            background: rgba(79, 110, 247, 0.06);\n            border: 1px solid rgba(79, 110, 247, 0.12);\n            color: var(--ayu-text-secondary);\n            letter-spacing: 0.3px;\n        }\n        .hero-right .gauge-tags .tag.danger {\n            background: rgba(255, 61, 104, 0.10);\n            border-color: rgba(255, 61, 104, 0.25);\n            color: var(--danger);\n        }\n        .hero-right .gauge-tags .tag.safe {\n            background: rgba(34, 230, 168, 0.10);\n            border-color: rgba(34, 230, 168, 0.25);\n            color: var(--safe);\n        }\n        .hero-right .gauge-tags .tag.warn {\n            background: rgba(255, 184, 77, 0.10);\n            border-color: rgba(255, 184, 77, 0.25);\n            color: var(--amber);\n        }\n\n        @media(max-width:768px) {\n            .hero-blocks {\n                flex-direction: column;\n            }\n            .hero-block {\n                padding: 24px 22px;\n            }\n            .hero-left .threats-count {\n                font-size: clamp(34px, 10vw, 52px);\n            }\n            .hero-right .gauge-ring {\n                width: 100px;\n                height: 100px;\n            }\n            .hero-right .gauge-ring svg {\n                width: 100px;\n                height: 100px;\n            }\n            .hero-right .gauge-ring .g-num-val {\n                font-size: 28px;\n            }\n            .verdict-header {\n                margin-top: 30px;\n            }\n            .verdict-header .vht-title {\n                font-size: clamp(26px, 4vw, 38px);\n            }\n        }\n        @media(max-width:480px) {\n            .hero-block {\n                padding: 20px 16px;\n            }\n            .hero-left .threats-count {\n                font-size: 30px;\n            }\n            .hero-right .gauge-ring {\n                width: 84px;\n                height: 84px;\n            }\n            .hero-right .gauge-ring svg {\n                width: 84px;\n                height: 84px;\n            }\n            .hero-right .gauge-ring .g-num-val {\n                font-size: 24px;\n            }\n            .hero-right .gauge-ring .g-num-of {\n                font-size: 9px;\n            }\n        }\n\n        \/* ---- cards ---- *\/\n        .rsec {\n            margin-top: 20px;\n        }\n        .slab {\n            margin-top: 32px;\n            margin-bottom: 14px;\n            font-family: var(--font-mono);\n            font-size: 10px;\n            letter-spacing: 2px;\n            color: var(--ayu-text-secondary);\n            text-transform: uppercase;\n            font-weight: 600;\n            display: flex;\n            align-items: center;\n            gap: 8px;\n        }\n        .slab::after {\n            content: '';\n            flex: 1;\n            height: 1px;\n            background: linear-gradient(90deg, rgba(79, 110, 247, 0.20), transparent);\n        }\n        .g2 {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 14px;\n        }\n        .g3 {\n            display: grid;\n            grid-template-columns: repeat(3, 1fr);\n            gap: 14px;\n        }\n        #gth {\n            grid-template-columns: 1fr 1fr !important;\n        }\n        @media(max-width:900px) {\n            .g3 {\n                grid-template-columns: repeat(2, 1fr);\n            }\n            #gth {\n                grid-template-columns: 1fr !important;\n            }\n        }\n        @media(max-width:640px) {\n            .g2 {\n                grid-template-columns: 1fr;\n            }\n            .g3 {\n                grid-template-columns: 1fr;\n            }\n        }\n        @media(min-width:1440px) {\n            .g2 {\n                grid-template-columns: repeat(3, 1fr);\n            }\n        }\n\n        .card {\n            position: relative;\n            border-radius: 14px;\n            padding: 20px 22px;\n            display: flex;\n            align-items: flex-start;\n            gap: 16px;\n            overflow: hidden;\n            transition: transform .3s cubic-bezier(.2, .8, .2, 1), box-shadow .3s, border-color .3s, background .3s;\n            opacity: 0;\n            transform: translateY(8px);\n            animation: ci .45s ease forwards;\n            background: linear-gradient(135deg, rgba(9, 13, 36, 0.80), rgba(6, 8, 21, 0.70));\n            border: 1px solid rgba(79, 110, 247, 0.10);\n            box-shadow: 0 2px 14px rgba(0, 0, 0, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.03);\n            will-change: transform;\n            backdrop-filter: blur(10px);\n            -webkit-backdrop-filter: blur(10px);\n        }\n        .card::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            border-radius: 14px;\n            pointer-events: none;\n            background: repeating-linear-gradient(0deg, transparent, transparent 3px, rgba(255, 255, 255, 0.008) 3px, rgba(255, 255, 255, 0.008) 4px);\n            opacity: 1;\n            transition: opacity .3s;\n        }\n        .card:hover {\n            border-color: rgba(79, 110, 247, 0.22);\n            box-shadow: 0 6px 28px rgba(0, 0, 0, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.05);\n            transform: translateY(-2px);\n        }\n\n        .card.c-cyan {\n            border-color: rgba(79, 110, 247, 0.14);\n            background: linear-gradient(135deg, rgba(9, 13, 36, 0.82), rgba(6, 8, 21, 0.74)), radial-gradient(120% 120% at 0% 0%, rgba(79, 110, 247, 0.04), transparent 60%);\n        }\n        .card.c-cyan:hover {\n            border-color: rgba(79, 110, 247, 0.28);\n            box-shadow: 0 6px 28px rgba(0, 0, 0, 0.45), 0 0 24px rgba(79, 110, 247, 0.06);\n        }\n\n        .card.c-danger {\n            border-color: rgba(255, 61, 104, 0.28);\n            background: linear-gradient(135deg, rgba(38, 12, 22, 0.82), rgba(16, 8, 14, 0.75)), radial-gradient(120% 120% at 0% 0%, rgba(255, 61, 104, 0.16), transparent 60%);\n            box-shadow: 0 2px 16px rgba(0, 0, 0, 0.4), 0 0 26px rgba(255, 61, 104, 0.10);\n        }\n        .card.c-danger:hover {\n            border-color: rgba(255, 61, 104, 0.45);\n            box-shadow: 0 6px 28px rgba(0, 0, 0, 0.5), 0 0 32px rgba(255, 61, 104, 0.16);\n        }\n\n        .card.c-warn {\n            border-color: rgba(255, 184, 77, 0.28);\n            background: linear-gradient(135deg, rgba(36, 26, 10, 0.82), rgba(16, 14, 8, 0.75)), radial-gradient(120% 120% at 0% 0%, rgba(255, 184, 77, 0.14), transparent 60%);\n            box-shadow: 0 2px 16px rgba(0, 0, 0, 0.4), 0 0 24px rgba(255, 184, 77, 0.08);\n        }\n        .card.c-warn:hover {\n            border-color: rgba(255, 184, 77, 0.40);\n            box-shadow: 0 6px 28px rgba(0, 0, 0, 0.5), 0 0 30px rgba(255, 184, 77, 0.14);\n        }\n\n        .card.c-safe {\n            border-color: rgba(34, 230, 168, 0.22);\n            background: linear-gradient(135deg, rgba(10, 32, 26, 0.78), rgba(8, 20, 18, 0.7)), radial-gradient(120% 120% at 0% 0%, rgba(34, 230, 168, 0.10), transparent 60%);\n            box-shadow: 0 2px 16px rgba(0, 0, 0, 0.4), 0 0 22px rgba(34, 230, 168, 0.06);\n        }\n        .card.c-safe:hover {\n            border-color: rgba(34, 230, 168, 0.35);\n            box-shadow: 0 6px 28px rgba(0, 0, 0, 0.5), 0 0 28px rgba(34, 230, 168, 0.12);\n        }\n\n        .card.prot {\n            border-color: rgba(34, 230, 168, 0.28) !important;\n            background: linear-gradient(135deg, rgba(10, 32, 26, 0.82), rgba(8, 20, 18, 0.75)), radial-gradient(120% 120% at 0% 0%, rgba(34, 230, 168, 0.14), transparent 60%) !important;\n            box-shadow: 0 2px 16px rgba(0, 0, 0, 0.4), 0 0 26px rgba(34, 230, 168, 0.10) !important;\n        }\n        .card.prot .ci {\n            background: rgba(34, 230, 168, 0.12) !important;\n            border-color: rgba(34, 230, 168, 0.35) !important;\n            color: var(--safe) !important;\n        }\n        .card.prot .cv {\n            color: var(--safe) !important;\n            background: rgba(34, 230, 168, 0.10) !important;\n            border-color: rgba(34, 230, 168, 0.22) !important;\n        }\n        .card.prot .cs {\n            color: rgba(34, 230, 168, 0.7) !important;\n        }\n\n        @keyframes ci {\n            to {\n                opacity: 1;\n                transform: none;\n            }\n        }\n\n        .ci {\n            width: 44px;\n            height: 44px;\n            border-radius: 11px;\n            flex-shrink: 0;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            background: rgba(79, 110, 247, 0.06);\n            border: 1px solid rgba(79, 110, 247, 0.18);\n            color: var(--cyan);\n            transition: all .35s;\n            position: relative;\n            z-index: 1;\n            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04);\n        }\n        .card:hover .ci {\n            transform: scale(1.06);\n        }\n        .card.c-danger .ci {\n            background: rgba(255, 61, 104, 0.10);\n            border-color: rgba(255, 61, 104, 0.28);\n            color: var(--danger);\n            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 0 14px rgba(255, 61, 104, 0.10);\n        }\n        .card.c-warn .ci {\n            background: rgba(255, 184, 77, 0.10);\n            border-color: rgba(255, 184, 77, 0.28);\n            color: var(--amber);\n            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 0 14px rgba(255, 184, 77, 0.08);\n        }\n        .card.c-safe .ci {\n            background: rgba(34, 230, 168, 0.10);\n            border-color: rgba(34, 230, 168, 0.28);\n            color: var(--safe);\n            box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04), 0 0 14px rgba(34, 230, 168, 0.08);\n        }\n        .ci svg {\n            width: 20px;\n            height: 20px;\n        }\n\n        .cb {\n            min-width: 0;\n            flex: 1;\n            display: flex;\n            flex-direction: column;\n            gap: 6px;\n        }\n        .cl {\n            font-size: 10px;\n            letter-spacing: 1.5px;\n            color: var(--ayu-text-secondary);\n            text-transform: uppercase;\n            font-weight: 600;\n        }\n        .cv {\n            font-family: var(--font-mono);\n            font-size: 14px;\n            font-weight: 600;\n            color: var(--ayu-text-primary);\n            word-break: break-word;\n            line-height: 1.4;\n            padding: 6px 10px;\n            border-radius: 6px;\n            background: rgba(255, 255, 255, 0.03);\n            border: 1px solid rgba(255, 255, 255, 0.06);\n            transition: all .3s;\n            display: inline-block;\n            width: fit-content;\n            max-width: 100%;\n        }\n        .cv.risk {\n            color: var(--danger);\n            background: rgba(255, 61, 104, 0.08);\n            border-color: rgba(255, 61, 104, 0.22);\n        }\n        .cv.warn {\n            color: var(--amber);\n            background: rgba(255, 184, 77, 0.08);\n            border-color: rgba(255, 184, 77, 0.22);\n        }\n        .cv.safe {\n            color: var(--safe);\n            background: rgba(34, 230, 168, 0.08);\n            border-color: rgba(34, 230, 168, 0.22);\n        }\n        .cv.mask {\n            color: var(--safe);\n            font-style: italic;\n            background: rgba(34, 230, 168, 0.10);\n            border-color: rgba(34, 230, 168, 0.25);\n        }\n        .cs {\n            font-size: 11px;\n            color: var(--ayu-text-tertiary);\n            line-height: 1.45;\n            transition: color .3s;\n        }\n        .card:hover .cs {\n            color: var(--ayu-text-secondary);\n        }\n\n        \/* ---- map ---- *\/\n        .mapc {\n            margin-top: 8px;\n            border: 1px solid rgba(79, 110, 247, 0.18);\n            border-radius: 14px;\n            overflow: hidden;\n            background: rgba(9, 13, 36, 0.85);\n            backdrop-filter: blur(12px);\n            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.35), 0 0 0 1px rgba(79, 110, 247, 0.06);\n            position: relative;\n            display: flex;\n            flex-direction: column;\n        }\n        .mapc::before {\n            content: '';\n            position: absolute;\n            top: 0;\n            left: 0;\n            right: 0;\n            height: 1px;\n            background: linear-gradient(90deg, transparent, rgba(79, 110, 247, 0.3), transparent);\n            z-index: 1;\n        }\n        .maph {\n            display: flex;\n            align-items: center;\n            justify-content: space-between;\n            padding: 12px 16px;\n            font-family: var(--font-mono);\n            font-size: 10px;\n            letter-spacing: 1.5px;\n            color: var(--ayu-text-primary);\n            font-weight: 600;\n            text-transform: uppercase;\n            border-bottom: 1px solid rgba(79, 110, 247, 0.12);\n            background: rgba(9, 13, 36, 0.6);\n            flex-shrink: 0;\n        }\n        .maph-l {\n            display: flex;\n            align-items: center;\n            gap: 8px;\n        }\n        .maph svg {\n            color: var(--ayu-text-primary);\n            opacity: .7;\n        }\n        .maph-z {\n            display: flex;\n            gap: 4px;\n        }\n        .maph-z button {\n            width: 28px;\n            height: 28px;\n            border-radius: 7px;\n            border: 1px solid rgba(79, 110, 247, 0.2);\n            background: rgba(9, 13, 36, 0.6);\n            color: var(--ayu-text-primary);\n            font-size: 16px;\n            cursor: pointer;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            transition: all .2s;\n            font-family: var(--font-mono);\n        }\n        .maph-z button:hover {\n            border-color: rgba(255, 255, 255, 0.4);\n            background: rgba(255, 255, 255, 0.06);\n            color: var(--ayu-text-primary);\n        }\n        .mapw {\n            position: relative;\n            height: 380px;\n            width: 100%;\n            filter: saturate(0.7) brightness(0.95) contrast(1.05);\n            pointer-events: none;\n            transition: filter .4s;\n            overflow: hidden;\n        }\n        .mapw.active {\n            pointer-events: auto;\n            filter: saturate(0.85) brightness(1) contrast(1.05);\n        }\n        .mapw iframe {\n            position: absolute;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            border: 0;\n            display: block;\n            transition: opacity .4s;\n        }\n        .mapw::after {\n            content: '';\n            position: absolute;\n            inset: 0;\n            pointer-events: none;\n            background: linear-gradient(180deg, rgba(6, 8, 21, 0.15) 0%, rgba(6, 8, 21, 0.4) 100%);\n            border-radius: 0 0 14px 14px;\n            transition: opacity .4s;\n        }\n        .mapw.active::after {\n            opacity: 0;\n        }\n        .map-click {\n            position: absolute;\n            inset: 0;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            gap: 10px;\n            z-index: 5;\n            cursor: pointer;\n            background: rgba(6, 8, 21, 0.45);\n            backdrop-filter: blur(3px);\n            transition: all .4s;\n            border-radius: 0 0 14px 14px;\n            pointer-events: auto;\n        }\n        .map-click:hover {\n            background: rgba(6, 8, 21, 0.3);\n            backdrop-filter: blur(1px);\n        }\n        .map-click svg {\n            width: 32px;\n            height: 32px;\n            color: var(--ayu-text-primary);\n            animation: lp 1.5s ease-in-out infinite;\n            transition: transform .3s;\n        }\n        .map-click:hover svg {\n            transform: scale(1.15);\n        }\n        .map-click span {\n            font-family: var(--font-mono);\n            font-size: 10px;\n            letter-spacing: 2px;\n            color: var(--ayu-text-primary);\n            text-transform: uppercase;\n        }\n        .map-click .map-hint {\n            font-size: 9px;\n            color: var(--ayu-text-secondary);\n            letter-spacing: 1px;\n            margin-top: 2px;\n        }\n        .mapw.active .map-click {\n            opacity: 0;\n            pointer-events: none;\n        }\n        .map-loc {\n            position: absolute;\n            bottom: 12px;\n            left: 12px;\n            z-index: 4;\n            background: rgba(9, 13, 36, 0.9);\n            border: 1px solid rgba(79, 110, 247, 0.2);\n            border-radius: 10px;\n            padding: 10px 14px;\n            backdrop-filter: blur(10px);\n            display: flex;\n            align-items: center;\n            gap: 8px;\n            opacity: 0;\n            transform: translateY(8px);\n            transition: all .4s .2s;\n            pointer-events: none;\n        }\n        .mapw.active .map-loc {\n            opacity: 1;\n            transform: none;\n            pointer-events: auto;\n        }\n        .map-loc svg {\n            width: 14px;\n            height: 14px;\n            color: var(--cyan);\n            flex-shrink: 0;\n        }\n        .map-loc-t {\n            font-family: var(--font-mono);\n            font-size: 11px;\n            color: var(--ayu-text-primary);\n            font-weight: 500;\n        }\n        .map-loc-s {\n            font-size: 9px;\n            color: var(--ayu-text-secondary);\n            margin-top: 1px;\n        }\n        .map-mask {\n            position: absolute;\n            inset: 0;\n            z-index: 10;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            gap: 12px;\n            opacity: 0;\n            pointer-events: none;\n            transition: all .5s;\n            background: rgba(3, 5, 12, 0.65);\n            backdrop-filter: blur(6px);\n            border-radius: 0 0 14px 14px;\n        }\n        .map-mask.show {\n            opacity: 1;\n            pointer-events: auto;\n        }\n        .map-mask svg {\n            width: 36px;\n            height: 36px;\n            color: var(--safe);\n            filter: drop-shadow(0 0 12px rgba(34, 230, 168, 0.4));\n            animation: maskPulse 2s ease-in-out infinite;\n        }\n        .map-mask-t {\n            font-family: var(--font-display);\n            font-size: 16px;\n            font-weight: 700;\n            color: var(--safe);\n            text-shadow: 0 0 20px rgba(34, 230, 168, 0.4);\n            letter-spacing: 0.5px;\n        }\n        .map-mask-s {\n            font-family: var(--font-mono);\n            font-size: 10px;\n            color: rgba(34, 230, 168, 0.7);\n            letter-spacing: 1.5px;\n            text-transform: uppercase;\n        }\n        @keyframes maskPulse {\n            0%,\n            100% {\n                transform: scale(1);\n                filter: drop-shadow(0 0 12px rgba(34, 230, 168, 0.4));\n            }\n            50% {\n                transform: scale(1.08);\n                filter: drop-shadow(0 0 20px rgba(34, 230, 168, 0.6));\n            }\n        }\n\n        \/* ---- cta row ---- *\/\n        .map-cta-row {\n            display: grid;\n            grid-template-columns: 1fr 1fr;\n            gap: 20px;\n            margin-top: 32px;\n            align-items: stretch;\n        }\n        .map-cta-row .mapc {\n            margin-top: 0;\n        }\n        .map-cta-row .cta-block {\n            margin-top: 0;\n        }\n        .map-cta-row .mapw {\n            height: auto;\n            flex: 1;\n            min-height: 320px;\n        }\n        .map-cta-row .cta-hero {\n            height: 100%;\n            justify-content: center;\n        }\n        .cta-block {\n            margin-top: 40px;\n            padding: 0;\n            border-radius: 20px;\n            border: none;\n            background: transparent;\n            position: relative;\n            overflow: hidden;\n            display: flex;\n            flex-direction: column;\n            align-items: stretch;\n            gap: 0;\n        }\n        .cta-hero {\n            position: relative;\n            padding: 48px 44px;\n            border-radius: 20px;\n            background:\n                radial-gradient(100% 120% at 50% -20%, rgba(79, 110, 247, 0.12), transparent 60%),\n                radial-gradient(80% 80% at 20% 100%, rgba(138, 107, 255, 0.10), transparent 50%),\n                linear-gradient(180deg, rgba(9, 13, 36, 0.92), rgba(6, 8, 21, 0.88));\n            border: 1px solid rgba(79, 110, 247, 0.14);\n            backdrop-filter: blur(20px);\n            -webkit-backdrop-filter: blur(20px);\n            box-shadow: 0 8px 40px rgba(0, 0, 0, 0.35), inset 0 1px 0 rgba(255, 255, 255, 0.04);\n            isolation: isolate;\n            display: flex;\n            flex-direction: column;\n            align-items: center;\n            text-align: center;\n            gap: 20px;\n            overflow: hidden;\n        }\n        .cta-hero::before {\n            content: '';\n            position: absolute;\n            inset: -30%;\n            z-index: 0;\n            pointer-events: none;\n            background:\n                radial-gradient(40% 50% at 30% 20%, rgba(79, 110, 247, 0.14), transparent 70%),\n                radial-gradient(40% 50% at 70% 80%, rgba(138, 107, 255, 0.12), transparent 70%);\n            filter: blur(50px);\n            animation: ctaSmoke 10s ease-in-out infinite alternate;\n            opacity: .8;\n        }\n        @keyframes ctaSmoke {\n            0% {\n                transform: translate(-1%, 1%) scale(1);\n            }\n            100% {\n                transform: translate(1%, -1%) scale(1.06);\n            }\n        }\n        .cta-hero>* {\n            position: relative;\n            z-index: 1;\n        }\n        .cta-badge {\n            display: inline-flex;\n            align-items: center;\n            gap: 7px;\n            font-family: var(--font-mono);\n            font-size: 10px;\n            letter-spacing: 2px;\n            text-transform: uppercase;\n            font-weight: 700;\n            color: var(--cyan);\n            padding: 6px 14px;\n            border-radius: 999px;\n            background: rgba(79, 110, 247, 0.07);\n            border: 1px solid rgba(79, 110, 247, 0.2);\n        }\n        .cta-badge-dot {\n            width: 5px;\n            height: 5px;\n            border-radius: 50%;\n            background: var(--cyan);\n            box-shadow: 0 0 8px var(--cyan);\n            animation: lp 1.5s ease-in-out infinite;\n        }\n        .cta-headline {\n            font-family: var(--font-display);\n            font-weight: 700;\n            font-size: clamp(22px, 3.5vw, 32px);\n            color: var(--ayu-text-primary);\n            letter-spacing: -0.02em;\n            line-height: 1.15;\n            max-width: 540px;\n        }\n        .cta-headline em {\n            font-style: normal;\n            color: var(--cyan);\n        }\n        .cta-desc {\n            font-family: var(--font-body);\n            font-size: clamp(13px, 1.2vw, 15px);\n            color: var(--ayu-text-secondary);\n            line-height: 1.65;\n            max-width: 480px;\n        }\n        .cta-actions {\n            display: flex;\n            align-items: center;\n            gap: 16px;\n            margin-top: 4px;\n            flex-wrap: wrap;\n            justify-content: center;\n        }\n        .cta-btn {\n            display: inline-flex;\n            align-items: center;\n            justify-content: center;\n            gap: 10px;\n            padding: 14px 30px;\n            border-radius: 12px;\n            border: 1px solid rgba(79, 110, 247, 0.4);\n            background: linear-gradient(135deg, rgba(79, 110, 247, 0.16), rgba(138, 107, 255, 0.12));\n            font-family: var(--font-display);\n            font-weight: 600;\n            font-size: 14px;\n            color: var(--ayu-text-primary);\n            letter-spacing: 0.2px;\n            cursor: pointer;\n            transition: all .3s cubic-bezier(.2, .8, .2, 1);\n            position: relative;\n            overflow: hidden;\n            text-decoration: none;\n        }\n        .cta-btn::before {\n            content: '';\n            position: absolute;\n            inset: 0;\n            border-radius: 12px;\n            background: linear-gradient(135deg, rgba(255, 255, 255, 0.06), transparent);\n            pointer-events: none;\n        }\n        .cta-btn svg {\n            width: 18px;\n            height: 18px;\n            color: var(--cyan);\n            transition: transform .3s;\n        }\n        .cta-btn:hover {\n            transform: translateY(-2px);\n            box-shadow: 0 8px 30px rgba(79, 110, 247, 0.22);\n            border-color: rgba(79, 110, 247, 0.6);\n            background: linear-gradient(135deg, rgba(79, 110, 247, 0.24), rgba(138, 107, 255, 0.18));\n        }\n        .cta-btn:hover svg {\n            transform: translateX(2px);\n        }\n        .cta-btn:active {\n            transform: translateY(0);\n        }\n        .cta-link {\n            font-family: var(--font-body);\n            font-size: 13px;\n            font-weight: 500;\n            color: var(--ayu-text-secondary);\n            cursor: pointer;\n            transition: color .3s;\n            text-decoration: none;\n            display: inline-flex;\n            align-items: center;\n            gap: 6px;\n        }\n        .cta-link:hover {\n            color: var(--ayu-text-primary);\n        }\n        .cta-link svg {\n            width: 14px;\n            height: 14px;\n            transition: transform .25s;\n        }\n        .cta-link:hover svg {\n            transform: translateX(2px);\n        }\n        .cta-trust {\n            display: flex;\n            align-items: center;\n            gap: 16px;\n            margin-top: 6px;\n            flex-wrap: wrap;\n            justify-content: center;\n            font-family: var(--font-mono);\n            font-size: 10px;\n            letter-spacing: 0.5px;\n            color: var(--ayu-text-tertiary);\n            text-transform: uppercase;\n        }\n        .cta-trust-sep {\n            width: 3px;\n            height: 3px;\n            border-radius: 50%;\n            background: rgba(79, 110, 247, 0.2);\n        }\n\n        @media(max-width:600px) {\n            .map-cta-row {\n                grid-template-columns: 1fr;\n            }\n            .map-cta-row .mapw {\n                min-height: 260px;\n            }\n            .cta-hero {\n                padding: 32px 24px;\n            }\n            .cta-actions {\n                flex-direction: column;\n                width: 100%;\n            }\n            .cta-btn {\n                width: 100%;\n            }\n        }\n\n        \/* ---- phone pill ---- *\/\n        .phone-pill {\n            position: fixed;\n            right: 24px;\n            top: 50%;\n            transform: translateY(-50%);\n            z-index: 50;\n            display: flex;\n            align-items: center;\n            gap: 0;\n            flex-direction: row-reverse;\n            padding: 0;\n            border: 0;\n            border-radius: 999px;\n            background: transparent;\n            box-shadow: none;\n            cursor: pointer;\n            transition: all .35s;\n        }\n        .phone-pill .pp-icon {\n            width: 52px;\n            height: 52px;\n            border-radius: 50%;\n            flex-shrink: 0;\n            padding: 0;\n            background: linear-gradient(135deg, var(--cyan), var(--blue));\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            box-shadow: 0 4px 20px rgba(79, 110, 247, 0.35);\n            border: 1px solid rgba(255, 255, 255, 0.25);\n            transition: all .3s;\n        }\n        .phone-pill:hover .pp-icon {\n            transform: scale(1.08);\n            box-shadow: 0 6px 26px rgba(79, 110, 247, 0.5);\n        }\n        .phone-pill .pp-icon svg {\n            width: 22px;\n            height: 22px;\n            color: #04070f;\n        }\n        .phone-pill .pp-text {\n            font-family: var(--font-mono);\n            font-weight: 600;\n            font-size: 14px;\n            color: var(--ayu-text-primary);\n            white-space: nowrap;\n            direction: ltr;\n            text-align: right;\n            max-width: 0;\n            opacity: 0;\n            overflow: hidden;\n            padding: 12px 0;\n            border-radius: 999px;\n            background: linear-gradient(135deg, rgba(9, 13, 36, 0.92), rgba(6, 8, 21, 0.85));\n            border: 1px solid var(--border-strong);\n            backdrop-filter: blur(12px);\n            -webkit-backdrop-filter: blur(12px);\n            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3), 0 0 20px rgba(79, 110, 247, 0.1);\n            transition: max-width .4s ease, opacity .3s ease, padding .4s ease, margin .4s ease;\n        }\n        .phone-pill.open .pp-text {\n            max-width: 260px;\n            opacity: 1;\n            padding: 12px 18px;\n            margin-right: 12px;\n        }\n        @media(max-width:480px) {\n            .phone-pill {\n                right: 14px;\n            }\n            .phone-pill .pp-icon {\n                width: 46px;\n                height: 46px;\n            }\n        }\n\n        .pov {\n            display: none;\n            position: fixed;\n            inset: 0;\n            z-index: 100;\n            background: rgba(3, 5, 12, 0.88);\n            backdrop-filter: blur(8px);\n            flex-direction: column;\n            align-items: center;\n            justify-content: center;\n            gap: 18px;\n        }\n        .pov.show {\n            display: flex;\n        }\n        .povs {\n            width: 76px;\n            height: 76px;\n            border-radius: 18px;\n            background: linear-gradient(135deg, rgba(34, 230, 168, 0.1), rgba(34, 230, 168, 0.15));\n            border: 1px solid var(--safe);\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            animation: psp 1.5s ease-in-out infinite;\n        }\n        @keyframes psp {\n            0%,\n            100% {\n                box-shadow: 0 0 0 0 rgba(34, 230, 168, 0.3);\n            }\n            50% {\n                box-shadow: 0 0 0 18px rgba(34, 230, 168, 0);\n            }\n        }\n        .povs svg {\n            width: 34px;\n            height: 34px;\n            color: var(--safe);\n        }\n        .povt {\n            font-family: var(--font-display);\n            font-size: 18px;\n            font-weight: 700;\n            color: var(--safe);\n        }\n        .povd {\n            color: var(--ayu-text-secondary);\n            font-size: 12px;\n            text-align: center;\n            max-width: 280px;\n            line-height: 1.5;\n        }\n\n        @media(max-width:480px) {\n            main {\n                padding-top: 100px;\n                padding-bottom: 36px;\n            }\n            .hl {\n                font-size: 20px;\n            }\n            .vti {\n                font-size: 16px;\n            }\n            .tgw {\n                width: 100%;\n                justify-content: space-between;\n            }\n            .map-cta-row .mapw {\n                min-height: 220px;\n            }\n            .map-loc {\n                bottom: 8px;\n                left: 8px;\n                padding: 8px 10px;\n            }\n        }\n        @media(prefers-reduced-motion:reduce) {\n            .card {\n                animation: none;\n                opacity: 1;\n                transform: none;\n            }\n            .cta-hero::before {\n                animation: none;\n            }\n            .hero-block::after {\n                animation: none;\n            }\n        }\n    <\/style>\n<\/head>\n<body>\n\n    <!-- \u2500\u2500 PAGE BACKGROUND \u2500\u2500 -->\n    <div class=\"page-bg\"><\/div>\n\n    <!-- \u2500\u2500 BACKGROUND LAYERS (restricted to middle 60%) \u2500\u2500 -->\n    <div class=\"bg-layers\">\n        <div class=\"ayu-bg-world\"><\/div>\n        <div class=\"ayu-bg-dots\"><\/div>\n        <div class=\"ayu-bg-glow\"><\/div>\n        <div class=\"ayu-bg-orb-1\"><\/div>\n        <div class=\"ayu-bg-orb-2\"><\/div>\n    <\/div>\n\n    <div class=\"ayu-content-overlay\">\n        <main>\n\n            <!-- START -->\n            <div id=\"start-view\">\n                <div class=\"start-shield\">\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.5\" aria-hidden=\"true\">\n                        <path d=\"M12 2 3 6v6c0 5.2 3.8 9.8 9 11 5.2-1.2 9-5.8 9-11V6l-9-4Z\" \/>\n                        <path d=\"M12 8v4M12 16h.01\" stroke-width=\"2\" stroke-linecap=\"round\" \/>\n                    <\/svg>\n                <\/div>\n                <div class=\"start-title\">Network <span>Security Scan<\/span><\/div>\n                <div class=\"start-sub\">Real-time diagnostic of your IP exposure, browser fingerprint, open ports, blacklists, and threat intelligence \u2014 entirely client-side, zero data stored.<\/div>\n                <button class=\"start-cta\" id=\"startBtn\" aria-label=\"Start network security scan\">\n                    Start Security Scan\n                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n                <\/button>\n                <div class=\"start-features\">\n                    <div class=\"start-feat\"><span class=\"start-feat-dot\"><\/span>IP &amp; location<\/div>\n                    <div class=\"start-feat\"><span class=\"start-feat-dot\"><\/span>Threat intel<\/div>\n                    <div class=\"start-feat\"><span class=\"start-feat-dot\"><\/span>Browser fingerprint<\/div>\n                    <div class=\"start-feat\"><span class=\"start-feat-dot\"><\/span>Speed test<\/div>\n                    <div class=\"start-feat\"><span class=\"start-feat-dot\"><\/span>Risk score<\/div>\n                <\/div>\n            <\/div>\n\n            <!-- SCAN -->\n            <div id=\"scan-stage\" role=\"status\" aria-live=\"polite\">\n                <div class=\"eyebrow\">AssistYU Network Scan <span>\u00b7 real-time diagnostic<\/span><\/div>\n                <h1 class=\"hl\">Your connection is <span class=\"sw-t scanning\" id=\"sw\">being analyzed<\/span><\/h1>\n                <div class=\"scan-grid\">\n                    <div class=\"radar-sec\" aria-hidden=\"true\">\n                        <div class=\"radar-box\"><canvas id=\"radarCanvas\" width=\"640\" height=\"640\"><\/canvas><\/div>\n                        <div class=\"rl\">Radar sweep <span class=\"live\">\u25cf live<\/span><\/div>\n                    <\/div>\n                    <div class=\"ensec\">\n                        <div class=\"enb\" role=\"progressbar\" aria-label=\"Scan progress\" aria-valuemin=\"0\" aria-valuemax=\"100\" aria-valuenow=\"0\" id=\"enbwrap\">\n                            <div class=\"enbf\" id=\"ebf\"><\/div>\n                        <\/div>\n                        <div class=\"enp\" id=\"enp\"><span class=\"pct\">0%<\/span><\/div>\n                        <div class=\"en-status\" id=\"en-status\">Initializing scan\u2026<\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n            <!-- VERDICT -->\n            <div id=\"verdict-view\">\n\n                <div id=\"verdict-header\" class=\"verdict-header\">\n                    <div class=\"vb dg\" id=\"vbadge\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 2 3 6v6c0 5.2 3.8 9.8 9 11 5.2-1.2 9-5.8 9-11V6l-9-4Z\"\/><path d=\"M12 8v5M12 16h.01\"\/><\/svg><\/div>\n                    <div class=\"vht-title\" id=\"vMainTitle\">AssistYU Network Scan<\/div>\n                    <div class=\"vht-desc\" id=\"vMainDesc\">Your network is exposed.<\/div>\n                <\/div>\n\n                <!-- HERO: two blocks -->\n                <div class=\"hero-blocks\" id=\"hero-container\">\n                    <!-- left block -->\n                    <div class=\"hero-block hero-left exposed\" id=\"hero-left\">\n                        <div class=\"threats-header\">\n                            <span class=\"threats-label danger\" id=\"threats-label\">THREATS DETECTED<\/span>\n                            <span class=\"threats-badges\">\n                                <span class=\"badge crit\" id=\"vbr-crit\"><span class=\"dot\"><\/span><span id=\"crit-n\">0<\/span> critical<\/span>\n                                <span class=\"badge warn\" id=\"vbr-warn\"><span class=\"dot\"><\/span><span id=\"warn-n\">0<\/span> warning<\/span>\n                            <\/span>\n                        <\/div>\n                        <div class=\"threats-count\"><span class=\"num\" id=\"threats-num\">0<\/span><\/div>\n                        <div class=\"threats-detail\" id=\"vtitle\"><span class=\"highlight\">\u2014<\/span> issues found on your current connection<\/div>\n                        <div class=\"toggle-row\" id=\"tgw\">\n                            <span class=\"toggle-label\" id=\"toggle-label\">Protected mode<\/span>\n                            <label class=\"swi\"><input type=\"checkbox\" id=\"ptog\" aria-label=\"Toggle protected mode\"><span class=\"sws\"><\/span><\/label>\n                        <\/div>\n                    <\/div>\n                    <!-- right block -->\n                    <div class=\"hero-block hero-right exposed\" id=\"hero-right\">\n                        <div class=\"gauge-wrap\">\n                            <div class=\"gauge-ring\">\n                                <svg viewBox=\"0 0 120 120\">\n                                    <circle class=\"g-bg\" cx=\"60\" cy=\"60\" r=\"50\"\/>\n                                    <circle class=\"g-fill\" id=\"rg-fill\" cx=\"60\" cy=\"60\" r=\"50\" stroke-dasharray=\"314.16\" stroke-dashoffset=\"314.16\"\/>\n                                <\/svg>\n                                <div class=\"g-inner\"><\/div>\n                                <div class=\"g-num\">\n                                    <span class=\"g-num-val\" id=\"rg-num\">0<\/span>\n                                    <span class=\"g-num-of\">\/100<\/span>\n                                <\/div>\n                            <\/div>\n                            <div class=\"gauge-grade\" id=\"rg-grade\">Grade \u2014<\/div>\n                            <div class=\"gauge-tags\" id=\"rg-sub\"><\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <!-- cards -->\n                <div class=\"rsec\">\n                    <div class=\"slab\">Network &amp; identity<\/div>\n                    <div class=\"g3\" id=\"gnet\"><\/div>\n                    <div class=\"slab\">Threat intelligence<\/div>\n                    <div class=\"g3\" id=\"gth\"><\/div>\n                    <div class=\"slab\">Device fingerprint<\/div>\n                    <div class=\"g2\" id=\"gdev\"><\/div>\n                    <div class=\"slab\">Security checks<\/div>\n                    <div class=\"g2\" id=\"gsec\"><\/div>\n                <\/div>\n\n                <!-- map + cta -->\n                <div class=\"map-cta-row\">\n                    <div class=\"mapc\">\n                        <div class=\"maph\">\n                            <div class=\"maph-l\"><svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 9v4M12 17h.01M10.3 3.9 1.8 18a2 2 0 0 0 1.7 3h17a2 2 0 0 0 1.7-3L13.7 3.9a2 2 0 0 0-3.4 0Z\"\/><\/svg> Approximate \u2014 derived from your public IP<\/div>\n                            <div class=\"maph-z\"><button type=\"button\" aria-label=\"Zoom out map\" onclick=\"var f=document.getElementById('mif');var s=f.src.replace(\/&amp;\/g,'&');var m=s.match(\/bbox=([^&]+)\/);if(m){var b=m[1].split(',').map(Number);var cx=(b[0]+b[2])\/2,cy=(b[1]+b[3])\/2;var w=(b[2]-b[0])*0.7,h=(b[3]-b[1])*0.7;f.src=s.replace(\/bbox=[^&]+\/,'bbox='+(cx-w)+','+(cy-h)+','+(cx+w)+','+(cy+h));}\">&#x2212;<\/button><button type=\"button\" aria-label=\"Zoom in map\" onclick=\"var f=document.getElementById('mif');var s=f.src.replace(\/&amp;\/g,'&');var m=s.match(\/bbox=([^&]+)\/);if(m){var b=m[1].split(',').map(Number);var cx=(b[0]+b[2])\/2,cy=(b[1]+b[3])\/2;var w=(b[2]-b[0])*1.4,h=(b[3]-b[1])*1.4;f.src=s.replace(\/bbox=[^&]+\/,'bbox='+(cx-w)+','+(cy-h)+','+(cx+w)+','+(cy+h));}\">&#x2b;<\/button><\/div>\n                        <\/div>\n                        <div class=\"mapw\" id=\"mapw\">\n                            <div class=\"map-click\" id=\"map-click\" role=\"button\" tabindex=\"0\" aria-label=\"Enable interactive map\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"11\" cy=\"11\" r=\"8\"\/><path d=\"M21 21l-4.35-4.35M11 8v6M8 11h6\"\/><\/svg><span>Click to enable map<\/span><div class=\"map-hint\">Scroll to zoom \u00b7 Drag to pan<\/div><\/div>\n                            <iframe id=\"mif\" loading=\"lazy\" referrerpolicy=\"no-referrer-when-downgrade\"><\/iframe>\n                            <div class=\"map-loc\" id=\"map-loc\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"10\" r=\"3\"\/><path d=\"M12 2a8 8 0 0 0-8 8c0 5.4 8 12 8 12s8-6.6 8-12a8 8 0 0 0-8-8Z\"\/><\/svg><div><div class=\"map-loc-t\" id=\"map-loc-t\">\u2014<\/div><div class=\"map-loc-s\" id=\"map-loc-s\">Approximate coordinates<\/div><\/div><\/div>\n                            <div class=\"map-mask\" id=\"map-mask\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 2 3 6v6c0 5.2 3.8 9.8 9 11 5.2-1.2 9-5.8 9-11V6l-9-4Z\"\/><path d=\"M9 12l2 2 4-4\"\/><\/svg><div class=\"map-mask-t\">Location masked<\/div><div class=\"map-mask-s\">Protected by AssistYU tunnel<\/div><\/div>\n                        <\/div>\n                    <\/div>\n                    <div class=\"cta-block\">\n                        <div class=\"cta-hero\">\n                            <div class=\"cta-badge\"><span class=\"cta-badge-dot\"><\/span>Protect your network<\/div>\n                            <div class=\"cta-headline\">Your scan found <em>vulnerabilities<\/em>.<br>Fix them now.<\/div>\n                            <div class=\"cta-desc\">Encrypt your traffic, mask your IP and block WebRTC leaks with one toggle. This scan ran entirely in your browser \u2014 nothing was sent to AssistYU servers.<\/div>\n                            <div class=\"cta-actions\">\n                                <a href=\"https:\/\/assistyu.com\/security-products\/\" target=\"_blank\" rel=\"noopener\" class=\"cta-btn\">\n                                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 2 3 6v6c0 5.2 3.8 9.8 9 11 5.2-1.2 9-5.8 9-11V6l-9-4Z\"\/><path d=\"M9 12l2 2 4-4\"\/><\/svg>\n                                    Get AssistYU Protection\n                                <\/a>\n                                <a href=\"https:\/\/assistyu.com\/contact\/\" target=\"_blank\" rel=\"noopener\" class=\"cta-link\">\n                                    Talk to an expert\n                                    <svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M5 12h14M12 5l7 7-7 7\"\/><\/svg>\n                                <\/a>\n                            <\/div>\n                            <div class=\"cta-trust\">\n                                <span>100% client-side<\/span>\n                                <span class=\"cta-trust-sep\"><\/span>\n                                <span>Zero data stored<\/span>\n                                <span class=\"cta-trust-sep\"><\/span>\n                                <span>No account needed<\/span>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n\n        <\/main>\n\n        <!-- PHONE PILL -->\n        <div class=\"phone-pill\" id=\"phone-pill\">\n            <button type=\"button\" class=\"pp-icon\" id=\"pp-icon\" aria-label=\"Show phone number\" aria-expanded=\"false\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"><path d=\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z\"\/><\/svg><\/button>\n            <a href=\"tel:+34951550227\" class=\"pp-text\" id=\"pp-text\">+34 9 515 502 27<\/a>\n        <\/div>\n\n        <div class=\"pov\" id=\"pov\">\n            <div class=\"povs\"><svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 2 3 6v6c0 5.2 3.8 9.8 9 11 5.2-1.2 9-5.8 9-11V6l-9-4Z\"\/><path d=\"M9 12l2 2 4-4\"\/><\/svg><\/div>\n            <div class=\"povt\">Protected mode active<\/div>\n            <div class=\"povd\">AssistYU is masking your IP, blocking WebRTC leaks and hiding your network fingerprint.<\/div>\n        <\/div>\n    <\/div>\n\n    <script>\n        document.addEventListener('DOMContentLoaded', function() {\n            (function() {\n                \/* =============================================\n                   RADAR CANVAS\n                   ============================================= *\/\n                var cv = document.getElementById('radarCanvas');\n                var ctx = cv.getContext('2d');\n                var W = cv.width,\n                    H = cv.height,\n                    cx = W \/ 2,\n                    cy = H \/ 2,\n                    R = W \/ 2 - 20;\n                var sweepAngle = 0;\n                var trailLen = 1.1;\n                var blipsData = [\n                    { a: 0.35, r: 0.65, c: 'cyan' }, { a: 1.8, r: 0.45, c: 'amber' },\n                    { a: 2.8, r: 0.80, c: 'cyan' }, { a: 3.8, r: 0.35, c: 'danger' },\n                    { a: 0.9, r: 0.55, c: 'cyan' }, { a: 4.5, r: 0.70, c: 'amber' },\n                    { a: 5.2, r: 0.50, c: 'cyan' }, { a: 2.0, r: 0.88, c: 'danger' }\n                ];\n                var blipAlpha = [0, 0, 0, 0, 0, 0, 0, 0];\n                var blipTarget = [1, 1, 1, 1, 1, 1, 1, 1];\n                var radarRunning = true;\n\n                function drawRadar(t) {\n                    if (!radarRunning) return;\n                    ctx.clearRect(0, 0, W, H);\n\n                    var grd = ctx.createRadialGradient(cx, cy, 0, cx, cy, R * 1.1);\n                    grd.addColorStop(0, 'rgba(79,110,247,0.04)');\n                    grd.addColorStop(1, 'transparent');\n                    ctx.fillStyle = grd;\n                    ctx.fillRect(0, 0, W, H);\n\n                    ctx.strokeStyle = 'rgba(79,110,247,0.25)';\n                    ctx.lineWidth = 1;\n                    [1, 0.834, 0.667, 0.5].forEach(function(s) {\n                        ctx.beginPath();\n                        ctx.arc(cx, cy, R * s, 0, Math.PI * 2);\n                        ctx.stroke();\n                    });\n\n                    ctx.strokeStyle = 'rgba(79,110,247,0.15)';\n                    ctx.lineWidth = 1;\n                    ctx.beginPath();\n                    ctx.moveTo(cx - R, cy);\n                    ctx.lineTo(cx + R, cy);\n                    ctx.stroke();\n                    ctx.beginPath();\n                    ctx.moveTo(cx, cy - R);\n                    ctx.lineTo(cx, cy + R);\n                    ctx.stroke();\n                    ctx.strokeStyle = 'rgba(79,110,247,0.06)';\n                    var d = R * 0.707;\n                    ctx.beginPath();\n                    ctx.moveTo(cx - d, cy - d);\n                    ctx.lineTo(cx + d, cy + d);\n                    ctx.stroke();\n                    ctx.beginPath();\n                    ctx.moveTo(cx + d, cy - d);\n                    ctx.lineTo(cx - d, cy + d);\n                    ctx.stroke();\n\n                    var segs = 60;\n                    for (var i = 0; i < segs; i++) {\n                        var frac = i \/ segs;\n                        var ang = sweepAngle - frac * trailLen;\n                        var alpha = (1 - frac) * 0.30;\n                        var sa = ang - 0.025,\n                            ea = ang + 0.025;\n                        ctx.beginPath();\n                        ctx.moveTo(cx, cy);\n                        ctx.arc(cx, cy, R, sa, ea);\n                        ctx.closePath();\n                        ctx.fillStyle = 'rgba(79,110,247,' + alpha + ')';\n                        ctx.fill();\n                    }\n\n                    ctx.save();\n                    ctx.translate(cx, cy);\n                    ctx.rotate(sweepAngle);\n                    var ag = ctx.createLinearGradient(0, 0, R, 0);\n                    ag.addColorStop(0, 'rgba(79,110,247,0.7)');\n                    ag.addColorStop(0.7, 'rgba(79,110,247,0.15)');\n                    ag.addColorStop(1, 'rgba(79,110,247,0)');\n                    ctx.beginPath();\n                    ctx.moveTo(0, 0);\n                    ctx.lineTo(R, 0);\n                    ctx.strokeStyle = ag;\n                    ctx.lineWidth = 3;\n                    ctx.stroke();\n                    ctx.beginPath();\n                    ctx.moveTo(0, 0);\n                    ctx.lineTo(R, 0);\n                    ctx.strokeStyle = 'rgba(79,110,247,0.9)';\n                    ctx.lineWidth = 1.5;\n                    ctx.stroke();\n                    ctx.restore();\n\n                    var pulseTime = (t % 3000) \/ 3000;\n                    for (var p = 0; p < 3; p++) {\n                        var pt = (pulseTime + p \/ 3) % 1;\n                        var pr = R * pt;\n                        var pa = (1 - pt) * 0.25;\n                        ctx.beginPath();\n                        ctx.arc(cx, cy, pr, 0, Math.PI * 2);\n                        ctx.strokeStyle = 'rgba(79,110,247,' + pa + ')';\n                        ctx.lineWidth = 1;\n                        ctx.stroke();\n                    }\n\n                    var bColors = { cyan: '79,110,247', amber: '255,184,77', danger: '255,61,104' };\n                    for (var i = 0; i < blipsData.length; i++) {\n                        var b = blipsData[i];\n                        var ba = b.a + sweepAngle;\n                        var bx = cx + Math.cos(ba) * R * b.r;\n                        var by = cy + Math.sin(ba) * R * b.r;\n                        var dist = ((sweepAngle - b.a) % (Math.PI * 2) + Math.PI * 2) % (Math.PI * 2);\n                        if (dist < 0.3) blipTarget[i] = 1;\n                        else blipTarget[i] = 0.15;\n                        blipAlpha[i] += (blipTarget[i] - blipAlpha[i]) * 0.08;\n                        var a = blipAlpha[i];\n                        var rgb = bColors[b.c];\n                        ctx.beginPath();\n                        ctx.arc(bx, by, 8, 0, Math.PI * 2);\n                        ctx.fillStyle = 'rgba(' + rgb + ',' + (a * 0.3) + ')';\n                        ctx.fill();\n                        ctx.beginPath();\n                        ctx.arc(bx, by, 3.5, 0, Math.PI * 2);\n                        ctx.fillStyle = 'rgba(' + rgb + ',' + a + ')';\n                        ctx.fill();\n                        ctx.beginPath();\n                        ctx.arc(bx, by, 1.5, 0, Math.PI * 2);\n                        ctx.fillStyle = 'rgba(255,255,255,' + (a * 0.7) + ')';\n                        ctx.fill();\n                    }\n\n                    ctx.beginPath();\n                    ctx.arc(cx, cy, 5, 0, Math.PI * 2);\n                    ctx.fillStyle = 'rgba(79,110,247,1)';\n                    ctx.fill();\n                    ctx.beginPath();\n                    ctx.arc(cx, cy, 12, 0, Math.PI * 2);\n                    ctx.fillStyle = 'rgba(79,110,247,0.15)';\n                    ctx.fill();\n                    ctx.beginPath();\n                    ctx.arc(cx, cy, 22, 0, Math.PI * 2);\n                    ctx.fillStyle = 'rgba(79,110,247,0.06)';\n                    ctx.fill();\n\n                    sweepAngle += 0.025;\n                    requestAnimationFrame(drawRadar);\n                }\n\n                \/* =============================================\n                   SCAN STEPS\n                   ============================================= *\/\n                var STEPS = [\n                    { l: 'Resolving public IP', i: '\ud83c\udf10' }, { l: 'Fingerprinting ISP', i: '\ud83d\udce1' },\n                    { l: 'Triangulating location', i: '\ud83d\udccd' }, { l: 'Checking encryption', i: '\ud83d\udd12' },\n                    { l: 'Testing VPN \/ DC', i: '\ud83d\udee1\ufe0f' }, { l: 'WebRTC leak scan', i: '\u26a1' },\n                    { l: 'Analyzing connection type', i: '\ud83d\udcf6' }, { l: 'Measuring network speed', i: '\ud83d\udcca' },\n                    { l: 'Device fingerprint', i: '\ud83d\udda5\ufe0f' }, { l: 'Canvas fingerprint', i: '\ud83c\udfa8' },\n                    { l: 'Audio fingerprint', i: '\ud83d\udd0a' }, { l: 'Enumerating fonts', i: '\ud83d\udd24' },\n                    { l: 'Checking IP blacklists', i: '\ud83d\udccb' }, { l: 'VPN \/ proxy detection', i: '\ud83d\udd75\ufe0f' },\n                    { l: 'Scanning open ports & CVEs', i: '\ud83d\udd13' }, { l: 'Cross-checking timezone', i: '\ud83d\udd50' },\n                    { l: 'Evaluating data exposure', i: '\ud83d\udd0d' }, { l: 'Computing risk score', i: '\ud83d\udcc8' },\n                    { l: 'Compiling threat report', i: '\ud83d\udccb' }, { l: 'Generating security verdict', i: '\u2705' }\n                ];\n\n                var si = 0,\n                    sd = 700;\n                var bf, pbar, enpEl, statusEl;\n                var D;\n\n                document.getElementById('startBtn').addEventListener('click', function() {\n                    console.log('Scan started');\n                    document.getElementById('start-view').style.display = 'none';\n                    var ss = document.getElementById('scan-stage');\n                    ss.style.display = 'block';\n\n                    si = 0;\n                    bf = document.getElementById('ebf');\n                    pbar = document.getElementById('enbwrap');\n                    enpEl = document.getElementById('enp');\n                    statusEl = document.getElementById('en-status');\n\n                    radarRunning = true;\n                    requestAnimationFrame(drawRadar);\n\n                    var tm = setInterval(function() {\n                        si++;\n                        if (si < STEPS.length) {\n                            var p = Math.round(((si + 1) \/ STEPS.length) * 100);\n                            bf.style.width = p + '%';\n                            pbar.setAttribute('aria-valuenow', p);\n                            enpEl.innerHTML = '<span class=\"pct\">' + p + '%<\/span>';\n                            statusEl.textContent = STEPS[si] ? STEPS[si].l + '\u2026' : 'Scanning\u2026';\n                        } else {\n                            clearInterval(tm);\n                            bf.style.width = '100%';\n                            pbar.setAttribute('aria-valuenow', 100);\n                            enpEl.innerHTML = '<span class=\"pct\">100%<\/span>';\n                            statusEl.className = 'en-status done';\n                            statusEl.innerHTML = 'Generating report<\/span> \u2014 almost there\u2026';\n                            setTimeout(function() {\n                                startDataCollection();\n                            }, 800);\n                        }\n                    }, sd);\n                });\n\n                function startDataCollection() {\n                    D = {\n                        ip: null,\n                        city: null,\n                        region: null,\n                        country: null,\n                        cISO: null,\n                        lat: null,\n                        lon: null,\n                        isp: null,\n                        org: null,\n                        asn: null,\n                        tz: null,\n                        proto: location.protocol === 'https:' ? 'https' : 'http',\n                        dnt: navigator.doNotTrack === '1' || window.doNotTrack === '1' || navigator.doNotTrack ===\n                        'yes',\n                        ua: navigator.userAgent,\n                        lang: navigator.language,\n                        langs: navigator.languages ? Array.from(navigator.languages) : [],\n                        sW: screen.width,\n                        sH: screen.height,\n                        cd: screen.colorDepth,\n                        pr: window.devicePixelRatio || 1,\n                        wIPs: [],\n                        gpu: null,\n                        ipOK: false,\n                        hc: navigator.hardwareConcurrency || null,\n                        dm: navigator.deviceMemory || null,\n                        mt: navigator.maxTouchPoints || 0,\n                        ck: navigator.cookieEnabled,\n                        pc: navigator.plugins ? navigator.plugins.length : 0,\n                        effType: null,\n                        downlink: null,\n                        rtt: null,\n                        saveData: false,\n                        online: navigator.onLine,\n                        webdriver: !!navigator.webdriver,\n                        brTz: null,\n                        tzMatch: null,\n                        battLevel: null,\n                        battCharging: null,\n                        langMatch: null,\n                        shodanPorts: [],\n                        shodanVulns: [],\n                        shodanTags: [],\n                        shodanCpes: [],\n                        shodanOK: false,\n                        vpnDetected: false,\n                        proxyDetected: false,\n                        torDetected: false,\n                        hostingDetected: false,\n                        blacklisted: false,\n                        blacklistCount: 0,\n                        blacklistSources: '',\n                        canvasHash: null,\n                        audioHash: null,\n                        fontCount: 0,\n                        fontList: '',\n                        speedMbps: null,\n                        speedMs: null,\n                        speedBytes: 0,\n                        riskScore: 0,\n                        riskGrade: 'F'\n                    };\n\n                    \/* canvas fingerprint *\/\n                    try {\n                        var cc = document.createElement('canvas');\n                        cc.width = 280;\n                        cc.height = 60;\n                        var cctx = cc.getContext('2d');\n                        cctx.textBaseline = 'top';\n                        cctx.font = '14px Arial';\n                        cctx.fillStyle = '#f60';\n                        cctx.fillRect(0, 0, 280, 60);\n                        cctx.fillStyle = '#069';\n                        cctx.fillText('AssistYU fingerprint', 2, 2);\n                        cctx.fillStyle = 'rgba(102,204,0,0.7)';\n                        cctx.fillText('AssistYU fingerprint', 4, 4);\n                        D.canvasHash = cc.toDataURL().slice(-128);\n                        var h = 0;\n                        for (var ci = 0; ci < D.canvasHash.length; ci++) { h = ((h << 5) - h) + D.canvasHash\n                            .charCodeAt(ci);\n                            h |= 0; }\n                        D.canvasHash = h.toString(36);\n                    } catch (e) {}\n\n                    \/* audio *\/\n                    try {\n                        var Ac = window.OfflineAudioContext || window.webkitOfflineAudioContext;\n                        if (Ac) {\n                            var ac = new Ac(1, 44100, 44100);\n                            var osc = ac.createOscillator();\n                            osc.type = 'triangle';\n                            osc.frequency.setValueAtTime(10000, ac.currentTime);\n                            var comp = ac.createDynamicsCompressor();\n                            osc.connect(comp);\n                            comp.connect(ac.destination);\n                            osc.start(0);\n                            ac.startRendering().then(function(buf) {\n                                var d = buf.getChannelData(0).slice(4500, 5000);\n                                var sum = 0;\n                                for (var ai = 0; ai < d.length; ai++) sum += Math.abs(d[ai]);\n                                D.audioHash = Math.round(sum * 1000).toString(36);\n                            }).catch(function() {});\n                        }\n                    } catch (e) {}\n\n                    \/* fonts *\/\n                    try {\n                        var testFonts = ['Arial', 'Verdana', 'Helvetica', 'Times New Roman', 'Courier New',\n                            'Georgia', 'Palatino', 'Garamond', 'Comic Sans MS', 'Impact', 'Lucida Console',\n                            'Tahoma', 'Trebuchet MS', 'Calibri', 'Cambria', 'Segoe UI', 'Roboto', 'Open Sans',\n                            'Lato', 'Ubuntu', 'Fira Code', 'Consolas', 'Menlo', 'Monaco'\n                        ];\n                        var tc = document.createElement('span');\n                        tc.style.cssText =\n                            'position:absolute;left:-9999px;font-size:72px;font-weight:bold;letter-spacing:0;opacity:0;';\n                        tc.textContent = 'mmmmmmmmmmlli';\n                        document.body.appendChild(tc);\n                        var baseW = tc.offsetWidth;\n                        var found = [];\n                        testFonts.forEach(function(f) {\n                            tc.style.fontFamily = '\"' + f + '\",monospace';\n                            if (tc.offsetWidth !== baseW) found.push(f);\n                        });\n                        document.body.removeChild(tc);\n                        D.fontCount = found.length;\n                        D.fontList = found.join(', ');\n                    } catch (e) {}\n\n                    \/* IP geo *\/\n                    var ipF = fetch('https:\/\/ipwho.is\/', { cache: 'no-store' }).then(function(r) { return r.json(); })\n                        .then(function(j) {\n                            if (j && j.success !== false && j.ip && isValidIP(j.ip)) {\n                                D.ip = j.ip;\n                                D.city = j.city;\n                                D.region = j.region;\n                                D.country = j.country;\n                                D.cISO = j.country_code;\n                                D.lat = typeof j.latitude === 'number' && isFinite(j.latitude) ? j.latitude :\n                                null;\n                                D.lon = typeof j.longitude === 'number' && isFinite(j.longitude) ? j.longitude :\n                                null;\n                                D.isp = j.connection && (j.connection.isp || j.connection.org) || null;\n                                D.org = j.connection && j.connection.org || null;\n                                D.asn = j.connection && j.connection.asn ? 'AS' + j.connection.asn : null;\n                                D.tz = j.timezone && j.timezone.id || null;\n                                D.ipOK = true;\n                            }\n                        }).catch(function() {\n                            return fetch('https:\/\/ipapi.co\/json\/', { cache: 'no-store' }).then(function(r) {\n                                return r.json();\n                            }).then(function(j) {\n                                if (!j.ip || !isValidIP(j.ip)) { D.ipOK = false; return; }\n                                D.ip = j.ip;\n                                D.city = j.city;\n                                D.region = j.region;\n                                D.country = j.country_name;\n                                D.cISO = j.country_code;\n                                D.lat = typeof j.latitude === 'number' && isFinite(j.latitude) ? j\n                                    .latitude : null;\n                                D.lon = typeof j.longitude === 'number' && isFinite(j.longitude) ? j\n                                    .longitude : null;\n                                D.isp = j.org;\n                                D.org = j.org;\n                                D.asn = j.asn;\n                                D.tz = j.timezone;\n                                D.ipOK = true;\n                            }).catch(function() { D.ipOK = false; });\n                        });\n\n                    \/* WebRTC *\/\n                    var wP = new Promise(function(res) {\n                        try {\n                            var pc = new RTCPeerConnection({ iceServers: [{ urls: 'stun:stun.l.google.com:19302' }] });\n                            var f = new Set();\n                            pc.createDataChannel('');\n                            pc.onicecandidate = function(e) {\n                                if (!e.candidate) { pc.close();\n                                    res(Array.from(f)); return; }\n                                var ip = e.candidate.candidate.split(' ')[4];\n                                if (ip && (ip.match(\/^(\\d{1,3}\\.){3}\\d{1,3}$\/) || ip.indexOf(':') > -1)) {\n                                    if (!ip.startsWith('0.0.0.0')) f.add(ip);\n                                }\n                            };\n                            pc.createOffer().then(function(o) { pc.setLocalDescription(o); });\n                            setTimeout(function() { res(Array.from(f));\n                                try { pc.close(); } catch (e) {} }, 1400);\n                        } catch (err) { res([]); }\n                    });\n\n                    \/* connection API *\/\n                    try {\n                        var conn = navigator.connection || navigator.mozConnection || navigator.webkitConnection;\n                        if (conn) {\n                            D.effType = conn.effectiveType || null;\n                            D.downlink = conn.downlink != null ? conn.downlink : null;\n                            D.rtt = conn.rtt != null ? conn.rtt : null;\n                            D.saveData = !!conn.saveData;\n                        }\n                    } catch (e) {}\n\n                    \/* speed test *\/\n                    var speedP = new Promise(function(res) {\n                        try {\n                            var chunks = [\n                                { url: 'https:\/\/speed.cloudflare.com\/__down?bytes=5000000', size: 5000000 },\n                                { url: 'https:\/\/speed.cloudflare.com\/__down?bytes=10000000', size: 10000000 },\n                                { url: 'https:\/\/speed.cloudflare.com\/__down?bytes=10000000', size: 10000000 }\n                            ];\n                            var totalBytes = 0;\n                            var t0 = 0;\n                            var done = false;\n\n                            function finish() {\n                                if (done) return;\n                                done = true;\n                                var elapsed = (performance.now() - t0) \/ 1000;\n                                if (elapsed > 0.5 && totalBytes > 0) {\n                                    D.speedMbps = ((totalBytes * 8) \/ elapsed \/ 1000000).toFixed(1);\n                                    D.speedMs = Math.round(elapsed * 1000);\n                                    D.speedBytes = totalBytes;\n                                }\n                                res();\n                            }\n                            var timeout = setTimeout(finish, 12000);\n                            t0 = performance.now();\n                            var chain = Promise.resolve();\n                            chunks.forEach(function(c) {\n                                chain = chain.then(function() {\n                                    if (done) return;\n                                    return fetch(c.url, { cache: 'no-store' }).then(function(r) {\n                                        return r.arrayBuffer();\n                                    }).then(function(buf) {\n                                        if (!done) totalBytes += buf.byteLength;\n                                    }).catch(function() {});\n                                });\n                            });\n                            chain.then(function() { clearTimeout(timeout);\n                                finish(); });\n                        } catch (e) { res(); }\n                    });\n\n                    \/* timezone *\/\n                    try { D.brTz = Intl.DateTimeFormat().resolvedOptions().timeZone || null; } catch (e) {}\n\n                    \/* battery *\/\n                    var battP = new Promise(function(res) {\n                        try {\n                            if (navigator.getBattery) {\n                                navigator.getBattery().then(function(b) {\n                                    D.battLevel = b.level != null ? Math.round(b.level * 100) : null;\n                                    D.battCharging = !!b.charging;\n                                    res();\n                                }).catch(function() { res(); });\n                            } else { res(); }\n                        } catch (e) { res(); }\n                    });\n\n                    \/* GPU *\/\n                    try {\n                        var glCanvas = document.createElement('canvas');\n                        var gl = glCanvas.getContext('webgl') || glCanvas.getContext('experimental-webgl');\n                        if (gl) { var db = gl.getExtension('WEBGL_debug_renderer_info');\n                            if (db) D.gpu = gl.getParameter(db.UNMASKED_RENDERER_WEBGL); }\n                    } catch (e) {}\n\n                    function isValidIP(ip) { return typeof ip === 'string' && \/^\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}$\/\n                            .test(ip); }\n\n                    var shodanP = ipF.then(function() {\n                        if (!D.ip || !isValidIP(D.ip)) return;\n                        return fetch('https:\/\/internetdb.shodan.io\/' + D.ip, { cache: 'no-store' }).then(function(\n                            r) { return r.json(); }).then(function(j) {\n                            D.shodanPorts = j.ports || [];\n                            D.shodanVulns = j.vulns || [];\n                            D.shodanTags = j.tags || [];\n                            D.shodanCpes = j.cpes || [];\n                            D.shodanOK = true;\n                        }).catch(function() {});\n                    });\n\n                    var blacklistP = ipF.then(function() {\n                        if (!D.ip || !isValidIP(D.ip)) return;\n                        return fetch('https:\/\/hackmyip.com\/api\/blacklist?ip=' + D.ip, { cache: 'no-store' })\n                            .then(function(r) { return r.json(); }).then(function(j) {\n                                if (j && j.blacklisted !== undefined) { D.blacklisted = !!j.blacklisted;\n                                    D.blacklistCount = j.listed_on || 0;\n                                    D.blacklistSources = j.sources ? j.sources.join(', ') : ''; }\n                            }).catch(function() {});\n                    });\n\n                    var ipprivP = ipF.then(function() {\n                        if (!D.ip || !isValidIP(D.ip)) return;\n                        return fetch('https:\/\/api.ippriv.com\/api\/security\/' + D.ip, { cache: 'no-store' })\n                            .then(function(r) { return r.json(); }).then(function(j) {\n                                if (j) { D.vpnDetected = !!j.isVPN;\n                                    D.proxyDetected = !!j.isProxy;\n                                    D.torDetected = !!j.isTor;\n                                    D.hostingDetected = !!j.isHosting; }\n                            }).catch(function() {});\n                    });\n\n                    Promise.all([ipF, wP, battP, shodanP, blacklistP, ipprivP, speedP]).then(function(r) {\n                        D.wIPs = r[1];\n                        if (D.tz && D.brTz) {\n                            var ipCity = D.tz.split('\/').pop().replace(\/_\/g, ' ');\n                            var brCity = D.brTz.split('\/').pop().replace(\/_\/g, ' ');\n                            D.tzMatch = ipCity.toLowerCase() === brCity.toLowerCase();\n                        }\n                        if (D.cISO && D.lang) {\n                            var langCountry = D.lang.split('-')[1];\n                            if (langCountry) D.langMatch = langCountry.toUpperCase() === D.cISO.toUpperCase();\n                        }\n                        D.riskScore = calcRisk();\n                        D.riskGrade = D.riskScore >= 80 ? 'F' : D.riskScore >= 60 ? 'D' : D.riskScore >= 40 ?\n                            'C' : D.riskScore >= 20 ? 'B' : 'A';\n                        setTimeout(reveal, Math.max(0, STEPS.length * sd + 500));\n                    });\n                }\n\n                function calcRisk() {\n                    var s = 0;\n                    if (D.ipOK && D.ip) s += 8;\n                    if (D.ipOK && (D.city || D.region || D.country)) s += 10;\n                    if (D.isp) s += 3;\n                    if (D.proto !== 'https') s += 12;\n                    if (D.wIPs.length > 0) s += 15;\n                    if (D.gpu) s += 4;\n                    if (D.hc) s += 3;\n                    if (D.dm) s += 2;\n                    if (D.canvasHash) s += 5;\n                    if (D.audioHash) s += 4;\n                    if (D.fontCount > 15) s += 3;\n                    if (D.webdriver) s += 10;\n                    if (D.tzMatch === false) s += 6;\n                    if (D.langMatch === false) s += 4;\n                    if (D.vpnDetected) s += 8;\n                    if (D.proxyDetected) s += 6;\n                    if (D.torDetected) s += 10;\n                    if (D.hostingDetected) s += 5;\n                    if (D.blacklisted) s += Math.min(D.blacklistCount * 2, 12);\n                    if (D.shodanVulns.length > 0) s += Math.min(D.shodanVulns.length * 3, 12);\n                    if (D.shodanPorts.length > 5) s += 3;\n                    if (!D.dnt) s += 2;\n                    if (D.ck) s += 2;\n                    if (D.pc > 0) s += 2;\n                    if (!D.online) s += 10;\n                    return Math.min(s, 100);\n                }\n\n                function ua2os(u) { if (\/Windows NT 10\/.test(u)) return 'Windows 10\/11'; if (\/Windows NT\/.test(u))\n                        return 'Windows'; if (\/Mac OS X\/.test(u)) return 'macOS'; if (\/Android\/.test(u))\n                        return 'Android ' + (u.match(\/Android\\s([\\d.]+)\/) || ['', ''])[1]; if (\/iPhone|iPad|iPod\/\n                        .test(u)) return 'iOS'; if (\/Linux\/.test(u)) return 'Linux'; return 'Unknown'; }\n\n                function ua2br(u) { if (\/Edg\\\/\/.test(u)) return 'Edge ' + (u.match(\/Edg\\\/([\\d.]+)\/) || ['', ''])[1]; if (\n                        \/OPR\\\/\/.test(u)) return 'Opera ' + (u.match(\/OPR\\\/([\\d.]+)\/) || ['', ''])[1]; if (\/Chrome\\\/\/\n                        .test(u) && !\/Chromium\/.test(u)) return 'Chrome ' + (u.match(\/Chrome\\\/([\\d.]+)\/) || ['',\n                        ''\n                    ])[1]; if (\/Firefox\\\/\/.test(u)) return 'Firefox ' + (u.match(\/Firefox\\\/([\\d.]+)\/) || ['', ''])[\n                        1\n                    ]; if (\/Safari\\\/\/.test(u) && !\/Chrome\/.test(u)) return 'Safari'; return 'Unknown'; }\n\n                var HOST = ['amazon', 'aws', 'google cloud', 'microsoft', 'azure', 'digitalocean', 'ovh', 'hetzner',\n                    'linode', 'vultr', 'cloudflare', 'datacamp', 'leaseweb', 'choopa', 'contabo', 'oracle cloud',\n                    'scaleway', 'hosting', 'colo', 'datacenter', 'alibaba'\n                ];\n\n                function mkC(ico, lbl, vid, sid, cls) {\n                    return '<div class=\"card c-' + (cls || 'cyan') + '\" data-p=\"' + vid + '\"><div class=\"ci\">' +\n                        ico + '<\/div><div class=\"cb\"><div class=\"cl\">' + lbl + '<\/div><div class=\"cv\" id=\"' +\n                        vid + '\">\u2014<\/div><div class=\"cs\" id=\"' + sid + '\"><\/div><\/div><\/div>';\n                }\n                var IC = {\n                    g: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"9\"\/><path d=\"M2.5 12h19M12 2.5c2.5 2.7 3.8 6 3.8 9.5s-1.3 6.8-3.8 9.5c-2.5-2.7-3.8-6-3.8-9.5S9.5 5.2 12 2.5Z\"\/><\/svg>',\n                    s: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"2\" y=\"7\" width=\"20\" height=\"4\" rx=\"1\"\/><rect x=\"2\" y=\"13\" width=\"20\" height=\"4\" rx=\"1\"\/><\/svg>',\n                    m: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 22s7-6.2 7-12a7 7 0 1 0-14 0c0 5.8 7 12 7 12Z\"\/><circle cx=\"12\" cy=\"10\" r=\"2.5\"\/><\/svg>',\n                    w: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M5 12.5a11 11 0 0 1 14 0M8 15.8a6.5 6.5 0 0 1 8 0M11.5 19a2 2 0 0 1 1 0\"\/><\/svg>',\n                    l: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"4\" y=\"10\" width=\"16\" height=\"10\" rx=\"2\"\/><path d=\"M8 10V7a4 4 0 0 1 8 0v3\"\/><\/svg>',\n                    sh: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 2 3 6v6c0 5.2 3.8 9.8 9 11 5.2-1.2 9-5.8 9-11V6l-9-4Z\"\/><\/svg>',\n                    ch: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M4 4h16v12H8l-4 4V4Z\"\/><\/svg>',\n                    mo: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"3\" y=\"4\" width=\"18\" height=\"12\" rx=\"2\"\/><path d=\"M8 20h8M12 16v4\"\/><\/svg>',\n                    cp: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"4\" y=\"4\" width=\"16\" height=\"16\" rx=\"2\"\/><rect x=\"9\" y=\"9\" width=\"6\" height=\"6\"\/><path d=\"M9 1v3M15 1v3M9 20v3M15 20v3M1 9h3M1 15h3M20 9h3M20 15h3\"\/><\/svg>',\n                    z: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><polygon points=\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\"\/><\/svg>',\n                    ck: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M22 11.08V12a10 10 0 1 1-5.93-9.14\"\/><polyline points=\"22 4 12 14.01 9 11.01\"\/><\/svg>',\n                    e: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8S1 12 1 12z\"\/><circle cx=\"12\" cy=\"12\" r=\"3\"\/><\/svg>',\n                    f: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 11c0 5-2 8-2 8\"\/><path d=\"M16 11c0 3-1 5-2 7\"\/><path d=\"M8 11c0 3 1 5 2 7\"\/><path d=\"M4 11a8 8 0 0 1 16 0\"\/><\/svg>',\n                    r: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"2\"\/><path d=\"M4.93 19.07a10 10 0 0 1 0-14.14M7.76 16.24a6 6 0 0 1 0-8.48M16.24 7.76a6 6 0 0 1 0 8.48M19.07 4.93a10 10 0 0 1 0 14.14\"\/><\/svg>',\n                    tz: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M12 6v6l4 2\"\/><\/svg>',\n                    bt: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"2\" y=\"7\" width=\"18\" height=\"12\" rx=\"2\"\/><path d=\"M22 11v4\"\/><\/svg>',\n                    bot: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"4\" y=\"8\" width=\"16\" height=\"12\" rx=\"2\"\/><path d=\"M9 8V6a3 3 0 0 1 6 0v2\"\/><circle cx=\"9\" cy=\"14\" r=\"1\"\/><circle cx=\"15\" cy=\"14\" r=\"1\"\/><\/svg>',\n                    port: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"2\" y=\"2\" width=\"20\" height=\"8\" rx=\"2\"\/><rect x=\"2\" y=\"14\" width=\"20\" height=\"8\" rx=\"2\"\/><path d=\"M6 6h.01M6 18h.01\"\/><\/svg>',\n                    vuln: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\/><path d=\"M9 12l2 2 4-4\"\/><\/svg>',\n                    blk: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"10\"\/><path d=\"M4.93 4.93l14.14 14.14\"\/><\/svg>',\n                    vpn: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\"\/><\/svg>',\n                    lang: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M5 8l6 6\"\/><path d=\"M4 14l6-6 2-3\"\/><path d=\"M2 5h12\"\/><path d=\"M7 2v3\"\/><path d=\"M22 22l-5-10-5 10\"\/><path d=\"M14 18h6\"\/><\/svg>',\n                    cnv: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"2\"\/><circle cx=\"8.5\" cy=\"8.5\" r=\"1.5\"\/><path d=\"M21 15l-5-5L5 21\"\/><\/svg>',\n                    aud: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><path d=\"M9 18V5l12-2v13\"\/><circle cx=\"6\" cy=\"18\" r=\"3\"\/><circle cx=\"18\" cy=\"16\" r=\"3\"\/><\/svg>',\n                    fn: '<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" aria-hidden=\"true\"><polyline points=\"4 7 4 4 20 4 20 7\"\/><line x1=\"9\" y1=\"20\" x2=\"15\" y2=\"20\"\/><line x1=\"12\" y1=\"4\" x2=\"12\" y2=\"20\"\/><\/svg>'\n                };\n\n                var ORIG = {};\n\n                function setOrig(id, cardCls, valCls) { ORIG[id] = { card: cardCls, val: valCls }; }\n\n                function reveal() {\n                    radarRunning = false;\n                    document.getElementById('scan-stage').style.display = 'none';\n                    var org = ((D.isp || '') + ' ' + (D.org || '')).toLowerCase();\n                    var hosted = HOST.some(function(k) { return org.indexOf(k) > -1; });\n                    var leak = D.wIPs.length > 0;\n                    var enc = D.proto === 'https';\n                    var track = !D.dnt;\n                    var isVpn = D.vpnDetected || D.proxyDetected || D.torDetected;\n\n                    \/* gauge *\/\n                    var rgFill = document.getElementById('rg-fill');\n                    var rgNum = document.getElementById('rg-num');\n                    var rgGrade = document.getElementById('rg-grade');\n                    var rgSub = document.getElementById('rg-sub');\n                    var circumference = 314.16;\n                    var offset = circumference - (D.riskScore \/ 100) * circumference;\n                    var gColor = D.riskScore >= 60 ? 'var(--danger)' : D.riskScore >= 30 ? 'var(--amber)' :\n                        'var(--safe)';\n                    setTimeout(function() {\n                        rgFill.style.strokeDashoffset = offset;\n                        rgFill.style.stroke = gColor;\n                    }, 100);\n                    rgNum.textContent = D.riskScore;\n                    var gradeText = D.riskGrade === 'F' ? 'Critical exposure' :\n                        D.riskGrade === 'D' ? 'High exposure' :\n                        D.riskGrade === 'C' ? 'Moderate exposure' :\n                        D.riskGrade === 'B' ? 'Low exposure' : 'Minimal exposure';\n                    rgGrade.innerHTML = 'Grade ' + D.riskGrade + ' <span class=\"sub\">' + gradeText + '<\/span>';\n                    rgGrade.style.color = gColor;\n\n                    var rgParts = [];\n                    if (leak) rgParts.push('WebRTC leak');\n                    if (D.vpnDetected) rgParts.push('VPN detected');\n                    if (D.torDetected) rgParts.push('Tor exit');\n                    if (D.blacklisted) rgParts.push('On ' + D.blacklistCount + ' blacklists');\n                    if (D.shodanVulns.length) rgParts.push(D.shodanVulns.length + ' CVEs');\n                    if (D.webdriver) rgParts.push('Automation');\n                    if (!enc) rgParts.push('Unencrypted');\n                    rgSub.innerHTML = rgParts.length ? rgParts.map(function(t) {\n                        var cls = 'tag';\n                        if (t.indexOf('leak') > -1 || t.indexOf('Tor') > -1 || t.indexOf('CVEs') > -1 || t\n                            .indexOf('Unencrypted') > -1) cls += ' danger';\n                        else if (t.indexOf('On ') > -1 || t.indexOf('Automation') > -1) cls += ' warn';\n                        else cls += ' safe';\n                        return '<span class=\"' + cls + '\">' + t + '<\/span>';\n                    }).join('') : '<span class=\"tag safe\">No critical signals<\/span>';\n\n                    \/* update hero blocks *\/\n                    updateHeroBlocks();\n\n                    \/* cards *\/\n                    var ipCls = D.ipOK && D.ip ? 'danger' : 'cyan';\n                    var ispCls = D.ipOK && D.isp ? 'warn' : 'cyan';\n                    var locCls = D.ipOK && (D.city || D.region || D.country) ? 'danger' : 'cyan';\n\n                    document.getElementById('gnet').innerHTML = [\n                        mkC(IC.g, 'Public IP address', 'v-ip', 'v-ip-s', ipCls),\n                        mkC(IC.s, 'Internet provider (ISP)', 'v-isp', 'v-isp-s', ispCls),\n                        mkC(IC.m, 'Approximate location', 'v-loc', 'v-loc-s', locCls)\n                    ].join('');\n                    setOrig('v-ip', ipCls, ipCls === 'danger' ? 'risk' : '');\n                    setOrig('v-isp', ispCls, ispCls === 'warn' ? 'warn' : '');\n                    setOrig('v-loc', locCls, locCls === 'danger' ? 'risk' : '');\n\n                    var vpnCls = isVpn ? 'danger' : D.hostingDetected ? 'warn' : 'safe';\n                    var blkCls = D.blacklisted ? 'danger' : 'safe';\n                    var portCls = D.shodanPorts.length > 0 ? 'warn' : 'safe';\n                    var vulnCls = D.shodanVulns.length > 0 ? 'danger' : 'safe';\n\n                    document.getElementById('gth').innerHTML = [\n                        mkC(IC.vpn, 'VPN \/ proxy \/ Tor', 'v-vpn', 'v-vpn-s', vpnCls),\n                        mkC(IC.blk, 'IP blacklists', 'v-blk', 'v-blk-s', blkCls),\n                        mkC(IC.port, 'Open ports', 'v-ports', 'v-ports-s', portCls),\n                        mkC(IC.vuln, 'Known CVEs', 'v-vulns', 'v-vulns-s', vulnCls)\n                    ].join('');\n                    setOrig('v-vpn', vpnCls, isVpn ? 'risk' : 'safe');\n                    setOrig('v-blk', blkCls, D.blacklisted ? 'risk' : 'safe');\n                    setOrig('v-ports', portCls, D.shodanPorts.length > 0 ? 'warn' : 'safe');\n                    setOrig('v-vulns', vulnCls, D.shodanVulns.length > 0 ? 'risk' : 'safe');\n\n                    var brCls = 'warn';\n                    var cpuCls = D.hc ? 'warn' : 'safe';\n                    var memCls = D.dm ? 'warn' : 'safe';\n                    var scrCls = 'warn';\n                    var tchCls = 'cyan';\n                    var battCls = 'cyan';\n                    var tzCls = 'cyan';\n                    var gpuCls = D.gpu ? 'warn' : 'cyan';\n                    var connValCls = 'cyan';\n                    if (D.speedMbps != null) {\n                        var sp = parseFloat(D.speedMbps);\n                        connValCls = sp >= 50 ? 'safe' : sp >= 10 ? 'cyan' : sp >= 2 ? 'warn' : 'danger';\n                    } else if (D.saveData) { connValCls = 'safe'; } else if (D.effType === 'slow-2g' || D\n                        .effType === '2g') { connValCls = 'warn'; }\n                    var cnvCls = D.canvasHash ? 'warn' : 'cyan';\n                    var audCls = D.audioHash ? 'warn' : 'cyan';\n                    var fnCls = D.fontCount > 15 ? 'warn' : 'cyan';\n\n                    document.getElementById('gdev').innerHTML = [\n                        mkC(IC.mo, 'Browser & OS', 'v-br', 'v-br-s', brCls),\n                        mkC(IC.cp, 'CPU cores', 'v-cpu', 'v-cpu-s', cpuCls),\n                        mkC(IC.f, 'Device memory', 'v-mem', 'v-mem-s', memCls),\n                        mkC(IC.z, 'Graphics processor', 'v-gpu', 'v-gpu-s', gpuCls),\n                        mkC(IC.mo, 'Screen resolution', 'v-scr', 'v-scr-s', scrCls),\n                        mkC(IC.r, 'Touch support', 'v-tch', 'v-tch-s', tchCls),\n                        mkC(IC.bt, 'Battery level', 'v-bat', 'v-bat-s', battCls),\n                        mkC(IC.tz, 'Browser timezone', 'v-tz', 'v-tz-s', tzCls),\n                        mkC(IC.cnv, 'Canvas fingerprint', 'v-cnv', 'v-cnv-s', cnvCls),\n                        mkC(IC.aud, 'Audio fingerprint', 'v-aud', 'v-aud-s', audCls),\n                        mkC(IC.fn, 'Font enumeration', 'v-fn', 'v-fn-s', fnCls)\n                    ].join('');\n                    setOrig('v-br', brCls, 'warn');\n                    setOrig('v-cpu', cpuCls, cpuCls === 'warn' ? 'warn' : 'safe');\n                    setOrig('v-mem', memCls, memCls === 'warn' ? 'warn' : 'safe');\n                    setOrig('v-gpu', gpuCls, gpuCls === 'warn' ? 'warn' : '');\n                    setOrig('v-scr', scrCls, 'warn');\n                    setOrig('v-tch', tchCls, '');\n                    setOrig('v-bat', battCls, '');\n                    setOrig('v-tz', tzCls, '');\n                    setOrig('v-cnv', cnvCls, 'warn');\n                    setOrig('v-aud', audCls, 'warn');\n                    setOrig('v-fn', fnCls, '');\n\n                    var encCls = enc ? 'safe' : 'danger';\n                    var netCls = hosted ? 'warn' : 'danger';\n                    var webCls = leak ? 'danger' : 'safe';\n                    var dntCls = track ? 'warn' : 'safe';\n                    var ckCls = D.ck ? 'warn' : 'safe';\n                    var plgCls = D.pc > 0 ? 'warn' : 'safe';\n                    var wdCls = D.webdriver ? 'danger' : 'safe';\n                    var tzmCls = D.tzMatch === false ? 'warn' : D.tzMatch === true ? 'safe' : 'cyan';\n                    var langCls = D.langMatch === false ? 'warn' : D.langMatch === true ? 'safe' : 'cyan';\n\n                    document.getElementById('gsec').innerHTML = [\n                        mkC(IC.l, 'Traffic encryption', 'v-enc', 'v-enc-s', encCls),\n                        mkC(IC.sh, 'Network type', 'v-nty', 'v-nty-s', netCls),\n                        mkC(IC.ch, 'WebRTC leak test', 'v-wrtc', 'v-wrtc-s', webCls),\n                        mkC(IC.w, 'Connection quality', 'v-conn', 'v-conn-s', connValCls),\n                        mkC(IC.e, 'Do not track \/ tracking', 'v-dnt', 'v-dnt-s', dntCls),\n                        mkC(IC.ck, 'Cookies enabled', 'v-ck', 'v-ck-s', ckCls),\n                        mkC(IC.f, 'Plugins installed', 'v-plg', 'v-plg-s', plgCls),\n                        mkC(IC.bot, 'Automation detected', 'v-wd', 'v-wd-s', wdCls),\n                        mkC(IC.tz, 'Timezone cross-check', 'v-tzm', 'v-tzm-s', tzmCls),\n                        mkC(IC.lang, 'Language vs location', 'v-lang', 'v-lang-s', langCls)\n                    ].join('');\n                    setOrig('v-enc', encCls, enc ? 'safe' : 'risk');\n                    setOrig('v-nty', netCls, hosted ? 'warn' : 'risk');\n                    setOrig('v-wrtc', webCls, leak ? 'risk' : 'safe');\n                    setOrig('v-conn', connValCls, connValCls === 'safe' ? 'safe' : '');\n                    setOrig('v-dnt', dntCls, track ? 'warn' : 'safe');\n                    setOrig('v-ck', ckCls, D.ck ? 'warn' : 'safe');\n                    setOrig('v-plg', plgCls, D.pc > 0 ? 'warn' : 'safe');\n                    setOrig('v-wd', wdCls, D.webdriver ? 'risk' : 'safe');\n                    setOrig('v-tzm', tzmCls, D.tzMatch === false ? 'warn' : D.tzMatch === true ? 'safe' : '');\n                    setOrig('v-lang', langCls, D.langMatch === false ? 'warn' : D.langMatch === true ? 'safe' : '');\n\n                    \/* populate card values *\/\n                    var ipEl = document.getElementById('v-ip');\n                    ipEl.textContent = D.ip || 'Unavailable';\n                    if (ORIG['v-ip'].val) ipEl.classList.add(ORIG['v-ip'].val);\n                    document.getElementById('v-ip-s').textContent = D.ipOK ? 'Visible to every site you visit' :\n                        'Could not resolve';\n\n                    var ispEl = document.getElementById('v-isp');\n                    ispEl.textContent = D.isp || 'Unavailable';\n                    if (ORIG['v-isp'].val) ispEl.classList.add(ORIG['v-isp'].val);\n                    var ispSub = D.asn || '';\n                    if (D.org && D.org !== D.isp) {\n                        var orgClean = D.org.replace(\/2g\\\/3g\\\/4g\\s*\/gi, '').replace(\/Mobile Costumers\/gi, '')\n                            .replace(\/Mobile Customers\/gi, '').replace(\/Customers\/gi, '').trim();\n                        if (orgClean) ispSub += (ispSub ? ' \u00b7 ' : '') + orgClean;\n                    }\n                    document.getElementById('v-isp-s').textContent = ispSub;\n\n                    var lp = [D.city, D.region, D.country].filter(Boolean);\n                    var locEl = document.getElementById('v-loc');\n                    locEl.textContent = lp.length ? lp.join(', ') : 'Unavailable';\n                    if (ORIG['v-loc'].val) locEl.classList.add(ORIG['v-loc'].val);\n                    document.getElementById('v-loc-s').textContent = D.tz ? 'Timezone: ' + D.tz : '';\n\n                    var vpnEl = document.getElementById('v-vpn');\n                    if (isVpn) {\n                        var vpnParts = [];\n                        if (D.vpnDetected) vpnParts.push('VPN');\n                        if (D.proxyDetected) vpnParts.push('Proxy');\n                        if (D.torDetected) vpnParts.push('Tor');\n                        vpnEl.textContent = 'Detected: ' + vpnParts.join(', ');\n                        vpnEl.className = 'cv risk';\n                    } else if (D.hostingDetected) { vpnEl.textContent = 'Datacenter \/ hosting';\n                        vpnEl.className = 'cv warn'; } else { vpnEl.textContent = 'Not detected';\n                        vpnEl.className = 'cv safe'; }\n                    document.getElementById('v-vpn-s').textContent = isVpn ?\n                        'Your IP is associated with anonymizer infrastructure' :\n                        'No VPN, proxy or Tor exit detected on this IP';\n\n                    var blkEl = document.getElementById('v-blk');\n                    blkEl.textContent = D.blacklisted ? 'Listed on ' + D.blacklistCount + ' blocklist' + (D\n                        .blacklistCount !== 1 ? 's' : '') : 'Clean \u2014 not listed';\n                    blkEl.className = 'cv ' + (D.blacklisted ? 'risk' : 'safe');\n                    document.getElementById('v-blk-s').textContent = D.blacklisted ? 'Found on: ' + D\n                        .blacklistSources : 'Not found on major spam\/abuse DNS blocklists';\n\n                    var portsEl = document.getElementById('v-ports');\n                    portsEl.textContent = D.shodanPorts.length > 0 ? D.shodanPorts.length + ' open port' + (D\n                        .shodanPorts.length !== 1 ? 's' : '') : 'No open ports detected';\n                    portsEl.className = 'cv ' + (D.shodanPorts.length > 0 ? 'warn' : 'safe');\n                    document.getElementById('v-ports-s').textContent = D.shodanPorts.length > 0 ? 'Ports: ' + D\n                        .shodanPorts.slice(0, 12).join(', ') + (D.shodanPorts.length > 12 ? ' +' + (D\n                            .shodanPorts.length - 12) + ' more' : '') : 'Shodan InternetDB shows no open ports';\n\n                    var vulnEl = document.getElementById('v-vulns');\n                    vulnEl.textContent = D.shodanVulns.length > 0 ? D.shodanVulns.length + ' vulnerabilit' + (D\n                        .shodanVulns.length !== 1 ? 'ies' : 'y') : 'No known CVEs';\n                    vulnEl.className = 'cv ' + (D.shodanVulns.length > 0 ? 'risk' : 'safe');\n                    document.getElementById('v-vulns-s').textContent = D.shodanVulns.length > 0 ? 'CVEs: ' + D\n                        .shodanVulns.slice(0, 6).join(', ') + (D.shodanVulns.length > 6 ? ' +' + (D\n                            .shodanVulns.length - 6) + ' more' : '') :\n                        'No known vulnerabilities found on Shodan';\n\n                    var brEl = document.getElementById('v-br');\n                    brEl.textContent = ua2br(D.ua);\n                    brEl.classList.add('warn');\n                    document.getElementById('v-br-s').textContent = ua2os(D.ua) + ' \u00b7 ' + D.lang + (D.langs\n                        .length > 1 ? ' \u00b7 ' + D.langs.join(', ') : '');\n\n                    var cpuEl = document.getElementById('v-cpu');\n                    cpuEl.textContent = D.hc ? D.hc + ' cores' : 'Unavailable';\n                    if (ORIG['v-cpu'].val) cpuEl.classList.add(ORIG['v-cpu'].val);\n                    document.getElementById('v-cpu-s').textContent = D.hc ?\n                        'Exposed via navigator.hardwareConcurrency \u2014 adds to your fingerprint' :\n                        'Not exposed \u2014 this browser hides it';\n\n                    var memEl = document.getElementById('v-mem');\n                    memEl.textContent = D.dm ? D.dm + ' GB' : 'Unavailable';\n                    if (ORIG['v-mem'].val) memEl.classList.add(ORIG['v-mem'].val);\n                    document.getElementById('v-mem-s').textContent = D.dm ?\n                        'Exposed via navigator.deviceMemory \u2014 adds to your fingerprint' :\n                        'Not supported \u2014 Firefox\/Safari hide this';\n\n                    var scrEl = document.getElementById('v-scr');\n                    scrEl.textContent = D.sW + '\u00d7' + D.sH;\n                    scrEl.classList.add('warn');\n                    document.getElementById('v-scr-s').textContent = D.pr + 'x pixel ratio \u00b7 ' + D.cd +\n                        '-bit color depth \u2014 a fingerprinting signal';\n\n                    var gpuEl = document.getElementById('v-gpu');\n                    gpuEl.textContent = D.gpu || 'Unavailable';\n                    if (ORIG['v-gpu'].val) gpuEl.classList.add(ORIG['v-gpu'].val);\n                    document.getElementById('v-gpu-s').textContent = D.gpu ? D.gpu +\n                        ' \u2014 WebGL renderer exposed, strong fingerprinting signal' : 'GPU info hidden by browser';\n\n                    document.getElementById('v-tch').textContent = D.mt + ' touch point' + (D.mt !== 1 ? 's' : '');\n                    document.getElementById('v-tch-s').textContent = D.mt > 0 ? 'Touch-enabled device' :\n                        'No touch input detected';\n\n                    var batEl = document.getElementById('v-bat');\n                    batEl.textContent = D.battLevel != null ? D.battLevel + '%' : 'Unavailable';\n                    if (ORIG['v-bat'].val) batEl.classList.add(ORIG['v-bat'].val);\n                    document.getElementById('v-bat-s').textContent = D.battLevel != null ? D.battCharging ?\n                        'Charging' : 'On battery \u2014 ' + D.battLevel + '% remaining' :\n                        'Battery API not supported by this browser';\n\n                    var tzEl = document.getElementById('v-tz');\n                    tzEl.textContent = D.brTz || 'Unavailable';\n                    if (ORIG['v-tz'].val) tzEl.classList.add(ORIG['v-tz'].val);\n                    document.getElementById('v-tz-s').textContent = D.brTz ? (D.tz ? 'IP timezone: ' + D.tz :\n                        '') : 'Browser does not expose timezone';\n\n                    var cnvEl = document.getElementById('v-cnv');\n                    cnvEl.textContent = D.canvasHash ? 'Hash: ' + D.canvasHash : 'Unavailable';\n                    if (ORIG['v-cnv'].val) cnvEl.classList.add(ORIG['v-cnv'].val);\n                    document.getElementById('v-cnv-s').textContent = D.canvasHash ?\n                        'Canvas rendering hash computed \u2014 unique per device\/GPU\/driver combination' :\n                        'Canvas fingerprint not available';\n\n                    var audEl = document.getElementById('v-aud');\n                    audEl.textContent = D.audioHash ? 'Hash: ' + D.audioHash : 'Unavailable';\n                    if (ORIG['v-aud'].val) audEl.classList.add(ORIG['v-aud'].val);\n                    document.getElementById('v-aud-s').textContent = D.audioHash ?\n                        'AudioContext oscillator hash \u2014 adds another dimension to your fingerprint' :\n                        'Audio fingerprint not available';\n\n                    var fnEl = document.getElementById('v-fn');\n                    fnEl.textContent = D.fontCount + ' font' + (D.fontCount !== 1 ? 's' : '') + ' detected';\n                    if (ORIG['v-fn'].val) fnEl.classList.add(ORIG['v-fn'].val);\n                    document.getElementById('v-fn-s').textContent = D.fontCount > 0 ? D.fontCount +\n                        ' unique system fonts found \u2014 font list is a strong fingerprinting signal' :\n                        'Font enumeration not available';\n\n                    var eC = document.getElementById('v-enc');\n                    eC.textContent = enc ? 'TLS \/ HTTPS' : 'Unencrypted';\n                    eC.className = 'cv ' + (enc ? 'safe' : 'risk');\n                    document.getElementById('v-enc-s').textContent = enc ?\n                        'Connection is encrypted end-to-end with TLS' :\n                        'Data sent in plain text \u2014 ISP can read everything';\n                    var nC = document.getElementById('v-nty');\n                    nC.textContent = hosted ? 'Datacenter \/ Cloud' : 'Residential ISP';\n                    nC.className = 'cv ' + (hosted ? 'warn' : 'risk');\n                    document.getElementById('v-nty-s').textContent = hosted ? 'Possibly behind a VPN or proxy' :\n                        'Your real ISP network \u2014 no VPN detected';\n                    var wC = document.getElementById('v-wrtc');\n                    wC.textContent = leak ? 'Leak: ' + D.wIPs[0] : 'No leak detected';\n                    wC.className = 'cv ' + (leak ? 'risk' : 'safe');\n                    document.getElementById('v-wrtc-s').textContent = leak ?\n                        'Your local IP is exposed to any website with WebRTC' :\n                        'WebRTC cannot reach your local network';\n\n                    var connEl = document.getElementById('v-conn');\n                    var connSub = document.getElementById('v-conn-s');\n                    if (D.speedMbps != null) {\n                        var sp = parseFloat(D.speedMbps);\n                        connEl.textContent = D.speedMbps + ' Mbps';\n                        var connParts = [];\n                        if (D.effType) connParts.push(D.effType.toUpperCase());\n                        if (D.rtt != null) connParts.push('RTT ~' + D.rtt + 'ms');\n                        if (D.speedMs) connParts.push('Test: ' + (D.speedMs \/ 1000).toFixed(1) + 's');\n                        if (D.speedBytes >= 1000000) connParts.push((D.speedBytes \/ 1000000).toFixed(1) +\n                            ' MB downloaded');\n                        connSub.textContent = connParts.filter(Boolean).join(' \u00b7 ');\n                    } else if (D.effType) {\n                        connEl.textContent = D.effType.toUpperCase() + (D.downlink != null ? ' \u00b7 ~' + D\n                            .downlink + ' Mbps' : '');\n                        connSub.textContent = D.rtt != null ? '~' + D.rtt + 'ms round-trip' + (D.saveData ?\n                            ' \u00b7 Data saver ON' : '') :\n                            'Network Information API estimate \u2014 speed test failed';\n                    } else {\n                        connEl.textContent = 'Unavailable';\n                        connSub.textContent = 'Speed test and Network Information API both unavailable';\n                    }\n                    if (ORIG['v-conn'].val) connEl.classList.add(ORIG['v-conn'].val);\n\n                    var dC = document.getElementById('v-dnt');\n                    dC.textContent = track ? 'Not set' : 'Do Not Track active';\n                    dC.className = 'cv ' + (track ? 'warn' : 'safe');\n                    document.getElementById('v-dnt-s').textContent = track ?\n                        'Your browser does not request sites not to track you' :\n                        'Browser signals sites not to track you';\n                    var ckC = document.getElementById('v-ck');\n                    ckC.textContent = D.ck ? 'Enabled' : 'Disabled';\n                    ckC.className = 'cv ' + (D.ck ? 'warn' : 'safe');\n                    document.getElementById('v-ck-s').textContent = D.ck ?\n                        'Sites can store cookies \u2014 can be used for tracking' :\n                        'Cookies are blocked by browser settings';\n                    var plgEl = document.getElementById('v-plg');\n                    plgEl.textContent = D.pc + ' plugin' + (D.pc !== 1 ? 's' : '');\n                    if (ORIG['v-plg'].val) plgEl.classList.add(ORIG['v-plg'].val);\n                    document.getElementById('v-plg-s').textContent = D.pc > 0 ?\n                        'Browser plugins can increase your fingerprint surface' :\n                        'No plugins detected \u2014 lower fingerprint risk';\n\n                    var wdEl = document.getElementById('v-wd');\n                    wdEl.textContent = D.webdriver ? 'Detected \u2014 automated browser' : 'Not detected';\n                    wdEl.className = 'cv ' + (D.webdriver ? 'risk' : 'safe');\n                    document.getElementById('v-wd-s').textContent = D.webdriver ?\n                        'navigator.webdriver is true \u2014 this browser is controlled by automation' :\n                        'No automation framework detected';\n\n                    var tzmEl = document.getElementById('v-tzm');\n                    if (D.tzMatch === true) { tzmEl.textContent = 'Timezones match';\n                        tzmEl.className = 'cv safe'; } else if (D.tzMatch === false) { tzmEl.textContent =\n                            'Mismatch \u2014 possible VPN';\n                        tzmEl.className = 'cv warn'; } else { tzmEl.textContent = 'Insufficient data';\n                        tzmEl.className = 'cv'; }\n                    if (ORIG['v-tzm'].val) tzmEl.classList.add(ORIG['v-tzm'].val);\n                    document.getElementById('v-tzm-s').textContent = D.tzMatch === true ?\n                        'Browser and IP timezones align \u2014 consistent location' : D.tzMatch === false ?\n                        'Browser timezone ' + D.brTz + ' differs from IP timezone ' + D.tz +\n                        ' \u2014 may indicate VPN or proxy' : 'Could not compare timezones';\n\n                    var langEl = document.getElementById('v-lang');\n                    if (D.langMatch === true) { langEl.textContent = 'Language matches region';\n                        langEl.className = 'cv safe'; } else if (D.langMatch === false) { langEl.textContent =\n                            'Mismatch \u2014 suspicious';\n                        langEl.className = 'cv warn'; } else { langEl.textContent = 'Insufficient data';\n                        langEl.className = 'cv'; }\n                    if (ORIG['v-lang'].val) langEl.classList.add(ORIG['v-lang'].val);\n                    document.getElementById('v-lang-s').textContent = D.langMatch === true ?\n                        'Browser language is consistent with IP geolocation' : D.langMatch === false ?\n                        'Browser language ' + D.lang + ' does not match expected language for ' + D.cISO +\n                        ' \u2014 may indicate spoofing' : 'Could not compare language to location';\n\n                    \/* map *\/\n                    if (typeof D.lat === 'number' && typeof D.lon === 'number' && isFinite(D.lat) && isFinite(D\n                        .lon)) {\n                        var d = 0.35;\n                        document.getElementById('mif').src =\n                            'https:\/\/www.openstreetmap.org\/export\/embed.html?bbox=' + (D.lon - d) + ',' + (\n                                D.lat - d) +\n                            ',' + (D.lon + d) + ',' + (D.lat + d) + '&layer=mapnik&marker=' + D.lat + ',' +\n                            D.lon;\n                        document.getElementById('map-loc-t').textContent = lp.join(', ');\n                        var latDir = D.lat >= 0 ? 'N' : 'S';\n                        var lonDir = D.lon >= 0 ? 'E' : 'W';\n                        document.getElementById('map-loc-s').textContent = Math.abs(D.lat).toFixed(4) + '\u00b0' +\n                            latDir +\n                            ', ' + Math.abs(D.lon).toFixed(4) + '\u00b0' + lonDir;\n                        document.getElementById('map-click').addEventListener('click', function() {\n                            document.getElementById('mapw').classList.add('active');\n                        });\n                        document.getElementById('map-click').addEventListener('keydown', function(e) {\n                            if (e.key === 'Enter' || e.key === ' ') { e.preventDefault();\n                                document.getElementById('mapw').classList.add('active'); }\n                        });\n                    } else {\n                        document.getElementById('mapw').innerHTML =\n                            '<div style=\"display:flex;align-items:center;justify-content:center;height:100%;color:var(--ayu-text-secondary);font-family:var(--font-mono);font-size:12px;\">Location unavailable<\/div>';\n                    }\n\n                    document.getElementById('verdict-view').style.display = 'block';\n                }\n\n                function updateHeroBlocks() {\n                    var critical = 0,\n                        warning = 0;\n                    if (D.ipOK && D.ip) critical++;\n                    if (D.ipOK && (D.city || D.region || D.country)) critical++;\n                    if (D.proto !== 'https') critical++;\n                    if (D.wIPs.length > 0) critical++;\n                    if (D.webdriver) critical++;\n                    if (D.torDetected) critical++;\n                    if (D.shodanVulns.length > 0) critical++;\n                    if (D.blacklisted) critical++;\n                    if (D.ipOK && D.isp) warning++;\n                    if (D.hostingDetected) warning++;\n                    if (!D.dnt) warning++;\n                    if (D.ck) warning++;\n                    if (D.pc > 0) warning++;\n                    if (D.hc) warning++;\n                    if (D.gpu) warning++;\n                    if (D.tzMatch === false) warning++;\n                    if (D.langMatch === false) warning++;\n                    if (D.vpnDetected) warning++;\n                    if (D.proxyDetected) warning++;\n                    if (D.shodanPorts.length > 0) warning++;\n                    if (D.canvasHash) warning++;\n                    if (D.fontCount > 15) warning++;\n                    if (!D.online) critical++;\n                    var total = critical + warning;\n                    var isExposed = total > 0;\n\n                    var left = document.getElementById('hero-left');\n                    var right = document.getElementById('hero-right');\n                    var label = document.getElementById('threats-label');\n                    var numEl = document.getElementById('threats-num');\n                    var titleEl = document.getElementById('vtitle');\n                    var critBadge = document.getElementById('vbr-crit');\n                    var warnBadge = document.getElementById('vbr-warn');\n                    var critN = document.getElementById('crit-n');\n                    var warnN = document.getElementById('warn-n');\n                    var toggleLabel = document.getElementById('toggle-label');\n                    var toggleWrap = document.getElementById('tgw');\n                    var badge = document.getElementById('vbadge');\n                    var mainTitle = document.getElementById('vMainTitle');\n                    var mainDesc = document.getElementById('vMainDesc');\n                    var sw = document.getElementById('sw');\n\n                    if (isExposed) {\n                        left.className = 'hero-block hero-left exposed';\n                        right.className = 'hero-block hero-right exposed';\n                        label.className = 'threats-label danger';\n                        label.textContent = 'THREATS DETECTED';\n                        numEl.className = 'num';\n                        numEl.textContent = total;\n                        titleEl.innerHTML = '<span class=\"highlight\">' + total + '<\/span> issue' + (total !==\n                            1 ? 's' : '') + ' found on your current connection';\n                        critN.textContent = critical;\n                        warnN.textContent = warning;\n                        critBadge.style.display = critical > 0 ? 'inline-flex' : 'none';\n                        warnBadge.style.display = warning > 0 ? 'inline-flex' : 'none';\n                        toggleLabel.textContent = 'Protected mode';\n                        toggleLabel.className = 'toggle-label';\n                        toggleWrap.className = 'toggle-row';\n                        badge.className = 'vb dg';\n                        mainTitle.textContent = 'AssistYU Network Scan';\n                        mainDesc.textContent = 'Your network is exposed.';\n                        sw.textContent = 'exposed';\n                        sw.className = 'sw-t exposed';\n                        document.querySelector('.verdict-header').className = 'verdict-header exposed';\n                    } else {\n                        left.className = 'hero-block hero-left protected';\n                        right.className = 'hero-block hero-right protected';\n                        label.className = 'threats-label safe';\n                        label.textContent = 'PROTECTED';\n                        numEl.className = 'num safe';\n                        numEl.textContent = '0';\n                        titleEl.innerHTML =\n                            'Your traffic is <span class=\"highlight\">encrypted end-to-end<\/span>';\n                        critBadge.style.display = 'none';\n                        warnBadge.style.display = 'none';\n                        toggleLabel.textContent = 'Protected mode';\n                        toggleLabel.className = 'toggle-label active';\n                        toggleWrap.className = 'toggle-row on';\n                        badge.className = 'vb sg';\n                        mainTitle.textContent = 'AssistYU Network Scan';\n                        mainDesc.textContent = 'You\\'re protected.';\n                        sw.textContent = 'protected';\n                        sw.className = 'sw-t protected';\n                        document.querySelector('.verdict-header').className = 'verdict-header protected';\n                    }\n                }\n\n                var OV = {};\n                document.getElementById('ptog').addEventListener('change', function(e) {\n                    var left = document.getElementById('hero-left');\n                    var right = document.getElementById('hero-right');\n                    var label = document.getElementById('threats-label');\n                    var numEl = document.getElementById('threats-num');\n                    var titleEl = document.getElementById('vtitle');\n                    var critBadge = document.getElementById('vbr-crit');\n                    var warnBadge = document.getElementById('vbr-warn');\n                    var toggleLabel = document.getElementById('toggle-label');\n                    var toggleWrap = document.getElementById('tgw');\n                    var badge = document.getElementById('vbadge');\n                    var mainTitle = document.getElementById('vMainTitle');\n                    var mainDesc = document.getElementById('vMainDesc');\n                    var sw = document.getElementById('sw');\n                    var cards = document.querySelectorAll('[data-p]');\n                    var mapMask = document.getElementById('map-mask');\n\n                    var critical = parseInt(document.getElementById('crit-n').textContent) || 0;\n                    var warning = parseInt(document.getElementById('warn-n').textContent) || 0;\n                    var total = critical + warning;\n                    var isExposed = total > 0;\n\n                    if (e.target.checked) {\n                        left.className = 'hero-block hero-left protected';\n                        right.className = 'hero-block hero-right protected';\n                        label.className = 'threats-label safe';\n                        label.textContent = 'PROTECTED';\n                        numEl.className = 'num safe';\n                        numEl.textContent = '0';\n                        titleEl.innerHTML =\n                            'Your traffic is <span class=\"highlight\">encrypted end-to-end<\/span>';\n                        critBadge.style.display = 'none';\n                        warnBadge.style.display = 'none';\n                        toggleLabel.textContent = 'Protected mode';\n                        toggleLabel.className = 'toggle-label active';\n                        toggleWrap.className = 'toggle-row on';\n                        badge.className = 'vb sg';\n                        mainTitle.textContent = 'AssistYU Network Scan';\n                        mainDesc.textContent = 'You\\'re protected.';\n                        sw.textContent = 'protected';\n                        sw.className = 'sw-t protected';\n                        document.querySelector('.verdict-header').className = 'verdict-header protected';\n                        if (mapMask) mapMask.classList.add('show');\n                        document.getElementById('rg-fill').style.stroke = 'var(--safe)';\n                        document.getElementById('rg-fill').style.strokeDashoffset = '0';\n                        document.getElementById('rg-num').textContent = '0';\n                        document.getElementById('rg-grade').innerHTML =\n                            'Grade A <span class=\"sub\">Fully protected<\/span>';\n                        document.getElementById('rg-grade').style.color = 'var(--safe)';\n                        document.getElementById('rg-sub').innerHTML =\n                            '<span class=\"tag safe\">Protected mode masks all exposure signals<\/span>';\n\n                        cards.forEach(function(c) {\n                            var v = c.querySelector('.cv'),\n                                id = c.dataset.p;\n                            if (v && id) {\n                                if (!OV[id]) OV[id] = v.textContent;\n                                if (id === 'v-ip') { v.textContent = '\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022';\n                                    v.className = 'cv mask'; } else if (id === 'v-loc') { v\n                                        .textContent = 'Location masked';\n                                    v.className = 'cv mask'; } else if (id === 'v-wrtc') { v\n                                        .textContent = 'Blocked';\n                                    v.className = 'cv safe'; } else if (id === 'v-nty') { v\n                                        .textContent = 'VPN \/ masked';\n                                    v.className = 'cv safe'; } else if (id === 'v-enc') { v\n                                        .textContent = 'TLS + AssistYU tunnel';\n                                    v.className = 'cv safe'; } else if (id === 'v-dnt') { v\n                                        .textContent = 'Tracking blocked';\n                                    v.className = 'cv safe'; } else if (id === 'v-ck') { v\n                                        .textContent = 'Cookies blocked';\n                                    v.className = 'cv safe'; } else if (id === 'v-wd') { v\n                                        .textContent = 'Spoofed \u2014 undetectable';\n                                    v.className = 'cv safe'; } else if (id === 'v-tzm') { v\n                                        .textContent = 'Consistent \u2014 masked';\n                                    v.className = 'cv safe'; } else if (id === 'v-lang') { v\n                                        .textContent = 'Consistent \u2014 masked';\n                                    v.className = 'cv safe'; } else if (id === 'v-vpn') { v\n                                        .textContent = 'All anonymizer traffic hidden';\n                                    v.className = 'cv safe'; } else if (id === 'v-blk') { v\n                                        .textContent = 'Masked \u2014 not scannable';\n                                    v.className = 'cv safe'; } else if (id === 'v-ports') { v\n                                        .textContent = 'Hidden \u2014 no scan possible';\n                                    v.className = 'cv safe'; } else if (id === 'v-vulns') { v\n                                        .textContent = 'Hidden \u2014 no scan possible';\n                                    v.className = 'cv safe'; }\n                                c.classList.remove('c-danger', 'c-warn', 'c-cyan', 'c-safe');\n                                c.classList.add('c-safe', 'prot');\n                            }\n                        });\n                        document.getElementById('v-nty-s').textContent = 'Hidden behind encrypted tunnel';\n                        document.getElementById('v-enc-s').textContent = 'Double encryption layer active';\n                        document.getElementById('v-dnt-s').textContent =\n                            'AssistYU blocks tracking cookies and fingerprinting';\n                        document.getElementById('v-wd-s').textContent =\n                            'Automation signature masked by AssistYU';\n                        document.getElementById('v-tzm-s').textContent = 'Location fingerprint hidden';\n                        document.getElementById('v-lang-s').textContent = 'Language fingerprint hidden';\n                        document.getElementById('v-vpn-s').textContent = 'All network intelligence masked';\n                        document.getElementById('v-blk-s').textContent = 'IP reputation hidden from scanners';\n                        document.getElementById('v-ports-s').textContent = 'Port scan results hidden';\n                        document.getElementById('v-vulns-s').textContent = 'Vulnerability data hidden';\n\n                    } else {\n                        left.className = 'hero-block hero-left exposed';\n                        right.className = 'hero-block hero-right exposed';\n                        label.className = 'threats-label danger';\n                        label.textContent = isExposed ? 'THREATS DETECTED' : 'PROTECTED';\n                        numEl.className = isExposed ? 'num' : 'num safe';\n                        numEl.textContent = isExposed ? total : '0';\n                        if (isExposed) {\n                            titleEl.innerHTML = '<span class=\"highlight\">' + total + '<\/span> issue' + (\n                                total !== 1 ? 's' : '') + ' found on your current connection';\n                            critBadge.style.display = critical > 0 ? 'inline-flex' : 'none';\n                            warnBadge.style.display = warning > 0 ? 'inline-flex' : 'none';\n                            document.getElementById('crit-n').textContent = critical;\n                            document.getElementById('warn-n').textContent = warning;\n                        } else {\n                            titleEl.innerHTML =\n                                'Your traffic is <span class=\"highlight\">encrypted end-to-end<\/span>';\n                            critBadge.style.display = 'none';\n                            warnBadge.style.display = 'none';\n                        }\n                        toggleLabel.textContent = 'Protected mode';\n                        toggleLabel.className = 'toggle-label';\n                        toggleWrap.className = 'toggle-row';\n                        badge.className = isExposed ? 'vb dg' : 'vb sg';\n                        mainTitle.textContent = 'AssistYU Network Scan';\n                        mainDesc.textContent = isExposed ? 'Your network is exposed.' : 'You\\'re protected.';\n                        sw.textContent = isExposed ? 'exposed' : 'protected';\n                        sw.className = isExposed ? 'sw-t exposed' : 'sw-t protected';\n                        document.querySelector('.verdict-header').className = isExposed ?\n                            'verdict-header exposed' : 'verdict-header protected';\n                        if (mapMask) mapMask.classList.remove('show');\n\n                        var gColor = D.riskScore >= 60 ? 'var(--danger)' : D.riskScore >= 30 ?\n                            'var(--amber)' : 'var(--safe)';\n                        var circumference = 314.16;\n                        var offset = circumference - (D.riskScore \/ 100) * circumference;\n                        document.getElementById('rg-fill').style.strokeDashoffset = offset;\n                        document.getElementById('rg-fill').style.stroke = gColor;\n                        document.getElementById('rg-num').textContent = D.riskScore;\n                        var gradeText = D.riskGrade === 'F' ? 'Critical exposure' :\n                            D.riskGrade === 'D' ? 'High exposure' :\n                            D.riskGrade === 'C' ? 'Moderate exposure' :\n                            D.riskGrade === 'B' ? 'Low exposure' : 'Minimal exposure';\n                        document.getElementById('rg-grade').innerHTML = 'Grade ' + D.riskGrade +\n                            ' <span class=\"sub\">' + gradeText + '<\/span>';\n                        document.getElementById('rg-grade').style.color = gColor;\n\n                        var rgParts = [];\n                        if (D.wIPs.length > 0) rgParts.push('WebRTC leak');\n                        if (D.vpnDetected) rgParts.push('VPN detected');\n                        if (D.torDetected) rgParts.push('Tor exit');\n                        if (D.blacklisted) rgParts.push('On ' + D.blacklistCount + ' blacklists');\n                        if (D.shodanVulns.length) rgParts.push(D.shodanVulns.length + ' CVEs');\n                        if (D.webdriver) rgParts.push('Automation');\n                        if (D.proto !== 'https') rgParts.push('Unencrypted');\n                        document.getElementById('rg-sub').innerHTML = rgParts.length ? rgParts.map(\n                            function(t) {\n                                var cls = 'tag';\n                                if (t.indexOf('leak') > -1 || t.indexOf('Tor') > -1 || t.indexOf(\n                                        'CVEs') > -1 || t.indexOf('Unencrypted') > -1) cls +=\n                                    ' danger';\n                                else if (t.indexOf('On ') > -1 || t.indexOf('Automation') > -1)\n                                    cls += ' warn';\n                                else cls += ' safe';\n                                return '<span class=\"' + cls + '\">' + t + '<\/span>';\n                            }).join('') : '<span class=\"tag safe\">No critical signals<\/span>';\n\n                        cards.forEach(function(c) {\n                            var v = c.querySelector('.cv'),\n                                id = c.dataset.p;\n                            if (v && id && OV[id] && ORIG[id]) {\n                                v.textContent = OV[id];\n                                v.className = 'cv';\n                                if (ORIG[id].val) v.classList.add(ORIG[id].val);\n                                c.classList.remove('prot', 'c-safe', 'c-danger', 'c-warn',\n                                    'c-cyan');\n                                c.classList.add('c-' + ORIG[id].card);\n                            }\n                        });\n                        document.getElementById('v-nty-s').textContent = D.hostingDetected ?\n                            'Possibly behind a VPN or proxy' : 'Your real ISP network \u2014 no VPN detected';\n                        document.getElementById('v-enc-s').textContent = D.proto === 'https' ?\n                            'Encrypted end-to-end' : 'Visible to ISP';\n                        document.getElementById('v-dnt-s').textContent = !D.dnt ?\n                            'Sites can track you' : 'No tracking';\n                    }\n                });\n\n                \/* phone pill *\/\n                (function() {\n                    var pill = document.getElementById('phone-pill');\n                    var icon = document.getElementById('pp-icon');\n                    if (pill && icon) {\n                        icon.addEventListener('click', function(e) {\n                            e.stopPropagation();\n                            var open = pill.classList.toggle('open');\n                            icon.setAttribute('aria-expanded', open ? 'true' : 'false');\n                        });\n                        document.addEventListener('click', function(e) {\n                            if (pill && !pill.contains(e.target)) { pill.classList.remove('open');\n                                icon.setAttribute('aria-expanded', 'false'); }\n                        });\n                    }\n                })();\n            })();\n        });\n    <\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<footer class=\"elementor-element elementor-element-efb1537 e-con-full e-flex e-con e-parent\" data-id=\"efb1537\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;gradient&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-209ea1c e-con-full e-flex e-con e-child\" data-id=\"209ea1c\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-9b33a4b e-con-full e-flex e-con e-child\" data-id=\"9b33a4b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-66c271a elementor-widget elementor-widget-int-logo\" data-id=\"66c271a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"int-logo.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t        <div class=\"tg-logo\">\r\n            <a href=\"https:\/\/assistyu.com\/it\/\"><img decoding=\"async\" src=\"https:\/\/assistyu.com\/wp-content\/uploads\/2024\/03\/AssistYu-no-background-2.png\" alt=\"\" title=\"\"><\/a>\r\n        <\/div>\r\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35f5aac e-grid-align-mobile-center elementor-shape-rounded elementor-grid-0 e-grid-align-center elementor-widget elementor-widget-social-icons\" data-id=\"35f5aac\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"social-icons.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-social-icons-wrapper elementor-grid\" role=\"list\">\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-linkedin elementor-repeater-item-ae090db\" href=\"https:\/\/www.linkedin.com\/company\/assistyu-com\/\" target=\"_blank\" rel=\"noopener\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">Linkedin<\/span>\n\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-linkedin\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\"><\/path><\/svg>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-facebook elementor-repeater-item-37f08d1\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">Facebook<\/span>\n\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-facebook\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z\"><\/path><\/svg>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t\t\t<span class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t<a class=\"elementor-icon elementor-social-icon elementor-social-icon-x-twitter elementor-repeater-item-117c66a\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-screen-only\">X-twitter<\/span>\n\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-x-twitter\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z\"><\/path><\/svg>\t\t\t\t\t<\/a>\n\t\t\t\t<\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1b54984 elementor-hidden-mobile elementor-widget elementor-widget-html\" data-id=\"1b54984\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div style=\"text-align: center; padding: 10px 0;\">\r\n    <button onclick=\"openPasswordModal()\" class=\"support-dashboard-btn\">\r\n        <svg class=\"btn-icon\" width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n            <path d=\"M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n            <path d=\"M18 8C19.6569 8 21 9.34315 21 11V16C21 17.6569 19.6569 19 18 19H6C4.34315 19 3 17.6569 3 16V11C3 9.34315 4.34315 8 6 8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\/>\r\n            <path d=\"M7 8V6C7 3.23858 9.23858 1 12 1C14.7614 1 17 3.23858 17 6V8\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\"\/>\r\n        <\/svg>\r\n                Dashboard\r\n\r\n        <svg class=\"btn-arrow\" width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n            <path d=\"M5 12H19M19 12L13 6M19 12L13 18\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n        <\/svg>\r\n    <\/button>\r\n<\/div>\r\n\r\n<!-- Custom Password Modal - Technical Dashboard -->\r\n<div id=\"passwordModal\" class=\"password-modal-overlay\" style=\"display: none;\">\r\n    <div class=\"password-modal-container\">\r\n        <div class=\"password-modal-icon\">\r\n            <svg width=\"40\" height=\"40\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n                <path d=\"M12 2L2 7L12 12L22 7L12 2Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n                <path d=\"M2 17L12 22L22 17\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n                <path d=\"M2 12L12 17L22 12\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n            <\/svg>\r\n        <\/div>\r\n        <h3 class=\"password-modal-title\">Technical Dashboard<\/h3>\r\n        <p class=\"password-modal-desc\">Enter access password to continue<\/p>\r\n        <div class=\"password-input-wrapper\">\r\n            <input type=\"password\" id=\"passwordInput\" class=\"password-modal-input\" placeholder=\"Enter password\" autocomplete=\"off\">\r\n            <button class=\"password-toggle\" onclick=\"togglePasswordVisibility()\" type=\"button\">\r\n                <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\">\r\n                    <path d=\"M1 12C1 12 5 4 12 4C19 4 23 12 23 12C23 12 19 20 12 20C5 20 1 12 1 12Z\" stroke=\"currentColor\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/>\r\n                    <circle cx=\"12\" cy=\"12\" r=\"3\" stroke=\"currentColor\" stroke-width=\"1.5\"\/>\r\n                <\/svg>\r\n            <\/button>\r\n        <\/div>\r\n        <div class=\"password-modal-buttons\">\r\n            <button class=\"password-modal-cancel\" onclick=\"closePasswordModal()\">Cancel<\/button>\r\n            <button class=\"password-modal-submit\" onclick=\"validatePassword()\">Access \u2192<\/button>\r\n        <\/div>\r\n        <div class=\"password-modal-footer\">\r\n            <span class=\"footer-dot\"><\/span>\r\n            <span class=\"footer-text\">Authorized access only<\/span>\r\n            <span class=\"footer-dot\"><\/span>\r\n        <\/div>\r\n    <\/div>\r\n<\/div>\r\n\r\n<style>\r\n    \/* Support Dashboard Button - DISCREET & SMALLER *\/\r\n    .support-dashboard-btn {\r\n        display: inline-flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 6px;\r\n        background: rgba(44, 134, 255, 0.08);\r\n        color: #5b6e8c;\r\n        font-size: 12px;\r\n        font-weight: 500;\r\n        font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;\r\n        padding: 6px 14px;\r\n        border-radius: 40px;\r\n        cursor: pointer;\r\n        transition: all 0.25s ease;\r\n        border: 2px solid rgba(44, 134, 255, 0.15);\r\n        letter-spacing: -0.2px;\r\n        backdrop-filter: blur(2px);\r\n    }\r\n\r\n    .support-dashboard-btn .btn-icon {\r\n        transition: transform 0.2s ease;\r\n        opacity: 0.7;\r\n    }\r\n\r\n    .support-dashboard-btn .btn-arrow {\r\n        opacity: 0.5;\r\n        transition: transform 0.2s ease, opacity 0.2s ease;\r\n    }\r\n\r\n    .support-dashboard-btn:hover {\r\n        background: rgba(44, 134, 255, 0.12);\r\n        border-color: rgba(44, 134, 255, 0.3);\r\n        color: #2c86ff;\r\n        transform: translateY(-1px);\r\n    }\r\n\r\n    .support-dashboard-btn:hover .btn-icon {\r\n        transform: scale(1.05);\r\n        opacity: 1;\r\n    }\r\n\r\n    .support-dashboard-btn:hover .btn-arrow {\r\n        opacity: 0.8;\r\n        transform: translateX(2px);\r\n    }\r\n\r\n    \/* Password Modal - Clean & Modern *\/\r\n    .password-modal-overlay {\r\n        position: fixed;\r\n        top: 0;\r\n        left: 0;\r\n        width: 100%;\r\n        height: 100%;\r\n        background: rgba(0, 0, 0, 0.5);\r\n        backdrop-filter: blur(8px);\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        z-index: 10000;\r\n        animation: fadeIn 0.2s ease;\r\n    }\r\n\r\n    @keyframes fadeIn {\r\n        from { opacity: 0; }\r\n        to { opacity: 1; }\r\n    }\r\n\r\n    .password-modal-container {\r\n        background: #ffffff;\r\n        border-radius: 28px;\r\n        padding: 32px 28px;\r\n        width: 90%;\r\n        max-width: 400px;\r\n        text-align: center;\r\n        box-shadow: 0 25px 45px -12px rgba(0, 0, 0, 0.25);\r\n        animation: slideUp 0.3s cubic-bezier(0.2, 0.9, 0.4, 1.1);\r\n    }\r\n\r\n    @keyframes slideUp {\r\n        from {\r\n            opacity: 0;\r\n            transform: translateY(15px);\r\n        }\r\n        to {\r\n            opacity: 1;\r\n            transform: translateY(0);\r\n        }\r\n    }\r\n\r\n    .password-modal-icon {\r\n        width: 56px;\r\n        height: 56px;\r\n        margin: 0 auto 16px;\r\n        background: linear-gradient(135deg, #2c86ff10, #4f46e510);\r\n        border-radius: 50%;\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        color: #2c86ff;\r\n    }\r\n\r\n    .password-modal-title {\r\n        font-size: 1.35rem;\r\n        font-weight: 600;\r\n        margin-bottom: 8px;\r\n        color: #1a2c3e;\r\n        letter-spacing: -0.3px;\r\n        font-family: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\r\n    }\r\n\r\n    .password-modal-desc {\r\n        font-size: 0.8rem;\r\n        color: #7c8ba0;\r\n        margin-bottom: 24px;\r\n        font-family: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\r\n    }\r\n\r\n    .password-input-wrapper {\r\n        position: relative;\r\n        margin-bottom: 24px;\r\n    }\r\n\r\n    .password-modal-input {\r\n        width: 100%;\r\n        padding: 12px 45px 12px 18px;\r\n        font-size: 0.9rem;\r\n        border: 1.5px solid #e4e7eb;\r\n        border-radius: 48px;\r\n        background: #ffffff;\r\n        font-family: monospace;\r\n        font-weight: 500;\r\n        color: #1a2c3e;\r\n        transition: all 0.2s;\r\n        box-sizing: border-box;\r\n    }\r\n\r\n    .password-modal-input:focus {\r\n        outline: none;\r\n        border-color: #2c86ff;\r\n        box-shadow: 0 0 0 3px rgba(44,134,255,0.1);\r\n    }\r\n\r\n    .password-toggle {\r\n        position: absolute;\r\n        right: 14px;\r\n        top: 50%;\r\n        transform: translateY(-50%);\r\n        background: transparent;\r\n        border: none;\r\n        cursor: pointer;\r\n        color: #a0aec0;\r\n        padding: 0;\r\n        display: flex;\r\n        align-items: center;\r\n        transition: color 0.2s;\r\n    }\r\n\r\n    .password-toggle:hover {\r\n        color: #2c86ff;\r\n    }\r\n\r\n    .password-modal-buttons {\r\n        display: flex;\r\n        gap: 10px;\r\n        margin-bottom: 20px;\r\n    }\r\n\r\n    .password-modal-cancel {\r\n        flex: 1;\r\n        background: #f1f3f7;\r\n        border: none;\r\n        padding: 10px 0;\r\n        border-radius: 48px;\r\n        font-size: 0.8rem;\r\n        font-weight: 500;\r\n        color: #6b7a8f;\r\n        cursor: pointer;\r\n        transition: all 0.2s;\r\n        font-family: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\r\n    }\r\n\r\n    .password-modal-cancel:hover {\r\n        background: #e8ecf1;\r\n        color: #4a5a72;\r\n    }\r\n\r\n    .password-modal-submit {\r\n        flex: 1;\r\n        background: linear-gradient(135deg, #2c86ff, #4f46e5);\r\n        border: none;\r\n        padding: 10px 0;\r\n        border-radius: 48px;\r\n        font-size: 0.8rem;\r\n        font-weight: 500;\r\n        color: white;\r\n        cursor: pointer;\r\n        transition: all 0.25s;\r\n        font-family: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\r\n    }\r\n\r\n    .password-modal-submit:hover {\r\n        background: linear-gradient(135deg, #1e6ad0, #3b35c4);\r\n        transform: translateY(-1px);\r\n        box-shadow: 0 4px 12px -4px rgba(44,134,255,0.4);\r\n    }\r\n\r\n    .password-modal-footer {\r\n        display: flex;\r\n        align-items: center;\r\n        justify-content: center;\r\n        gap: 8px;\r\n        font-size: 0.65rem;\r\n        color: #a0aec0;\r\n        font-family: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\r\n    }\r\n\r\n    .footer-dot {\r\n        width: 3px;\r\n        height: 3px;\r\n        background: #cbd5e1;\r\n        border-radius: 50%;\r\n    }\r\n\r\n    .footer-text {\r\n        letter-spacing: 0.3px;\r\n    }\r\n<\/style>\r\n\r\n<script>\r\n    function openPasswordModal() {\r\n        const modal = document.getElementById('passwordModal');\r\n        if (modal) {\r\n            modal.style.display = 'flex';\r\n            document.getElementById('passwordInput').value = '';\r\n            setTimeout(() => {\r\n                document.getElementById('passwordInput').focus();\r\n            }, 100);\r\n        }\r\n    }\r\n\r\n    function closePasswordModal() {\r\n        const modal = document.getElementById('passwordModal');\r\n        if (modal) {\r\n            modal.style.display = 'none';\r\n        }\r\n    }\r\n\r\n    function togglePasswordVisibility() {\r\n        const input = document.getElementById('passwordInput');\r\n        if (input.type === 'password') {\r\n            input.type = 'text';\r\n        } else {\r\n            input.type = 'password';\r\n        }\r\n    }\r\n\r\n    function validatePassword() {\r\n        const password = document.getElementById('passwordInput').value;\r\n        if (password === \"ay1589\") {\r\n            window.location.href = \"https:\/\/assistyu.com\/team-dashboard\/\";\r\n        } else {\r\n            alert(\"Wrong password.\");\r\n            document.getElementById('passwordInput').value = '';\r\n            document.getElementById('passwordInput').focus();\r\n        }\r\n    }\r\n\r\n    \/\/ Close modal when clicking outside\r\n    document.addEventListener('click', function(event) {\r\n        const modal = document.getElementById('passwordModal');\r\n        const modalContainer = document.querySelector('.password-modal-container');\r\n        if (modal && modal.style.display === 'flex' && modalContainer && !modalContainer.contains(event.target) && !event.target.closest('.support-dashboard-btn')) {\r\n            closePasswordModal();\r\n        }\r\n    });\r\n\r\n    \/\/ Enter key support\r\n    const passwordInput = document.getElementById('passwordInput');\r\n    if (passwordInput) {\r\n        passwordInput.addEventListener('keypress', function(e) {\r\n            if (e.key === 'Enter') {\r\n                validatePassword();\r\n            }\r\n        });\r\n    }\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-dc514fe e-con-full elementor-hidden-mobile e-flex e-con e-child\" data-id=\"dc514fe\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4fe9796 elementor-widget elementor-widget-heading\" data-id=\"4fe9796\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Useful Links<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c3f8b49 elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"c3f8b49\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/assistyu.com\/services\/\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-greater-than-equal\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Services<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/assistyu.com\/security-products\/\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-greater-than-equal\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Products<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/assistyu.com\/help-center\/\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-greater-than-equal\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Help Center<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/assistyu.com\/about-assistyu\/\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-greater-than-equal\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">About Us<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/assistyu.com\/contact\/\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-greater-than-equal\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Contact us<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/assistyu.com\/security-insights\/\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-greater-than-equal\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M55.22 107.69l175.56 68.09-175.44 68.05c-18.39 6.03-27.88 24.39-21.2 41l12.09 30.08c6.68 16.61 26.99 25.19 45.38 19.15L393.02 214.2c13.77-4.52 22.98-16.61 22.98-30.17v-15.96c0-13.56-9.21-25.65-22.98-30.17L91.3 17.92c-18.29-6-38.51 2.53-45.15 19.06L34.12 66.9c-6.64 16.53 2.81 34.79 21.1 40.79zM424 400H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h400c13.25 0 24-10.75 24-24v-48c0-13.26-10.75-24-24-24z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">News &amp; Tips<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e8f87b2 e-con-full e-flex e-con e-child\" data-id=\"e8f87b2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c429654 elementor-hidden-mobile elementor-widget elementor-widget-heading\" data-id=\"c429654\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Contact<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9e7ca36 elementor-mobile-align-center elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"9e7ca36\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/assistyu.com\/services\/\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-info-circle\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Estrategias de Marketing LE Paradise - AssistYu<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"tel:34951550227\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-phone-volume\" viewBox=\"0 0 384 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M97.333 506.966c-129.874-129.874-129.681-340.252 0-469.933 5.698-5.698 14.527-6.632 21.263-2.422l64.817 40.513a17.187 17.187 0 0 1 6.849 20.958l-32.408 81.021a17.188 17.188 0 0 1-17.669 10.719l-55.81-5.58c-21.051 58.261-20.612 122.471 0 179.515l55.811-5.581a17.188 17.188 0 0 1 17.669 10.719l32.408 81.022a17.188 17.188 0 0 1-6.849 20.958l-64.817 40.513a17.19 17.19 0 0 1-21.264-2.422zM247.126 95.473c11.832 20.047 11.832 45.008 0 65.055-3.95 6.693-13.108 7.959-18.718 2.581l-5.975-5.726c-3.911-3.748-4.793-9.622-2.261-14.41a32.063 32.063 0 0 0 0-29.945c-2.533-4.788-1.65-10.662 2.261-14.41l5.975-5.726c5.61-5.378 14.768-4.112 18.718 2.581zm91.787-91.187c60.14 71.604 60.092 175.882 0 247.428-4.474 5.327-12.53 5.746-17.552.933l-5.798-5.557c-4.56-4.371-4.977-11.529-.93-16.379 49.687-59.538 49.646-145.933 0-205.422-4.047-4.85-3.631-12.008.93-16.379l5.798-5.557c5.022-4.813 13.078-4.394 17.552.933zm-45.972 44.941c36.05 46.322 36.108 111.149 0 157.546-4.39 5.641-12.697 6.251-17.856 1.304l-5.818-5.579c-4.4-4.219-4.998-11.095-1.285-15.931 26.536-34.564 26.534-82.572 0-117.134-3.713-4.836-3.115-11.711 1.285-15.931l5.818-5.579c5.159-4.947 13.466-4.337 17.856 1.304z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">+34 951 550 227<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"mailto:office@assistyu.com\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-envelope\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M502.3 190.8c3.9-3.1 9.7-.2 9.7 4.7V400c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V195.6c0-5 5.7-7.8 9.7-4.7 22.4 17.4 52.1 39.5 154.1 113.6 21.1 15.4 56.7 47.8 92.2 47.6 35.7.3 72-32.8 92.3-47.6 102-74.1 131.6-96.3 154-113.7zM256 320c23.2.4 56.6-29.2 73.4-41.4 132.7-96.3 142.8-104.7 173.4-128.7 5.8-4.5 9.2-11.5 9.2-18.9v-19c0-26.5-21.5-48-48-48H48C21.5 64 0 85.5 0 112v19c0 7.4 3.4 14.3 9.2 18.9 30.6 23.9 40.7 32.4 173.4 128.7 16.8 12.2 50.2 41.8 73.4 41.4z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">office@assistyu.com<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/assistyu.com\/services\/\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-map-marker-alt\" viewBox=\"0 0 384 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M172.268 501.67C26.97 291.031 0 269.413 0 192 0 85.961 85.961 0 192 0s192 85.961 192 192c0 77.413-26.97 99.031-172.268 309.67-9.535 13.774-29.93 13.773-39.464 0zM192 272c44.183 0 80-35.817 80-80s-35.817-80-80-80-80 35.817-80 80 35.817 80 80 80z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">C. Lope de Vega 60, 29631 Benalmadena<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ca73341 e-con-full e-flex e-con e-child\" data-id=\"ca73341\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e2867f8 elementor-hidden-mobile elementor-widget elementor-widget-heading\" data-id=\"e2867f8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Subscribe<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f946144 elementor-widget elementor-widget-html\" data-id=\"f946144\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- NEWSLETTER COLUMN - MODERN & RESPONSIVE -->\r\n<div class=\"footer-newsletter-col\" style=\"display: flex; flex-direction: column;\">\r\n  <h4 style=\"font-weight: 700; font-size: 1.1rem; margin-bottom: 1rem; color: #fff; letter-spacing: -0.2px;\">Join the newsletter<\/h4>\r\n  <p style=\"color: #a0aec0; font-size: 0.85rem; margin-bottom: 1.2rem; line-height: 1.5;\">Get exclusive updates, early access & design insights \u2014 straight to your inbox.<\/p>\r\n  \r\n  <button id=\"openNewsletterBtnFooter\" style=\"background: linear-gradient(135deg, #2c86ff, #4f46e5); border: none; padding: 0.85rem 1.2rem; border-radius: 60px; font-weight: 600; color: white; cursor: pointer; display: inline-flex; align-items: center; justify-content: center; gap: 10px; font-family: inherit; font-size: 0.9rem; transition: all 0.25s ease; width: 100%; max-width: 220px; box-shadow: 0 4px 12px rgba(44,134,255,0.3);\">\r\n    <i class=\"fas fa-envelope\" style=\"font-size: 0.9rem;\"><\/i> Subscribe now\r\n  <\/button>\r\n<\/div>\r\n\r\n<!-- MODAL - FULLY OPTIMIZED & RESPONSIVE -->\r\n<div id=\"newsletterModalFooter\" style=\"display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.85); backdrop-filter: blur(12px); z-index: 9999; align-items: center; justify-content: center; font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; padding: 1rem;\">\r\n  <div style=\"background: linear-gradient(135deg, #0f0f13 0%, #1a1c23 100%); max-width: 480px; width: 100%; border-radius: 2rem; box-shadow: 0 25px 50px -12px rgba(0,0,0,0.5), 0 0 0 1px rgba(44,134,255,0.15); overflow: hidden; animation: modalSlideIn 0.3s ease-out;\">\r\n    \r\n    <!-- Decorative accent bar -->\r\n    <div style=\"height: 4px; background: linear-gradient(90deg, #2c86ff, #4f46e5, #8b5cf6); width: 100%;\"><\/div>\r\n    \r\n    <!-- Modal content -->\r\n    <div style=\"padding: 1.75rem 1.5rem 2rem 1.5rem;\">\r\n      \r\n      <!-- Header section -->\r\n      <div style=\"text-align: center; margin-bottom: 1.75rem;\">\r\n        <div style=\"width: 56px; height: 56px; background: linear-gradient(135deg, rgba(44,134,255,0.15), rgba(79,70,229,0.15)); border-radius: 50%; display: flex; align-items: center; justify-content: center; margin: 0 auto 1rem auto;\">\r\n          <i class=\"fas fa-paper-plane\" style=\"font-size: 1.75rem; background: linear-gradient(135deg, #2c86ff, #4f46e5); -webkit-background-clip: text; background-clip: text; color: transparent;\"><\/i>\r\n        <\/div>\r\n        <h3 style=\"font-size: 1.75rem; font-weight: 700; background: linear-gradient(135deg, #ffffff, #c084fc); -webkit-background-clip: text; background-clip: text; color: transparent; margin: 0 0 0.5rem 0;\">Stay inspired<\/h3>\r\n        <p style=\"color: #9ca3af; font-size: 0.875rem; margin: 0; line-height: 1.5;\">Join 2,000+ creatives getting weekly updates<\/p>\r\n      <\/div>\r\n      \r\n      <!-- Form -->\r\n      <form id=\"newsletterFormFooter\" style=\"margin-bottom: 0;\">\r\n        <div style=\"margin-bottom: 1.25rem;\">\r\n          <div style=\"position: relative;\">\r\n            <i class=\"fas fa-envelope\" style=\"position: absolute; left: 1rem; top: 50%; transform: translateY(-50%); color: #6b7280; font-size: 0.875rem; pointer-events: none;\"><\/i>\r\n            <input type=\"email\" id=\"modalEmailFooter\" required placeholder=\"hello@creative.com\" style=\"width: 100%; padding: 0.875rem 1rem 0.875rem 2.75rem; background: #0a0b0f; border: 1.5px solid #2a2d3a; border-radius: 1rem; color: white; font-size: 0.9375rem; outline: none; transition: all 0.2s; font-family: inherit;\">\r\n          <\/div>\r\n        <\/div>\r\n        \r\n        <!-- Benefits list -->\r\n        <div style=\"display: flex; gap: 0.75rem; margin-bottom: 1.5rem; flex-wrap: wrap; justify-content: center;\">\r\n          <div style=\"display: flex; align-items: center; gap: 0.375rem;\">\r\n            <i class=\"fas fa-check-circle\" style=\"color: #2c86ff; font-size: 0.75rem;\"><\/i>\r\n            <span style=\"font-size: 0.7rem; color: #9ca3af;\">No spam<\/span>\r\n          <\/div>\r\n          <div style=\"display: flex; align-items: center; gap: 0.375rem;\">\r\n            <i class=\"fas fa-check-circle\" style=\"color: #2c86ff; font-size: 0.75rem;\"><\/i>\r\n            <span style=\"font-size: 0.7rem; color: #9ca3af;\">Free resources<\/span>\r\n          <\/div>\r\n          <div style=\"display: flex; align-items: center; gap: 0.375rem;\">\r\n            <i class=\"fas fa-check-circle\" style=\"color: #2c86ff; font-size: 0.75rem;\"><\/i>\r\n            <span style=\"font-size: 0.7rem; color: #9ca3af;\">Unsubscribe anytime<\/span>\r\n          <\/div>\r\n        <\/div>\r\n        \r\n        <button type=\"submit\" id=\"submitNewsFooterBtn\" style=\"width: 100%; background: linear-gradient(135deg, #2c86ff, #4f46e5); border: none; padding: 0.875rem; border-radius: 1rem; font-weight: 700; color: white; font-size: 0.9375rem; cursor: pointer; font-family: inherit; display: flex; align-items: center; justify-content: center; gap: 0.625rem; transition: all 0.25s ease; position: relative; overflow: hidden;\">\r\n          <i class=\"fas fa-paper-plane\" style=\"font-size: 0.875rem;\"><\/i> Subscribe now\r\n        <\/button>\r\n        \r\n        <div id=\"formStatusFooter\" style=\"font-size: 0.75rem; margin-top: 1rem; text-align: center; min-height: 2rem; font-weight: 500;\"><\/div>\r\n      <\/form>\r\n      \r\n      <!-- Close button (X) at top right -->\r\n      <button id=\"closeModalFooterBtn\" style=\"position: absolute; top: 1rem; right: 1rem; background: rgba(255,255,255,0.05); border: none; color: #9ca3af; font-size: 1.25rem; cursor: pointer; width: 32px; height: 32px; border-radius: 50%; display: flex; align-items: center; justify-content: center; transition: all 0.2s; backdrop-filter: blur(4px);\">\r\n        <i class=\"fas fa-times\"><\/i>\r\n      <\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<!-- Add animation keyframes -->\r\n<style>\r\n  @keyframes modalSlideIn {\r\n    from {\r\n      opacity: 0;\r\n      transform: scale(0.95) translateY(-10px);\r\n    }\r\n    to {\r\n      opacity: 1;\r\n      transform: scale(1) translateY(0);\r\n    }\r\n  }\r\n  \r\n  @media (max-width: 480px) {\r\n    \/* Center the newsletter column content on mobile *\/\r\n    .footer-newsletter-col {\r\n      text-align: center !important;\r\n      align-items: center !important;\r\n    }\r\n    .footer-newsletter-col p {\r\n      text-align: center !important;\r\n    }\r\n    .footer-newsletter-col button {\r\n      max-width: 100% !important;\r\n      margin: 0 auto;\r\n    }\r\n    \/* Modal adjustments *\/\r\n    #newsletterModalFooter > div {\r\n      border-radius: 1.5rem !important;\r\n    }\r\n    #newsletterModalFooter > div > div {\r\n      padding: 1.25rem 1rem 1.5rem 1rem !important;\r\n    }\r\n    #newsletterModalFooter h3 {\r\n      font-size: 1.5rem !important;\r\n    }\r\n  }\r\n  \r\n  @media (max-width: 380px) {\r\n    #newsletterModalFooter > div > div {\r\n      padding: 1rem 0.875rem 1.25rem 0.875rem !important;\r\n    }\r\n    #newsletterModalFooter h3 {\r\n      font-size: 1.35rem !important;\r\n    }\r\n    #newsletterModalFooter p {\r\n      font-size: 0.75rem !important;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<!-- Font Awesome + JavaScript -->\r\n<link rel=\"stylesheet\" href=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/6.0.0-beta3\/css\/all.min.css\">\r\n<script>\r\n  (function() {\r\n    \/\/ ===========================================\r\n    \/\/ \ud83d\udd27 CHANGE THIS EMAIL - Where notifications go\r\n    \/\/ ===========================================\r\n    const NOTIFICATION_EMAIL = \"megamows.media@gmail.com\";  \/\/ <-- Change this to any email you want\r\n    \/\/ ===========================================\r\n    \r\n    const modal = document.getElementById('newsletterModalFooter');\r\n    const openBtn = document.getElementById('openNewsletterBtnFooter');\r\n    const closeBtn = document.getElementById('closeModalFooterBtn');\r\n    const form = document.getElementById('newsletterFormFooter');\r\n    const emailInput = document.getElementById('modalEmailFooter');\r\n    const statusDiv = document.getElementById('formStatusFooter');\r\n\r\n    \/\/ Open modal with smooth transition\r\n    if (openBtn) {\r\n      openBtn.addEventListener('click', () => {\r\n        if (modal) {\r\n          modal.style.display = 'flex';\r\n          document.body.style.overflow = 'hidden';\r\n          if (statusDiv) statusDiv.innerHTML = '';\r\n          if (emailInput) emailInput.value = '';\r\n          \/\/ Reset any previous error states\r\n          if (emailInput) emailInput.style.borderColor = '#2a2d3a';\r\n        }\r\n      });\r\n    }\r\n\r\n    \/\/ Close modal function\r\n    function closeModalFooter() {\r\n      if (modal) {\r\n        modal.style.display = 'none';\r\n        document.body.style.overflow = '';\r\n        if (statusDiv) statusDiv.innerHTML = '';\r\n        if (emailInput) emailInput.style.borderColor = '#2a2d3a';\r\n      }\r\n    }\r\n\r\n    if (closeBtn) closeBtn.addEventListener('click', closeModalFooter);\r\n    \r\n    \/\/ Close on backdrop click\r\n    if (modal) {\r\n      modal.addEventListener('click', (e) => {\r\n        if (e.target === modal) closeModalFooter();\r\n      });\r\n    }\r\n    \r\n    \/\/ Close on Escape key\r\n    document.addEventListener('keydown', (e) => {\r\n      if (e.key === 'Escape' && modal && modal.style.display === 'flex') {\r\n        closeModalFooter();\r\n      }\r\n    });\r\n\r\n    \/\/ Handle form submission\r\n    if (form) {\r\n      form.addEventListener('submit', async (e) => {\r\n        e.preventDefault();\r\n        \r\n        const userEmail = emailInput.value.trim();\r\n        const emailPattern = \/^[^\\s@]+@([^\\s@]+\\.)+[^\\s@]+$\/;\r\n        \r\n        \/\/ Validation with visual feedback\r\n        if (!userEmail) {\r\n          statusDiv.innerHTML = '\u26a0\ufe0f Please enter your email address';\r\n          statusDiv.style.color = '#f87171';\r\n          emailInput.style.borderColor = '#ef4444';\r\n          return;\r\n        }\r\n        if (!emailPattern.test(userEmail)) {\r\n          statusDiv.innerHTML = '\u274c Please enter a valid email address';\r\n          statusDiv.style.color = '#f87171';\r\n          emailInput.style.borderColor = '#ef4444';\r\n          return;\r\n        }\r\n        \r\n        \/\/ Reset border color\r\n        emailInput.style.borderColor = '#2a2d3a';\r\n\r\n        const submitBtn = document.getElementById('submitNewsFooterBtn');\r\n        const originalText = submitBtn.innerHTML;\r\n        submitBtn.innerHTML = '<i class=\"fas fa-spinner fa-pulse\"><\/i> Subscribing...';\r\n        submitBtn.disabled = true;\r\n        statusDiv.innerHTML = '<span style=\"color: #60a5fa;\">\u23f3 Sending your request...<\/span>';\r\n\r\n        try {\r\n          \/\/ Send notification to your email\r\n          const formSubmitUrl = 'https:\/\/formsubmit.co\/ajax\/' + encodeURIComponent(NOTIFICATION_EMAIL);\r\n          const payload = {\r\n            email: userEmail,\r\n            _subject: `\ud83d\udce7 New Newsletter Subscription!`,\r\n            message: `\ud83c\udf89 A new user just subscribed to your newsletter!\\n\\n\ud83d\udce7 Email: ${userEmail}\\n\\n\ud83d\udcc5 Time: ${new Date().toLocaleString()}\\n\\n\ud83c\udf10 Source: Footer newsletter modal\\n\\n\ud83d\udca1 IP Address: ${await getClientIP() || 'Not available'}`,\r\n            _captcha: 'false'\r\n          };\r\n          \r\n          const response = await fetch(formSubmitUrl, {\r\n            method: 'POST',\r\n            headers: { 'Content-Type': 'application\/json', 'Accept': 'application\/json' },\r\n            body: JSON.stringify(payload)\r\n          });\r\n          \r\n          const result = await response.json();\r\n          \r\n          if (response.ok && result.success !== false) {\r\n            statusDiv.innerHTML = '\u2705 Subscribed successfully! Welcome aboard \ud83c\udf89';\r\n            statusDiv.style.color = '#4ade80';\r\n            emailInput.value = '';\r\n            setTimeout(() => {\r\n              closeModalFooter();\r\n            }, 2000);\r\n          } else {\r\n            statusDiv.innerHTML = '\u26a0\ufe0f Something went wrong. Please try again.';\r\n            statusDiv.style.color = '#fbbf24';\r\n          }\r\n        } catch (err) {\r\n          statusDiv.innerHTML = '\u274c Connection error. Please check your internet.';\r\n          statusDiv.style.color = '#ef4444';\r\n        } finally {\r\n          submitBtn.innerHTML = originalText;\r\n          submitBtn.disabled = false;\r\n        }\r\n      });\r\n    }\r\n    \r\n    \/\/ Helper function to get client IP (optional)\r\n    async function getClientIP() {\r\n      try {\r\n        const response = await fetch('https:\/\/api.ipify.org?format=json');\r\n        const data = await response.json();\r\n        return data.ip;\r\n      } catch (err) {\r\n        return null;\r\n      }\r\n    }\r\n\r\n    \/\/ Hover and focus styles\r\n    const style = document.createElement('style');\r\n    style.textContent = `\r\n      #openNewsletterBtnFooter:hover {\r\n        transform: translateY(-2px);\r\n        box-shadow: 0 8px 20px rgba(44,134,255,0.4);\r\n        background: linear-gradient(135deg, #1e6fd9, #3b36c4);\r\n      }\r\n      #openNewsletterBtnFooter:active {\r\n        transform: translateY(0);\r\n      }\r\n      #closeModalFooterBtn:hover {\r\n        background: rgba(255,255,255,0.15);\r\n        color: white;\r\n        transform: rotate(90deg);\r\n      }\r\n      #modalEmailFooter:focus {\r\n        border-color: #2c86ff !important;\r\n        box-shadow: 0 0 0 3px rgba(44,134,255,0.2);\r\n      }\r\n      #submitNewsFooterBtn:hover {\r\n        transform: translateY(-1px);\r\n        box-shadow: 0 6px 20px rgba(44,134,255,0.35);\r\n        background: linear-gradient(135deg, #1e6fd9, #3b36c4);\r\n      }\r\n      #submitNewsFooterBtn:active {\r\n        transform: translateY(0);\r\n      }\r\n      .footer-newsletter-col button {\r\n        transition: all 0.25s ease;\r\n      }\r\n    `;\r\n    document.head.appendChild(style);\r\n  })();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-345a43b e-con-full e-flex e-con e-child\" data-id=\"345a43b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-4003dd1 e-con-full e-flex e-con e-child\" data-id=\"4003dd1\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c6b1ff8 elementor-widget elementor-widget-int-footer-nav\" data-id=\"c6b1ff8\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"int-footer-nav.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\r\n        <div class=\"tg-copyright-right text-center text-md-end\">\r\n                    <a class=\"text-anim-2\" href=\"https:\/\/assistyu.com\/consent\/\">Consent Agreement<\/a>\r\n                    <a class=\"text-anim-2\" href=\"https:\/\/assistyu.com\/privacy-policy\/\">Privacy Policy<\/a>\r\n                    <a class=\"text-anim-2\" href=\"https:\/\/assistyu.com\/legal-notice-terms-conditions\/\">Terms &amp; Conditions<\/a>\r\n                    <a class=\"text-anim-2\" href=\"https:\/\/assistyu.com\/delivery-refunds-policy\/\">Delivery &amp; Refunds<\/a>\r\n                <\/div>\r\n        \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d2dba3a e-con-full e-flex e-con e-child\" data-id=\"d2dba3a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-455c237 elementor-widget elementor-widget-text-editor\" data-id=\"455c237\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\tCopyright @ 2026 <a href=\"https:\/\/assistyu.com\/\">AssistYu<\/a>. All Rights Reserved\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/footer>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>AssistYU \u2014 Network Scan Network Security Scan Real-time diagnostic of your IP exposure, browser fingerprint, open ports, blacklists, and threat intelligence \u2014 entirely client-side, zero data stored. Start Security Scan IP &amp; location Threat intel Browser fingerprint Speed test Risk score AssistYU Network Scan \u00b7 real-time diagnostic Your connection is being analyzed Radar sweep \u25cf [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":3927,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-6614","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/assistyu.com\/it\/wp-json\/wp\/v2\/pages\/6614","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/assistyu.com\/it\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/assistyu.com\/it\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/assistyu.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/assistyu.com\/it\/wp-json\/wp\/v2\/comments?post=6614"}],"version-history":[{"count":140,"href":"https:\/\/assistyu.com\/it\/wp-json\/wp\/v2\/pages\/6614\/revisions"}],"predecessor-version":[{"id":6829,"href":"https:\/\/assistyu.com\/it\/wp-json\/wp\/v2\/pages\/6614\/revisions\/6829"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/assistyu.com\/it\/wp-json\/wp\/v2\/media\/3927"}],"wp:attachment":[{"href":"https:\/\/assistyu.com\/it\/wp-json\/wp\/v2\/media?parent=6614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}