docs(readme): раздельные анимированные каналы для Zapret v1, Zapret v2 и ByeDPI в диаграмме архитектуры

This commit is contained in:
Dushnilin
2026-08-15 20:28:52 +03:00
parent d4121b191b
commit 983c81b1e1
+241 -148
View File
@@ -1,208 +1,301 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 500" width="100%" height="100%">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 620" width="100%" height="100%">
<defs>
<!-- Background Space Gradients -->
<radialGradient id="arch-bg" cx="50%" cy="50%" r="75%">
<stop offset="0%" stop-color="#0F172A" stop-opacity="0.95"/>
<stop offset="60%" stop-color="#090D16" stop-opacity="0.98"/>
<stop offset="100%" stop-color="#030712" stop-opacity="1"/>
<!-- Dark Tech Canvas Gradient -->
<radialGradient id="arch-bg" cx="50%" cy="50%" r="80%">
<stop offset="0%" stop-color="#0F172A" stop-opacity="0.98"/>
<stop offset="50%" stop-color="#090D16" stop-opacity="0.99"/>
<stop offset="100%" stop-color="#020617" stop-opacity="1"/>
</radialGradient>
<linearGradient id="card-bg-subtle" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#1E293B" stop-opacity="0.7"/>
<stop offset="100%" stop-color="#0B132B" stop-opacity="0.9"/>
</linearGradient>
<!-- Track Gradients -->
<linearGradient id="stream-green" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#10B981" stop-opacity="0.1"/>
<stop offset="50%" stop-color="#10B981" stop-opacity="0.9"/>
<stop offset="100%" stop-color="#34D399" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="stream-purple" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#8B5CF6" stop-opacity="0.1"/>
<stop offset="50%" stop-color="#8B5CF6" stop-opacity="0.9"/>
<stop offset="100%" stop-color="#C084FC" stop-opacity="0.1"/>
</linearGradient>
<linearGradient id="stream-cyan" x1="0%" y1="0%" x2="100%" y2="0%">
<stop offset="0%" stop-color="#00F0FF" stop-opacity="0.1"/>
<stop offset="50%" stop-color="#00F0FF" stop-opacity="0.9"/>
<stop offset="100%" stop-color="#38BDF8" stop-opacity="0.1"/>
<linearGradient id="card-glass" x1="0%" y1="0%" x2="0%" y2="100%">
<stop offset="0%" stop-color="#1E293B" stop-opacity="0.8"/>
<stop offset="100%" stop-color="#0B132B" stop-opacity="0.95"/>
</linearGradient>
<!-- Glowing Filters -->
<filter id="glow-p" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="5" result="blur" />
<filter id="neon-green" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="4" result="blur" />
<feComposite in="SourceGraphic" in2="blur" operator="over" />
</filter>
<filter id="neon-amber" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="4" result="blur" />
<feComposite in="SourceGraphic" in2="blur" operator="over" />
</filter>
<filter id="neon-purple" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="4" result="blur" />
<feComposite in="SourceGraphic" in2="blur" operator="over" />
</filter>
<filter id="neon-pink" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="4" result="blur" />
<feComposite in="SourceGraphic" in2="blur" operator="over" />
</filter>
<filter id="neon-cyan" x="-30%" y="-30%" width="160%" height="160%">
<feGaussianBlur stdDeviation="4" result="blur" />
<feComposite in="SourceGraphic" in2="blur" operator="over" />
</filter>
</defs>
<style>
/* CSS Animations for Packet Conduits */
@keyframes flowTrackDirect {
0% { stroke-dashoffset: 160; }
100% { stroke-dashoffset: 0; }
/* CSS Seamless Keyframe Loops (Period = Sum of Dash + Gap) */
@keyframes flowGreen {
from { stroke-dashoffset: 168; }
to { stroke-dashoffset: 0; }
}
@keyframes flowTrackZapret {
0% { stroke-dashoffset: 160; }
100% { stroke-dashoffset: 0; }
@keyframes flowAmber {
from { stroke-dashoffset: 168; }
to { stroke-dashoffset: 0; }
}
@keyframes flowTrackProxy {
0% { stroke-dashoffset: 160; }
100% { stroke-dashoffset: 0; }
@keyframes flowPurple {
from { stroke-dashoffset: 168; }
to { stroke-dashoffset: 0; }
}
@keyframes nodeBlink {
0%, 100% { opacity: 0.9; transform: scale(1); }
@keyframes flowPink {
from { stroke-dashoffset: 168; }
to { stroke-dashoffset: 0; }
}
@keyframes flowCyan {
from { stroke-dashoffset: 168; }
to { stroke-dashoffset: 0; }
}
@keyframes pulseCardBorder {
0%, 100% { stroke-opacity: 0.35; }
50% { stroke-opacity: 0.95; }
}
@keyframes blinkLed {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.3; transform: scale(0.85); }
}
@keyframes routerPulse {
0%, 100% { stroke: rgba(0, 240, 255, 0.4); }
50% { stroke: rgba(0, 240, 255, 0.95); }
@keyframes packetSplitPulse {
0%, 100% { opacity: 0.4; transform: translateX(0px); }
50% { opacity: 1; transform: translateX(8px); }
}
.wire-in { stroke-dasharray: 8 12; animation: flowTrackDirect 2s linear infinite; }
.wire-direct { stroke-dasharray: 12 24; animation: flowTrackDirect 1.8s linear infinite; }
.wire-zapret { stroke-dasharray: 12 24; animation: flowTrackZapret 2.2s linear infinite; }
.wire-proxy { stroke-dasharray: 12 24; animation: flowTrackProxy 1.5s linear infinite; }
.stream-lan { stroke-dasharray: 14 28; animation: flowCyan 2.2s linear infinite; }
.stream-direct { stroke-dasharray: 14 28; animation: flowGreen 1.8s linear infinite; }
.stream-zapret1 { stroke-dasharray: 14 28; animation: flowAmber 2.0s linear infinite; }
.stream-zapret2 { stroke-dasharray: 14 28; animation: flowPurple 1.6s linear infinite; }
.stream-byedpi { stroke-dasharray: 14 28; animation: flowPink 2.4s linear infinite; }
.stream-proxy { stroke-dasharray: 14 28; animation: flowCyan 1.5s linear infinite; }
.node-pulse { animation: nodeBlink 2.4s ease-in-out infinite; }
.core-border { animation: routerPulse 3.5s ease-in-out infinite; }
.card-pulse-green { animation: pulseCardBorder 3.2s ease-in-out infinite; }
.card-pulse-amber { animation: pulseCardBorder 2.8s ease-in-out infinite; }
.card-pulse-purple { animation: pulseCardBorder 2.4s ease-in-out infinite; }
.card-pulse-pink { animation: pulseCardBorder 3.5s ease-in-out infinite; }
.card-pulse-cyan { animation: pulseCardBorder 2.0s ease-in-out infinite; }
.text-title { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-weight: 800; font-size: 20px; fill: #FFFFFF; }
.text-sub { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-weight: 600; font-size: 13px; fill: #94A3B8; }
.text-node-h { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-weight: 700; font-size: 14px; fill: #F1F5F9; }
.text-node-d { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-weight: 400; font-size: 11px; fill: #94A3B8; }
.text-badge { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 11px; font-weight: 700; }
.led-dot { animation: blinkLed 1.8s ease-in-out infinite; }
.desync-anim { animation: packetSplitPulse 2s ease-in-out infinite; }
.title-h1 { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-weight: 900; font-size: 21px; fill: #FFFFFF; letter-spacing: 0.5px; }
.title-sub { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-weight: 500; font-size: 13px; fill: #94A3B8; }
.node-title { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-weight: 700; font-size: 14px; fill: #F8FAFC; }
.node-sub { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; font-weight: 400; font-size: 11px; fill: #94A3B8; }
.tag-mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 10px; font-weight: 700; }
</style>
<!-- Surface Base -->
<rect width="1200" height="500" rx="16" fill="url(#arch-bg)" stroke="#1E293B" stroke-width="1.5"/>
<!-- Background Surface -->
<rect width="1200" height="620" rx="16" fill="url(#arch-bg)" stroke="#1E293B" stroke-width="1.5"/>
<!-- Diagram Title Header -->
<g transform="translate(50, 45)">
<text class="text-title">⚡ TACHYON TRAFFIC ORCHESTRATION PIPELINE</text>
<text y="24" class="text-sub">Интеллектуальная многопоточная селективная маршрутизация и десинхронизация пакетов</text>
<!-- Top Title Header -->
<g transform="translate(45, 40)">
<text class="title-h1">⚡ TACHYON NETWORK ORCHESTRATION PIPELINE</text>
<text y="22" class="title-sub">Интеллектуальная селективная маршрутизация и многоуровневая десинхронизация пакетов DPI</text>
</g>
<!-- ================================================================= -->
<!-- CONNECTING CONDUIT WIRES (Animated Packet Flow) -->
<!-- CONNECTING HIGH-SPEED CONDUITS (Animated Laser Streams) -->
<!-- ================================================================= -->
<g fill="none" stroke-linecap="round">
<!-- Input Wire: Clients -> Router Core -->
<path d="M 230,260 L 370,260" stroke="#334155" stroke-width="3"/>
<path d="M 230,260 L 370,260" stroke="#38BDF8" stroke-width="3" class="wire-in" filter="url(#glow-p)"/>
<!-- LAN Inbound: Clients -> Router Core -->
<path d="M 225,325 L 350,325" stroke="#1E293B" stroke-width="4"/>
<path d="M 225,325 L 350,325" stroke="#00F0FF" stroke-width="3" class="stream-lan" filter="url(#neon-cyan)"/>
<!-- Path 1: Router -> Direct WAN (Green) -->
<path d="M 610,210 C 680,210 700,130 770,130 L 930,130" stroke="#1E293B" stroke-width="3"/>
<path d="M 610,210 C 680,210 700,130 770,130 L 930,130" stroke="#10B981" stroke-width="3" class="wire-direct" filter="url(#glow-p)"/>
<!-- Path 1: Direct WAN (Green) -->
<path d="M 590,260 C 660,260 700,120 780,120 L 890,120" stroke="#1E293B" stroke-width="4"/>
<path d="M 590,260 C 660,260 700,120 780,120 L 890,120" stroke="#10B981" stroke-width="3" class="stream-direct" filter="url(#neon-green)"/>
<!-- Path 2: Router -> Zapret2 DPI Bypass (Purple) -->
<path d="M 610,260 L 930,260" stroke="#1E293B" stroke-width="3"/>
<path d="M 610,260 L 930,260" stroke="#8B5CF6" stroke-width="3" class="wire-zapret" filter="url(#glow-p)"/>
<!-- Path 2: Zapret v1 / nfqws (Amber/Gold) -->
<path d="M 590,290 C 660,290 710,215 780,215 L 890,215" stroke="#1E293B" stroke-width="4"/>
<path d="M 590,290 C 660,290 710,215 780,215 L 890,215" stroke="#F59E0B" stroke-width="3" class="stream-zapret1" filter="url(#neon-amber)"/>
<!-- Path 3: Router -> sing-box VLESS / Proxy (Cyan) -->
<path d="M 610,310 C 680,310 700,390 770,390 L 930,390" stroke="#1E293B" stroke-width="3"/>
<path d="M 610,310 C 680,310 700,390 770,390 L 930,390" stroke="#00F0FF" stroke-width="3" class="wire-proxy" filter="url(#glow-p)"/>
<!-- Path 3: Zapret v2 / nfqws2 (Neon Purple) -->
<path d="M 590,325 L 890,325" stroke="#1E293B" stroke-width="4"/>
<path d="M 590,325 L 890,325" stroke="#A855F7" stroke-width="3" class="stream-zapret2" filter="url(#neon-purple)"/>
<!-- Path 4: ByeDPI / ciadpi (Pink/Magenta) -->
<path d="M 590,360 C 660,360 710,435 780,435 L 890,435" stroke="#1E293B" stroke-width="4"/>
<path d="M 590,360 C 660,360 710,435 780,435 L 890,435" stroke="#EC4899" stroke-width="3" class="stream-byedpi" filter="url(#neon-pink)"/>
<!-- Path 5: sing-box Core / VLESS (Cyan) -->
<path d="M 590,390 C 660,390 700,530 780,530 L 890,530" stroke="#1E293B" stroke-width="4"/>
<path d="M 590,390 C 660,390 700,530 780,530 L 890,530" stroke="#00F0FF" stroke-width="3" class="stream-proxy" filter="url(#neon-cyan)"/>
</g>
<!-- ================================================================= -->
<!-- NODE 1: CLIENT DEVICES (LAN / Wi-Fi) -->
<!-- LEFT COLUMN: LAN CLIENTS -->
<!-- ================================================================= -->
<g transform="translate(50, 155)">
<rect width="180" height="210" rx="12" fill="url(#card-bg-subtle)" stroke="#334155" stroke-width="1.5"/>
<rect x="15" y="15" width="40" height="40" rx="8" fill="#0369A1" fill-opacity="0.2"/>
<text x="24" y="42" font-size="22">📱</text>
<text x="65" y="38" class="text-node-h">LAN Clients</text>
<!-- Client Devices List -->
<g transform="translate(15, 70)">
<rect width="150" height="34" rx="6" fill="#0B132B" stroke="#1E293B" stroke-width="1"/>
<text x="10" y="22" class="text-node-d" fill="#E2E8F0">📺 Smart TV / Consoles</text>
<g transform="translate(45, 185)">
<rect width="180" height="280" rx="12" fill="url(#card-glass)" stroke="#334155" stroke-width="1.5"/>
<g transform="translate(15, 15)">
<rect width="36" height="36" rx="8" fill="#0284C7" fill-opacity="0.25"/>
<text x="9" y="24" font-size="18">📱</text>
<text x="46" y="22" class="node-title">LAN Devices</text>
<text x="46" y="34" class="node-sub">Домашняя сеть</text>
</g>
<g transform="translate(15, 112)">
<rect width="150" height="34" rx="6" fill="#0B132B" stroke="#1E293B" stroke-width="1"/>
<text x="10" y="22" class="text-node-d" fill="#E2E8F0">💻 PCs &amp; MacBooks</text>
<!-- Client Items -->
<g transform="translate(15, 68)">
<rect width="150" height="42" rx="6" fill="#0B132B" stroke="#1E293B" stroke-width="1"/>
<text x="10" y="20" class="node-title" font-size="12">📺 Smart TV &amp; Box</text>
<text x="10" y="34" class="node-sub" font-size="10">YouTube 4K, Кинотеатры</text>
</g>
<g transform="translate(15, 154)">
<rect width="150" height="34" rx="6" fill="#0B132B" stroke="#1E293B" stroke-width="1"/>
<text x="10" y="22" class="text-node-d" fill="#E2E8F0">📱 Phones &amp; Tablets</text>
<g transform="translate(15, 118)">
<rect width="150" height="42" rx="6" fill="#0B132B" stroke="#1E293B" stroke-width="1"/>
<text x="10" y="20" class="node-title" font-size="12">💻 PC &amp; Consoles</text>
<text x="10" y="34" class="node-sub" font-size="10">Discord, Steam, Игры</text>
</g>
<g transform="translate(15, 168)">
<rect width="150" height="42" rx="6" fill="#0B132B" stroke="#1E293B" stroke-width="1"/>
<text x="10" y="20" class="node-title" font-size="12">📱 Mobile &amp; Tablets</text>
<text x="10" y="34" class="node-sub" font-size="10">Соцсети, Мессенджеры</text>
</g>
<g transform="translate(15, 218)">
<rect width="150" height="42" rx="6" fill="#0B132B" stroke="#1E293B" stroke-width="1"/>
<text x="10" y="20" class="node-title" font-size="12">🔒 IoT &amp; Guest LAN</text>
<text x="10" y="34" class="node-sub" font-size="10">Изолированный доступ</text>
</g>
</g>
<!-- ================================================================= -->
<!-- NODE 2: TACHYON ROUTER CORE (OpenWrt Engine) -->
<!-- CENTER COLUMN: TACHYON ROUTER CORE ENGINE -->
<!-- ================================================================= -->
<g transform="translate(370, 130)">
<rect width="240" height="260" rx="14" fill="#0B132B" stroke="#00F0FF" stroke-width="2" class="core-border"/>
<g transform="translate(350, 140)">
<rect width="240" height="370" rx="14" fill="#090E1A" stroke="#00F0FF" stroke-width="2" class="card-pulse-cyan"/>
<g transform="translate(20, 20)">
<circle cx="20" cy="20" r="18" fill="#00F0FF" fill-opacity="0.15"/>
<text x="10" y="28" font-size="20">⚡</text>
<text x="48" y="20" class="text-node-h" fill="#00F0FF">Tachyon Core</text>
<text x="48" y="34" class="text-node-d">OpenWrt ucode / nftables</text>
<circle cx="18" cy="18" r="16" fill="#00F0FF" fill-opacity="0.15"/>
<text x="10" y="24" font-size="18">⚡</text>
<text x="44" y="16" class="node-title" fill="#00F0FF">Tachyon Core</text>
<text x="44" y="30" class="node-sub">OpenWrt ucode + nftables</text>
</g>
<!-- Sub-Engines Inside Core -->
<g transform="translate(20, 75)">
<!-- Module A: Smart Policy Splitter -->
<rect width="200" height="42" rx="6" fill="#111827" stroke="#1E293B" stroke-width="1"/>
<circle cx="15" cy="21" r="4" fill="#10B981" class="node-pulse"/>
<text x="28" y="20" class="text-node-h" font-size="12">Domain / IP Matcher</text>
<text x="28" y="34" class="text-node-d" font-size="10">GeoIP + Hosts Engine</text>
<!-- Module B: AI Doctor & Self-Healing -->
<g transform="translate(0, 50)">
<rect width="200" height="42" rx="6" fill="#111827" stroke="#1E293B" stroke-width="1"/>
<circle cx="15" cy="21" r="4" fill="#C084FC" class="node-pulse"/>
<text x="28" y="20" class="text-node-h" font-size="12">AI Doctor &amp; Watchdog</text>
<text x="28" y="34" class="text-node-d" font-size="10">Auto-Heal &amp; Quick Fix</text>
<!-- Sub-Engines in Core -->
<g transform="translate(18, 70)">
<!-- 1. Classifier Engine -->
<g transform="translate(0, 0)">
<rect width="204" height="52" rx="8" fill="#0F172A" stroke="#1E293B" stroke-width="1"/>
<circle cx="14" cy="26" r="4" fill="#10B981" class="led-dot"/>
<text x="26" y="22" class="node-title" font-size="12">Domain &amp; IP Classifier</text>
<text x="26" y="38" class="node-sub" font-size="10">GeoIP + Hosts + Lists Cache</text>
</g>
<!-- Module C: Dynamic Packet Routing -->
<g transform="translate(0, 100)">
<rect width="200" height="42" rx="6" fill="#111827" stroke="#1E293B" stroke-width="1"/>
<circle cx="15" cy="21" r="4" fill="#00F0FF" class="node-pulse"/>
<text x="28" y="20" class="text-node-h" font-size="12">nftables Flow Dispatcher</text>
<text x="28" y="34" class="text-node-d" font-size="10">Zero-Copy Fast Path</text>
<!-- 2. AI Doctor & Watchdog -->
<g transform="translate(0, 60)">
<rect width="204" height="52" rx="8" fill="#0F172A" stroke="#1E293B" stroke-width="1"/>
<circle cx="14" cy="26" r="4" fill="#A855F7" class="led-dot"/>
<text x="26" y="22" class="node-title" font-size="12">AI Doctor &amp; Self-Healing</text>
<text x="26" y="38" class="node-sub" font-size="10">13 Quick Fixes + NTP / MTU</text>
</g>
<!-- 3. DPI Dispatcher -->
<g transform="translate(0, 120)">
<rect width="204" height="52" rx="8" fill="#0F172A" stroke="#1E293B" stroke-width="1"/>
<circle cx="14" cy="26" r="4" fill="#F59E0B" class="led-dot"/>
<text x="26" y="22" class="node-title" font-size="12">NFQueue &amp; Desync Router</text>
<text x="26" y="38" class="node-sub" font-size="10">Маршрутизация в Zapret/ByeDPI</text>
</g>
<!-- 4. Fast Path nftables -->
<g transform="translate(0, 180)">
<rect width="204" height="52" rx="8" fill="#0F172A" stroke="#1E293B" stroke-width="1"/>
<circle cx="14" cy="26" r="4" fill="#00F0FF" class="led-dot"/>
<text x="26" y="22" class="node-title" font-size="12">Zero-Copy Flow Offload</text>
<text x="26" y="38" class="node-sub" font-size="10">Аппаратное ускорение пакетов</text>
</g>
<!-- 5. Fallback Internet Guard -->
<g transform="translate(0, 240)">
<rect width="204" height="42" rx="8" fill="#1E1B4B" stroke="#EC4899" stroke-opacity="0.4" stroke-width="1"/>
<circle cx="14" cy="21" r="4" fill="#EC4899" class="led-dot"/>
<text x="26" y="20" class="node-title" font-size="11" fill="#F472B6">Native Internet Fallback</text>
<text x="26" y="34" class="node-sub" font-size="9">Аварийный возврат WAN</text>
</g>
</g>
</g>
<!-- ================================================================= -->
<!-- NODE 3: THREE DIVERGENT DESTINATION PATHS -->
<!-- RIGHT COLUMN: 5 DIVERGENT DESTINATION DESTINATIONS -->
<!-- ================================================================= -->
<!-- PATH 1: DIRECT INTERNET (GREEN) -->
<g transform="translate(930, 85)">
<rect width="220" height="90" rx="10" fill="url(#card-bg-subtle)" stroke="#10B981" stroke-opacity="0.6" stroke-width="1.5"/>
<circle cx="28" cy="28" r="14" fill="#10B981" fill-opacity="0.15"/>
<text x="20" y="34" font-size="16">🌐</text>
<text x="50" y="28" class="text-node-h" fill="#34D399">Direct WAN</text>
<text x="50" y="42" class="text-badge" fill="#10B981">0 ms Overhead</text>
<text x="16" y="68" class="text-node-d">Банки, Госуслуги, RuNet</text>
<text x="16" y="82" class="text-node-d">Прямой маршрут без задержек</text>
<!-- DESTINATION 1: DIRECT WAN (GREEN) -->
<g transform="translate(890, 75)">
<rect width="265" height="90" rx="10" fill="url(#card-glass)" stroke="#10B981" stroke-width="1.5" class="card-pulse-green"/>
<g transform="translate(14, 14)">
<circle cx="16" cy="16" r="14" fill="#10B981" fill-opacity="0.15"/>
<text x="8" y="22" font-size="16">🌐</text>
<text x="38" y="16" class="node-title" fill="#34D399">Direct WAN</text>
<text x="38" y="28" class="tag-mono" fill="#10B981">0 ms OVERHEAD</text>
</g>
<text x="16" y="60" class="node-sub" fill="#E2E8F0">Банки, Госуслуги, RuNet</text>
<text x="16" y="76" class="node-sub">Прямой транзит трафика без проксирования</text>
</g>
<!-- PATH 2: LOCAL DPI DESYNC (PURPLE) -->
<g transform="translate(930, 215)">
<rect width="220" height="90" rx="10" fill="url(#card-bg-subtle)" stroke="#8B5CF6" stroke-opacity="0.6" stroke-width="1.5"/>
<circle cx="28" cy="28" r="14" fill="#8B5CF6" fill-opacity="0.15"/>
<text x="20" y="34" font-size="16">🚀</text>
<text x="50" y="28" class="text-node-h" fill="#C084FC">Zapret v2 / ByeDPI</text>
<text x="50" y="42" class="text-badge" fill="#8B5CF6">Zero-VPS Desync</text>
<text x="16" y="68" class="text-node-d">YouTube 4K, Discord, Web</text>
<text x="16" y="82" class="text-node-d">Аппаратная десинхронизация TCP</text>
<!-- DESTINATION 2: ZAPRET V1 / nfqws (AMBER) -->
<g transform="translate(890, 175)">
<rect width="265" height="90" rx="10" fill="url(#card-glass)" stroke="#F59E0B" stroke-width="1.5" class="card-pulse-amber"/>
<g transform="translate(14, 14)">
<circle cx="16" cy="16" r="14" fill="#F59E0B" fill-opacity="0.15"/>
<text x="8" y="22" font-size="16">⚡</text>
<text x="38" y="16" class="node-title" fill="#FBBF24">Zapret v1 (nfqws)</text>
<text x="38" y="28" class="tag-mono" fill="#F59E0B">FAKE / DISORDER / SPLIT2</text>
</g>
<text x="16" y="60" class="node-sub" fill="#E2E8F0">Базовый обход DPI без VPS</text>
<text x="16" y="76" class="node-sub">Быстрая десинхронизация TCP/UDP пакетов</text>
</g>
<!-- PATH 3: SECURE PROXY (CYAN) -->
<g transform="translate(930, 345)">
<rect width="220" height="90" rx="10" fill="url(#card-bg-subtle)" stroke="#00F0FF" stroke-opacity="0.6" stroke-width="1.5"/>
<circle cx="28" cy="28" r="14" fill="#00F0FF" fill-opacity="0.15"/>
<text x="20" y="34" font-size="16">🛡️</text>
<text x="50" y="28" class="text-node-h" fill="#00F0FF">sing-box Core</text>
<text x="50" y="42" class="text-badge" fill="#38BDF8">VLESS Reality / H2</text>
<text x="16" y="68" class="text-node-d">Instagram, Twitter, AI Tools</text>
<text x="16" y="82" class="text-node-d">Зашифрованный внешний туннель</text>
<!-- DESTINATION 3: ZAPRET V2 / nfqws2 (PURPLE) -->
<g transform="translate(890, 275)">
<rect width="265" height="95" rx="10" fill="url(#card-glass)" stroke="#A855F7" stroke-width="2" class="card-pulse-purple"/>
<g transform="translate(14, 14)">
<circle cx="16" cy="16" r="14" fill="#A855F7" fill-opacity="0.2"/>
<text x="8" y="22" font-size="16">🚀</text>
<text x="38" y="16" class="node-title" fill="#C084FC">Zapret v2 (nfqws2)</text>
<text x="38" y="28" class="tag-mono" fill="#A855F7">MULTISPLIT / SEQOVL / WSIZE</text>
</g>
<text x="16" y="62" class="node-sub" fill="#E2E8F0">YouTube 4K, Discord Voice/Web</text>
<text x="16" y="78" class="node-sub">Многовекторный адаптивный обход ТСПУ</text>
</g>
<!-- DESTINATION 4: BYEDPI / ciadpi (PINK) -->
<g transform="translate(890, 380)">
<rect width="265" height="90" rx="10" fill="url(#card-glass)" stroke="#EC4899" stroke-width="1.5" class="card-pulse-pink"/>
<g transform="translate(14, 14)">
<circle cx="16" cy="16" r="14" fill="#EC4899" fill-opacity="0.15"/>
<text x="8" y="22" font-size="16">🛡️</text>
<text x="38" y="16" class="node-title" fill="#F472B6">ByeDPI (ciadpi)</text>
<text x="38" y="28" class="tag-mono" fill="#EC4899">SOCKS5 / PAYLOAD SPLIT</text>
</g>
<text x="16" y="60" class="node-sub" fill="#E2E8F0">Локальный SOCKS десинхронизатор</text>
<text x="16" y="76" class="node-sub">Разделение заголовков HTTP/TLS SNI</text>
</g>
<!-- DESTINATION 5: SING-BOX PROXY ENGINE (CYAN) -->
<g transform="translate(890, 480)">
<rect width="265" height="95" rx="10" fill="url(#card-glass)" stroke="#00F0FF" stroke-width="2" class="card-pulse-cyan"/>
<g transform="translate(14, 14)">
<circle cx="16" cy="16" r="14" fill="#00F0FF" fill-opacity="0.2"/>
<text x="8" y="22" font-size="16">🌌</text>
<text x="38" y="16" class="node-title" fill="#00F0FF">sing-box Core</text>
<text x="38" y="28" class="tag-mono" fill="#38BDF8">VLESS REALITY / HYSTERIA2 / WG</text>
</g>
<text x="16" y="62" class="node-sub" fill="#E2E8F0">Instagram, Twitter/X, ChatGPT, AI</text>
<text x="16" y="78" class="node-sub">Шифрованный туннель с авто-выбором ноды</text>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 16 KiB