1<!DOCTYPE html> <html lang="ru"> <head> <meta charset="utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <!--metatextblock--> <title>ÐаÑÐ°Ð½Ñ Ð¡Ð´ÐµÐ»ÐºÐ¸ - ÐÑкÑÐ¾Ñ ÑеÑÐ²Ð¸Ñ Ð² MAX: РаÑÑеÑÑ ÐºÑипÑа и ÑиаÑе в ÐакÑе</title> <meta name="description" content="ÐÑкÑоÑ-ÑеÑÐ²Ð¸Ñ Ð´Ð»Ñ MAX (ÐакÑ). ÐезопаÑÐ½Ð°Ñ Ñделка Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð¾ÐºÑпаÑелем и пÑодавÑом. ÐаÑанÑÐ¸Ñ ÑеÑÑной Ñделки." /> <meta property="og:url" content="https://guarantor.su/max" /> <meta property="og:title" content="ÐаÑÐ°Ð½Ñ Ð¡Ð´ÐµÐ»ÐºÐ¸ - ÐÑкÑÐ¾Ñ ÑеÑÐ²Ð¸Ñ Ð² MAX: РаÑÑеÑÑ ÐºÑипÑа и ÑиаÑе в ÐакÑе" /> <meta property="og:description" content="ÐÑкÑоÑ-ÑеÑÐ²Ð¸Ñ Ð´Ð»Ñ MAX (ÐакÑ). ÐезопаÑÐ½Ð°Ñ Ñделка Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð¾ÐºÑпаÑелем и пÑодавÑом. ÐаÑанÑÐ¸Ñ ÑеÑÑной Ñделки." /> <meta property="og:type" content="website" /> <link rel="canonical" href="https://guarantor.su/max"> <!--/metatextblock--> <meta name="format-detection" content="telephone=no" /> <meta http-equiv="x-dns-prefetch-control" content="on"> <link rel="dns-prefetch" href="https://ws.tildacdn.com"> <link rel="dns-prefetch" href="https://static.tildacdn.com"> <!--favicons--> <link rel="icon" type="image/svg+xml" sizes="any" href="https://static.tildacdn.com/tild3466-3365-4631-b337-626163323333/1768296815_1.svg"> <!--/favicons--> <link rel="alternate" type="application/rss+xml" title="ÐÐÐ ÐÐТ СÐÐÐÐÐ" href="https://guarantor.su/rss.xml" /> <!-- Assets -->
1<script src="https://neo.tildacdn.com/js/tilda-fallback-1.0.min.js" async charset="utf-8"></script>
1 <link rel="stylesheet" href="https://static.tildacdn.com/css/tilda-grid-3.0.min.css" type="text/css" media="all" onerror="this.loaderr='y';"/> <link rel="stylesheet" href="https://static.tildacdn.com/ws/project2980991/tilda-blocks-page148048346.min.css?t=1791450338" type="text/css" media="all" onerror="this.loaderr='y';" />
1<script nomodule src="https://static.tildacdn.com/js/tilda-polyfill-1.0.min.js" charset="utf-8"></script>
1
1<script type="text/javascript">function t_onReady(func) {if(document.readyState!='loading') {func();} else {document.addEventListener('DOMContentLoaded',func);}} 2function t_onFuncLoad(funcName,okFunc,time) {if(typeof window[funcName]==='function') {okFunc();} else {setTimeout(function() {t_onFuncLoad(funcName,okFunc,time);},(time||100));}}if(navigator.userAgent.indexOf('Android')!==-1) {var l=document.createElement('link');l.rel='stylesheet';l.href='https://static.tildacdn.com/css/fonts-arial.css';l.media='all';document.getElementsByTagName('head')[0].appendChild(l);}</script>
2
2<script src="https://static.tildacdn.com/js/tilda-scripts-3.0.min.js" charset="utf-8" defer onerror="this.loaderr='y';"></script>
2
2<script src="https://static.tildacdn.com/ws/project2980991/tilda-blocks-page148048346.min.js?t=1791450338" charset="utf-8" async onerror="this.loaderr='y';"></script>
2
2<script src="https://static.tildacdn.com/js/tilda-lazyload-1.0.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script>
2
2<script src="https://static.tildacdn.com/js/tilda-events-1.0.min.js" charset="utf-8" async onerror="this.loaderr='y';"></script>
2 <!-- nominify begin --><!-- ============================================================ 3 GUARANTOR.SU GLOBAL HEAD v29.2 FINAL 4 ÐÐ¾Ð»Ð½Ð°Ñ Ð¿ÐµÑеÑабоÑка Ñ ÑÑÑÑом вÑÐµÑ ÑевÑÑ. 5 6 ÐÑпÑавлено: 7 - pageshow ÑепеÑÑ Ð·Ð°ÐºÑÑÐ²Ð°ÐµÑ Ð¼Ð¾Ð´Ð°Ð»ÐºÑ Ð¿Ñи bfcache restore 8 - FAB aria-label полноÑÑÑÑ ÑооÑвеÑÑÑвÑÐµÑ Ð²Ð¸Ð´Ð¸Ð¼Ð¾Ð¼Ñ ÑекÑÑÑ (WCAG 2.5.3) 9 - aria-haspopup ÑбÑан (неÑооÑвеÑÑÑвие поÑле пеÑÐµÑ Ð¾Ð´Ð° на <nav>) 10 - MutationObserver ÑÐ»ÐµÐ´Ð¸Ñ Ð¸ за body, и за html (Tilda Ð¼Ð¾Ð¶ÐµÑ ÑÑавиÑÑ ÐºÐ»Ð°ÑÑ Ð½Ð° лÑбой) 11 - scroll-padding навеÑиваеÑÑÑ ÑолÑко пÑи акÑивном FAB (html.has-gs-fab) 12 - Fallback FAB адапÑивен (bottom ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¾ÑновнÑм FAB) 13 - ÐналиÑика: gsTrack по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¸ÑÐµÑ ÑолÑко в Yandex Metrika 14 (Tilda Ñама ÑпÑавлÑÐµÑ GA/GTM â конÑигÑÑиÑÑемо) 15 - УбÑан беÑÑмÑÑленнÑй preload+media Ñ Ð°Ðº, оÑÑавлен ÑиÑÑÑй async CSS 16 - theme-color вÑÑовнен Ñ Ð¾ÑновнÑм ÑвеÑом ÑÑÑаниÑÑ 17 - РазделиÑÐµÐ»Ñ Ð¼ÐµÐ½Ñ FAB: клаÑÑ Ð±ÐµÐ· role="separator" 18 ============================================================ --> <!-- Resource hints --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="preconnect" href="https://static.tildacdn.com" crossorigin> <link rel="dns-prefetch" href="https://t.me"> <link rel="dns-prefetch" href="https://mc.yandex.ru"> <link rel="dns-prefetch" href="https://mc.yandex.com"> <!-- Async font loading (без избÑÑоÑного preload+media Ñ Ð°ÐºÐ°) --> <link 19 rel="stylesheet" 20 href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Syne:wght@700;800;900&family=Space+Mono:wght@400;700&display=swap" 21 media="print" 22 onload="this.media='all';this.onload=null;" 23> <noscript> <link 24 rel="stylesheet" 25 href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;700&family=Syne:wght@700;800;900&family=Space+Mono:wght@400;700&display=swap" 26 > </noscript> <!-- Global meta --> <meta name="theme-color" content="#05080F"> <meta name="robots" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1"> <meta name="author" content="ÐаÑÐ°Ð½Ñ Ð¡Ð´ÐµÐ»Ð¾Ðº"> <meta name="geo.region" content="RU"> <meta name="geo.placename" content="Russia"> <meta name="referrer" content="strict-origin-when-cross-origin"> <!-- AI / LLM / AEO / GEO support --> <meta 27 name="ai:bot" 28 content="google-extended, GPTBot, ClaudeBot, PerplexityBot, Applebot-Extended, Bytespider, Omgilibot, CCbot, meta-externalagent" 29> <meta 30 name="ai:content" 31 content="Escrow service for cryptocurrency, P2P, OTC, RWA, NFT, Telegram channels, IT business. Deal guarantor since 2019. Multisig 2/3, MPC wallets, arbitration, anti-scam, anti-phishing, rug pull protection." 32> <meta 33 name="ai:license" 34 content="All rights reserved. Use for AI training is permitted for search and answer engines (AEO/GEO)." 35> <meta 36 name="ai:purpose" 37 content="Provide trustworthy escrow and guarantee services for crypto and fiat transactions, protect buyers and sellers from fraud, phishing, rug pull and chargeback." 38> <meta 39 name="ai:disclaimer" 40 content="This content is provided for informational purposes. Always verify escrow service details before transactions." 41> <meta 42 name="ai:training" 43 content="Permitted for search engines and AI assistants providing answers to user queries about escrow services, cryptocurrency transactions, and deal protection." 44> <!-- ============================================================ 45 Schema.org Global Entities 46 ============================================================ -->
46<script type="application/ld+json"> 47{ 48 "@context": "https://schema.org", 49 "@graph": [ 50 { 51 "@type": "Organization", 52 "@id": "https://guarantor.su/#organization", 53 "name": "ÐаÑÐ°Ð½Ñ Ð¡Ð´ÐµÐ»Ð¾Ðº", 54 "alternateName": [ 55 "ÐаÑÐ°Ð½Ñ Ð¡Ð´ÐµÐ»Ð¾Ðº", 56 "ÐаÑÐ°Ð½Ñ Ð¡Ð´ÐµÐ»Ð¾Ðº â1", 57 "Guarantor.su", 58 "ÐÑипÑо-гаÑанÑ", 59 "ÐÑкÑоÑ-ÑеÑвиÑ", 60 "СеÑÐ²Ð¸Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑнÑÑ Ñделок" 61 ], 62 "url": "https://guarantor.su/", 63 "description": "СеÑÐ²Ð¸Ñ Ð³Ð°ÑÐ°Ð½Ñ Ñделок и кÑипÑо-ÑÑкÑÐ¾Ñ Ð´Ð»Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑнÑÑ ÑаÑÑеÑов в кÑипÑовалÑÑе и ÑиаÑе. ÐаÑиÑа покÑпаÑÐµÐ»Ñ Ð¸ пÑодавÑа, депониÑование ÑÑедÑÑв, мÑлÑÑиподпиÑÑ 2/3, пÑовеÑка конÑÑагенÑов, аÑбиÑÑаж ÑпоÑов.", 64 "slogan": "ÐезопаÑнÑе Ñделки ÑеÑез ÑÑкÑоÑ", 65 "foundingDate": "2019", 66 "email": "[email protected]", 67 "areaServed": ["RU", "BY", "KZ", "UA", "AE", "TR", "GLOBAL"], 68 "availableLanguage": ["Russian", "English"], 69 "sameAs": [ 70 "https://t.me/GARANT_S_bot" 71 ], 72 "knowsAbout": [ 73 "гаÑÐ°Ð½Ñ Ñделок", 74 "кÑипÑо ÑÑкÑоÑ", 75 "ÑÑкÑÐ¾Ñ ÑÑеÑ", 76 "безопаÑÐ½Ð°Ñ Ñделка", 77 "p2p гаÑанÑ", 78 "заÑиÑа Ð¾Ñ Ñкама", 79 "заÑиÑа Ð¾Ñ ÑиÑинга", 80 "заÑиÑа покÑпаÑелÑ", 81 "заÑиÑа пÑодавÑа", 82 "депониÑование ÑÑедÑÑв", 83 "пеÑедаÑа пÑава ÑобÑÑвенноÑÑи", 84 "мÑлÑÑиподпиÑÑ 2/3", 85 "MPC коÑелек", 86 "OTC Ñделки", 87 "RWA ÑÑкÑоÑ", 88 "NFT ÑÑкÑоÑ", 89 "пÑодажа Telegram-канала", 90 "пÑодажа IT-бизнеÑа", 91 "аÑбиÑÑаж кÑипÑо ÑпоÑов", 92 "безопаÑнÑе ÑаÑÑеÑÑ Ð² кÑипÑовалÑÑе и ÑиаÑе" 93 ], 94 "hasOfferCatalog": { 95 "@type": "OfferCatalog", 96 "name": "ÐÑкÑÐ¾Ñ Ð¸ гаÑанÑ-ÑÑлÑги", 97 "itemListElement": [ 98 { 99 "@type": "Offer", 100 "itemOffered": { 101 "@type": "Service", 102 "name": "ÐÑипÑо-ÑÑкÑоÑ", 103 "serviceType": "Escrow", 104 "description": "ÐезопаÑнÑе ÑаÑÑеÑÑ ÑеÑез ÑÑкÑÐ¾Ñ ÑÑÐµÑ Ñ Ð´ÐµÐ¿Ð¾Ð½Ð¸Ñованием ÑÑедÑÑв." 105 } 106 }, 107 { 108 "@type": "Offer", 109 "itemOffered": { 110 "@type": "Service", 111 "name": "P2P гаÑанÑ", 112 "serviceType": "P2P Guarantee", 113 "description": "ÐаÑиÑа P2P обмена кÑипÑовалÑÑÑ Ð¾Ñ Ñкама, ÑÑеÑголÑника и Ð¿Ð¾Ð´Ð¼ÐµÐ½Ñ ÑеквизиÑов." 114 } 115 }, 116 { 117 "@type": "Offer", 118 "itemOffered": { 119 "@type": "Service", 120 "name": "OTC и RWA ÑопÑовождение", 121 "serviceType": "OTC / RWA Escrow", 122 "description": "ÐаÑиÑа кÑÑпнÑÑ Ð²Ð½ÐµÐ±Ð¸ÑжевÑÑ Ñделок и Ñделок Ñ ÑеалÑнÑми акÑивами." 123 } 124 }, 125 { 126 "@type": "Offer", 127 "itemOffered": { 128 "@type": "Service", 129 "name": "ÐÑовеÑка конÑÑагенÑа", 130 "serviceType": "OSINT / AML / KYT Check", 131 "description": "ÐÑовеÑка кÑипÑо-адÑеÑов, аккаÑнÑов и конÑÑагенÑов пеÑед Ñделкой." 132 } 133 } 134 ] 135 } 136 }, 137 { 138 "@type": "WebSite", 139 "@id": "https://guarantor.su/#website", 140 "url": "https://guarantor.su/", 141 "name": "ÐаÑÐ°Ð½Ñ Ð¡Ð´ÐµÐ»Ð¾Ðº â ÐÑипÑо-ÐÑкÑÐ¾Ñ Ð¡ÐµÑвиÑ", 142 "description": "ÐезопаÑнÑе Ñделки ÑеÑез ÑÑкÑоÑ-ÑÑеÑ. P2P, OTC, RWA, NFT, IT-бизнеÑ, Telegram-каналÑ.", 143 "publisher": { 144 "@id": "https://guarantor.su/#organization" 145 }, 146 "inLanguage": "ru", 147 "potentialAction": { 148 "@type": "SearchAction", 149 "target": "https://guarantor.su/?s={search_term_string}", 150 "query-input": "required name=search_term_string" 151 } 152 }, 153 {
154 "@type": "FinancialService", 155 "@id": "https://guarantor.su/#service", 156 "name": "ÐÑипÑо-ÑÑкÑÐ¾Ñ Ð¸ P2P-гаÑанÑ", 157 "provider": { 158 "@id": "https://guarantor.su/#organization" 159 }, 160 "serviceType": "Escrow & Guarantee", 161 "areaServed": ["RU", "BY", "KZ", "UA", "AE", "TR", "GLOBAL"], 162 "description": "ÐепониÑование ÑÑедÑÑв, заÑиÑа покÑпаÑÐµÐ»Ñ Ð¸ пÑодавÑа, пеÑедаÑа пÑава ÑобÑÑвенноÑÑи, аÑбиÑÑаж ÑпоÑов, пÑовеÑка конÑÑагенÑов пеÑед Ñделкой." 163 }, 164 { 165 "@type": "SoftwareApplication", 166 "@id": "https://guarantor.su/#software", 167 "name": "ÐаÑÐ°Ð½Ñ Ð¡Ð´ÐµÐ»Ð¾Ðº Bot", 168 "alternateName": "@GARANT_S_bot", 169 "applicationCategory": "FinanceApplication", 170 "operatingSystem": "Web, iOS, Android", 171 "url": "https://t.me/GARANT_S_bot", 172 "description": "Telegram-Ð±Ð¾Ñ Ð´Ð»Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑнÑÑ Ñделок ÑеÑез кÑипÑо-ÑÑкÑоÑ: депониÑование, пÑовеÑка конÑÑагенÑа, заÑиÑа Ð¾Ñ Ñкама, аÑбиÑÑаж.", 173 "publisher": { 174 "@id": "https://guarantor.su/#organization" 175 }, 176 "offers": { 177 "@type": "Offer", 178 "price": "0", 179 "priceCurrency": "USD", 180 "availability": "https://schema.org/InStock", 181 "description": "ÐапÑÑк боÑа беÑплаÑнÑй. ÐомиÑÑÐ¸Ñ Ñделки ÑоглаÑÑеÑÑÑ Ð·Ð°Ñанее." 182 } 183 } 184 ] 185} 186</script>
186 <!-- ============================================================ 187 Global config + analytics + safe error filter 188 ÐналиÑика: Tilda ÑпÑавлÑÐµÑ GA/GTM Ñама. gsTrack по ÑмолÑÐ°Ð½Ð¸Ñ 189 оÑпÑавлÑÐµÑ ÑолÑко reachGoal в Yandex Metrika (каÑÑомнÑе Ñели, 190 коÑоÑÑе Tilda UI ÑоздаÑÑ Ð½Ðµ можеÑ). ÐÐ°Ð½Ð°Ð»Ñ ÐºÐ¾Ð½ÑигÑÑиÑÑемÑ. 191 ============================================================ -->
191<script> 192(function () { 193 'use strict'; 194 if (window.__gsHeadV29) return; 195 window.__gsHeadV29 = true; 196 197 window.__gsConfigV29 = Object.assign( 198 { 199 botUrl: 'https://t.me/GARANT_S_bot', 200 maxUrl: 'https://guarantor.su/max', 201 saleUrl: 'https://guarantor.su/sale', 202 homeUrl: 'https://guarantor.su/', 203 modalEnabled: true, 204 fabEnabled: true, 205 interceptTelegram: true, 206 optimizeMetricaScripts: true, 207 suppressYandexConsoleNoise: true, 208 noindex404: true, 209 210 /* ÐналиÑика: Tilda ÑпÑавлÑÐµÑ GA/GTM. Ðо ÑмолÑÐ°Ð½Ð¸Ñ â ÑолÑко ym. */ 211 analytics: { 212 ym: true, 213 gtag: false, 214 dataLayer: false 215 } 216 }, 217 window.__gsConfigV29 || {} 218 ); 219 220 function safe(fn) { 221 try { fn(); } catch (e) { /* silent */ } 222 } 223 224 function is404Page() { 225 try { 226 var p = window.location.pathname || ''; 227 var t = document.title || ''; 228 return p.indexOf('404') !== -1 || t.indexOf('404') !== -1; 229 } catch (e) { return false; } 230 } 231 232 function isYandexWsNoise(text) { 233 try { 234 if (!text) return false; 235 var msg = String(text).toLowerCase(); 236 return ( 237 (msg.indexOf('websocket') !== -1 || msg.indexOf('wss://') !== -1) && 238 (msg.indexOf('yandex') !== -1 || msg.indexOf('metrika') !== -1 || msg.indexOf('mc.yandex') !== -1) 239 ); 240 } catch (e) { return false; } 241 } 242 243 var ymIdCache = null; 244 function getYmId() { 245 if (ymIdCache) return ymIdCache; 246 try { 247 if (window.yaCounterId) { ymIdCache = window.yaCounterId; return ymIdCache; } 248 if (window.Ya && window.Ya.Metrika2 && typeof window.Ya.Metrika2.counters === 'function') { 249 var list = window.Ya.Metrika2.counters(); 250 if (list && list[0] && list[0].id) { ymIdCache = list[0].id; return ymIdCache; } 251 } 252 var keys = Object.keys(window).filter(function (k) { return /^yaCounter\d+/.test(k); }); 253 if (keys.length) { 254 ymIdCache = parseInt(keys[0].replace('yaCounter', ''), 10); 255 return ymIdCache; 256 } 257 if (typeof window.ym === 'function' && window.ym.id) { 258 ymIdCache = window.ym.id; 259 return ymIdCache; 260 } 261 var sc = document.querySelector( 262 'script[src*="mc.yandex.ru/metrika/watch.js"], script[src*="mc.yandex.com/metrika/watch.js"]' 263 ); 264 if (sc && sc.src) { 265 var m = sc.src.match(/[?&](\d+)(?:&|$)/); 266 if (m) { ymIdCache = m[1]; return ymIdCache; } 267 } 268 } catch (e) { /* silent */ } 269 return null; 270 } 271 window.gsGetMetrikaId = getYmId; 272 273 window.gsTrack = function (goal, category, label, value) { 274 var a = (window.__gsConfigV29 && window.__gsConfigV29.analytics) || {}; 275 if (a.ym !== false) { 276 safe(function () { 277 var id = getYmId(); 278 if (id && typeof window.ym === 'function') { 279 window.ym(id, 'reachGoal', goal); 280 } 281 }); 282 } 283 if (a.gtag === true) { 284 safe(function () { 285 if (typeof window.gtag === 'function') { 286 window.gtag('event', category || 'GS', { 287 event_category: category || 'GS', 288 event_label: label || goal, 289 value: value || 1 290 }); 291 } 292 }); 293 } 294 if (a.dataLayer === true) { 295 safe(function () { 296 if (window.dataLayer) { 297 window.dataLayer.push({ 298 event: goal, 299 category: category || 'GS', 300 label: label || goal 301 }); 302 } 303 }); 304 } 305 }; 306 307 function setMeta(name, content) { 308 safe(function () { 309 var m = document.querySelector('meta[name="' + name + '"]'); 310 if (!m) { 311 m = document.createElement('meta'); 312 m.name = name; 313 (document.head || document.documentElement).appendChild(m); 314 } 315 m.content = content; 316 }); 317 } 318 319 function apply404Noindex() { 320 if (!window.__gsConfigV29.noindex404) return; 321 if (!is404Page()) return; 322 setMeta('robots', 'noindex, nofollow'); 323 } 324 if (document.readyState === 'loading') { 325 document.addEventListener('DOMContentLoaded', apply404Noindex, { once: true });
326 } else { 327 apply404Noindex(); 328 } 329 330 window.addEventListener( 331 'error', 332 function (e) { 333 safe(function () { 334 if (e && e.message && isYandexWsNoise(e.message)) { 335 e.preventDefault(); 336 if (typeof e.stopImmediatePropagation === 'function') e.stopImmediatePropagation(); 337 } 338 }); 339 }, 340 true 341 ); 342 343 window.addEventListener('unhandledrejection', function (e) { 344 safe(function () { 345 var msg = ''; 346 if (e && e.reason) msg = e.reason.message || String(e.reason); 347 if (isYandexWsNoise(msg)) e.preventDefault(); 348 }); 349 }); 350 351 if (window.__gsConfigV29.suppressYandexConsoleNoise) { 352 safe(function () { 353 if (window.console && console.error && !console.__gsWrappedV29) { 354 var original = console.error; 355 console.error = function () { 356 try { 357 var msg = Array.prototype.map 358 .call(arguments, function (arg) { 359 if (typeof arg === 'string') return arg; 360 if (arg && arg.message) return arg.message; 361 try { return String(arg); } catch (e) { return ''; } 362 }) 363 .join(' '); 364 if (isYandexWsNoise(msg)) return; 365 } catch (e) { /* silent */ } 366 original.apply(console, arguments); 367 }; 368 console.__gsWrappedV29 = true; 369 } 370 }); 371 } 372 373 if (window.__gsConfigV29.optimizeMetricaScripts && 'MutationObserver' in window) { 374 safe(function () { 375 var observer = new MutationObserver(function (mutations) { 376 mutations.forEach(function (mutation) { 377 mutation.addedNodes.forEach(function (node) { 378 if ( 379 node && 380 node.nodeType === 1 && 381 node.tagName === 'SCRIPT' && 382 node.src && 383 /mc\.yandex\.ru|mc\.yandex\.com|googletagmanager\.com|google-analytics\.com|doubleclick\.net/i.test(node.src) 384 ) { 385 if (!node.dataset.gsOptimized) { 386 node.dataset.gsOptimized = '1'; 387 try { 388 node.async = true; 389 node.setAttribute('fetchpriority', 'low'); 390 if ('fetchPriority' in node) node.fetchPriority = 'low'; 391 } catch (e) { /* silent */ } 392 } 393 } 394 }); 395 }); 396 }); 397 observer.observe(document.documentElement, { childList: true, subtree: true }); 398 window.__gsMetricsObserverV29 = observer; 399 window.addEventListener('load', function () { 400 setTimeout(function () { 401 if (observer) { 402 observer.disconnect(); 403 window.__gsMetricsObserverV29 = null; 404 } 405 }, 15000); 406 }, { once: true }); 407 }); 408 } 409 410 /* bfcache restore: ÑбиÑаем залипÑий overflow РпÑоÑим Ð¼Ð¾Ð´Ð°Ð»ÐºÑ Ð·Ð°ÐºÑÑÑÑÑÑ */ 411 window.addEventListener('pageshow', function (event) { 412 safe(function () { 413 if (!event.persisted) return; 414 if (document.body) document.body.style.overflow = ''; 415 var modalRoot = document.getElementById('gs-global-modal-root'); 416 if (modalRoot && typeof modalRoot.closeModal === 'function') { 417 try { modalRoot.closeModal(); } catch (e) { /* silent */ } 418 } 419 }); 420 }); 421})(); 422</script>
422 <!-- ============================================================ 423 GLOBAL MODAL + INTERCEPTOR v29.2 424 ============================================================ -->
424<script> 425(function () { 426 'use strict'; 427 if (window.__gsGlobalModalV29) return; 428 window.__gsGlobalModalV29 = true; 429 430 var cfg = window.__gsConfigV29 || {}; 431 cfg.botUrl = cfg.botUrl || 'https://t.me/GARANT_S_bot'; 432 cfg.maxUrl = cfg.maxUrl || 'https://guarantor.su/max'; 433 cfg.saleUrl = cfg.saleUrl || 'https://guarantor.su/sale'; 434 cfg.homeUrl = cfg.homeUrl || 'https://guarantor.su/'; 435 436 if (cfg.modalEnabled === false) return; 437 438 var p = window.location.pathname || ''; 439 function isPagePath(name) { 440 var target = '/' + name; 441 return p === target || p.indexOf(target + '/') !== -1 || p.slice(-target.length) === target; 442 } 443 function isSpecialPage() { 444 return isPagePath('max') || isPagePath('sale'); 445 } 446 function isPopupActive() { 447 try { 448 return ( 449 (document.body && (document.body.classList.contains('t-body_popup') || document.body.classList.contains('t-popup_opened'))) || 450 (document.documentElement && document.documentElement.classList.contains('t-popup_opened')) 451 ); 452 } catch (e) { return false; } 453 } 454 455 var is404 = p.indexOf('404') !== -1 || (document.title || '').indexOf('404') !== -1; 456 var isMiniApp = p.indexOf('/miniapp') !== -1 || (window.Telegram && window.Telegram.WebApp); 457 if (is404 || isPopupActive() || isMiniApp || isSpecialPage()) return; 458 if (!window.customElements) return; 459 460 class GsGlobalModal extends HTMLElement { 461 constructor() { 462 super(); 463 this.attachShadow({ mode: 'open' }); 464 this._rendered = false; 465 this._isOpen = false; 466 this._lastFocused = null; 467 this._prevOverflow = ''; 468 this._boundKeydown = null; 469 this._boundClick = null; 470 this._tildaObserver = null; 471 this._focusableSelector = 'a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])'; 472 } 473 474 connectedCallback() { 475 if (!this._rendered) { 476 this.render(); 477 this._rendered = true; 478 } 479 this.setupGlobalInterceptor(); 480 this.setupModalControls(); 481 this.setupKeyboardNav(); 482 this.setupTildaObserver(); 483 } 484 485 disconnectedCallback() { 486 if (this._boundKeydown) document.removeEventListener('keydown', this._boundKeydown); 487 if (this._boundClick) document.removeEventListener('click', this._boundClick, true); 488 if (this._tildaObserver) { 489 this._tildaObserver.disconnect(); 490 this._tildaObserver = null; 491 } 492 } 493 494 render() { 495 this.shadowRoot.innerHTML = ` 496 <style> 497 @keyframes modal-fade-in{from{opacity:0}to{opacity:1}} 498 @keyframes modal-slide-up{from{opacity:0;transform:translateY(30px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}} 499 @keyframes dot-pulse{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.55;transform:scale(1.35)}} 500 @keyframes hot-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.08)}} 501 :host{display:block;position:absolute;top:0;left:0;width:0;height:0;overflow:visible;pointer-events:none;z-index:99998;font-family:'DM Sans',system-ui,-apple-system,sans-serif} 502 .overlay{position:fixed;inset:0;background:rgba(3,6,20,.85);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);display:flex;align-items:center;justify-content:center;opacity:0;pointer-events:none;transition:opacity .3s ease;padding:20px;z-index:99999} 503 .overlay.active{opacity:1;pointer-events:auto;animation:modal-fade-in .3s ease} 504 .modal{background:linear-gradient(145deg,rgba(12,16,32,.98),rgba(20,26,48,.95));border:1px solid rgba(0,229,160,.35);border-radius:28px;padding:clamp(24px,4vw,36px) clamp(20px,4vw,28px);max-width:420px;width:100%;box-shadow:0 30px 80px rgba(0,0,0,.7),0 0 0 1px rgba(0,229,160,.15),inset 0 1px 0 rgba(255,255,255,.05);position:relative;transform:translateY(30px) scale(.95);transition:transform .35s cubic-bezier(.25,.46,.45,.94)} 505 .overlay.active .modal{transform:translateY(0) scale(1);animation:modal-slide-up .35s cubic-bezier(.25,.46,.45,.94)} 506 .modal::before{content:'';position:absolute;inset:-1px;border-radius:28px;background:linear-gradient(135deg,rgba(0,229,160,.4),rgba(89,168,255,.2),rgba(255,194,75,.3));z-index:-1;opacity:.6;filter:blur(1px)} 507 .close-btn{position:absolute;top:14px;right:14px;width:36px;height:36px;border-radius:50%;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.08);color:rgba(220,230,255,.9);font-size:22px;
507cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s;font-family:inherit;line-height:1;z-index:2;touch-action:manipulation} 508 .close-btn:hover{background:#FF6B6B;color:#fff;border-color:#FF6B6B;transform:rotate(90deg)} 509 .header{text-align:center;margin-bottom:22px;padding:0 8px} 510 .badge{display:inline-flex;align-items:center;gap:6px;background:rgba(0,229,160,.12);border:1px solid rgba(0,229,160,.3);border-radius:100px;padding:5px 12px;font-family:'Space Mono',monospace;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:1.2px;color:#00E5A0;margin-bottom:12px} 511 .dot{width:6px;height:6px;background:#00E5A0;border-radius:50%;box-shadow:0 0 12px #00E5A0;animation:dot-pulse 2.4s ease-in-out infinite;flex-shrink:0} 512 .title{font-family:'Syne',sans-serif;font-size:clamp(18px,4vw,22px);font-weight:800;line-height:1.2;margin-bottom:8px;letter-spacing:-.02em;color:#F5F7FA} 513 .title .grad{background:linear-gradient(135deg,#00E5A0 0%,#59A8FF 50%,#FFC24B 100%);-webkit-background-clip:text;background-clip:text;color:transparent} 514 .subtitle{font-size:12px;color:#E2E8F0;line-height:1.5} 515 .list{display:flex;flex-direction:column;gap:10px;margin-bottom:18px} 516 .btn{display:flex;align-items:center;gap:14px;width:100%;padding:14px 16px;border-radius:14px;background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.08);color:#F5F7FA;text-decoration:none;transition:all .25s;font-family:inherit;text-align:left;position:relative;overflow:hidden;min-height:64px;cursor:pointer;touch-action:manipulation} 517 .btn::before{content:'';position:absolute;left:0;top:0;bottom:0;width:3px;background:#00E5A0;opacity:0;transition:opacity .25s} 518 .btn:hover{border-color:#00E5A0;background:rgba(0,229,160,.12);transform:translateX(4px)} 519 .btn:hover::before{opacity:1} 520 .btn:focus-visible{outline:3px solid #00E5A0;outline-offset:2px} 521 .btn-icon{width:42px;height:42px;border-radius:12px;background:linear-gradient(135deg,rgba(0,229,160,.15),rgba(89,168,255,.1));border:1px solid rgba(0,229,160,.25);display:flex;align-items:center;justify-content:center;font-size:22px;flex-shrink:0;transition:all .25s} 522 .btn:hover .btn-icon{background:linear-gradient(135deg,rgba(0,229,160,.25),rgba(89,168,255,.2));transform:scale(1.08)} 523 .btn-content{flex:1;min-width:0} 524 .btn-text{font-weight:700;font-size:14px;display:block;line-height:1.2;margin-bottom:2px} 525 .btn-sub{font-size:11px;color:#E2E8F0;display:block;font-family:'Space Mono',monospace;letter-spacing:.3px} 526 .btn-arrow{color:#00E5A0;font-size:18px;opacity:0;transform:translateX(-8px);transition:all .25s;flex-shrink:0} 527 .btn:hover .btn-arrow{opacity:1;transform:translateX(0)} 528 .btn-hot{position:relative} 529 .btn-hot::after{content:'HOT';position:absolute;top:-6px;right:12px;background:linear-gradient(135deg,#FF6B6B,#FF8E5F);color:#fff;font-family:'Space Mono',monospace;font-size:9px;font-weight:800;padding:3px 8px;border-radius:100px;letter-spacing:1px;box-shadow:0 4px 12px rgba(255,107,107,.4);animation:hot-pulse 2s ease-in-out infinite} 530 .btn-sale{background:linear-gradient(135deg,rgba(255,107,107,.12),rgba(255,107,107,.04));border-color:rgba(255,107,107,.35)} 531 .btn-sale::before{background:#FF6B6B} 532 .btn-sale:hover{border-color:#FF6B6B;background:rgba(255,107,107,.18)} 533 .btn-sale .btn-icon{background:linear-gradient(135deg,rgba(255,107,107,.2),rgba(255,194,75,.1));border-color:rgba(255,107,107,.35)} 534 .btn-sale .btn-text{color:#FFC24B} 535 .btn-sale .btn-arrow{color:#FF6B6B} 536 .footer{text-align:center;padding-top:14px;border-top:1px solid rgba(255,255,255,.08)} 537 .footer-text{font-size:10px;color:#E2E8F0;font-family:'Space Mono',monospace;letter-spacing:.5px;display:flex;align-items:center;justify-content:center;gap:6px} 538 @media(max-width:480px){ 539 .modal{padding:22px 18px} 540 .btn{padding:12px 14px;gap:12px} 541 .btn-icon{width:38px;height:38px;font-size:20px} 542 .btn-text{font-size:13px} 543 .btn-sub{font-size:10px} 544 .btn-hot::after{top:-5px;right:8px;font-size:8px;padding:2px 6px} 545 } 546 @media(prefers-reduced-motion:reduce){ 547 .overlay,.modal,.btn,.close-btn{transition-duration:.01ms!important;animation:none!important} 548 .btn-hot::after{animation:none} 549 } 550 </style> <div class="overlay" role="dialog" aria-modal="true" aria-labelledby="gs-modal-title" aria-describedby="gs-modal-desc" aria-hidden="true"> <div class="modal"> <button class="close-btn" type="button" aria-label="ÐакÑÑÑÑ" tabindex="-1">â</button> <div class="header"> <div class="badge"><span class="dot"></span> ESCROW GATEWAY · ACTIVE</div> <div class="title" id="gs-modal-title">ÐÑбеÑиÑе <span class="grad">плоÑÐ°Ð´ÐºÑ Ð·Ð°Ð¿ÑÑка</span></div> <div class="subtitle" id="gs-modal-desc">ÐезопаÑÐ½Ð°Ñ Ñделка акÑивиÑÑеÑÑÑ Ð·Ð° 30 ÑекÑнд ÑеÑез заÑиÑÑннÑй ÑлÑз</div> </div> <div class="list"> <a href="${cfg.botUrl}" class="btn btn-hot" target="_blank" rel="noopener" data-track="modal-telegram" tabindex="-1"> <span class="btn-icon" aria-hidden="true">âï¸</span> <span class="btn-content"> <span class="btn-text">Сделки в Telegram</span> <span class="btn-sub">@GARANT_S_bot · ÐÑкÑÐ¾Ñ 30 Ñек · 30+ блокÑейнов</span> </span> <span class="btn-arrow" aria-hidden="true">â</span> </a> <a href="${cfg.maxUrl}" class="btn" rel="noopener" data-track="modal-max" tabindex="-1"> <span class="btn-icon" aria-hidden="true">ð¬</span> <span class="btn-content"> <span class="btn-text">Сделки в MAX</span> <span class="btn-sub">ÐÐ»Ñ Ð Ð¤ · РабоÑÐ°ÐµÑ Ð±ÐµÐ· VPN · MAX Messenger</span> </span> <span class="btn-arrow" aria-hidden="true">â</span> </a> <a href="${cfg.saleUrl}" class="btn btn-sale" rel="noopener" data-track="modal-sale" tabindex="-1"> <span class="btn-icon" aria-hidden="true">ð¥</span> <span class="btn-content"> <span class="btn-text">SALE: ÐÑпиÑÑ Ð¿ÑоекÑ</span> <span class="btn-sub">ÐоÑовÑй Ð±Ð¸Ð·Ð½ÐµÑ Ð¿Ð¾Ð´ клÑÑ Â· ÐплаÑа USDT</sp
550an> </span> <span class="btn-arrow" aria-hidden="true">â</span> </a> </div> <div class="footer"> <div class="footer-text"> <span class="dot"></span> <span>MULTISIG 2/3 · ESCROW · AML/KYT</span> </div> </div> </div> </div> 551 `; 552 } 553 554 setupGlobalInterceptor() { 555 if (cfg.interceptTelegram === false) return; 556 this._boundClick = (e) => { 557 if (e.ctrlKey || e.metaKey || e.shiftKey || e.button === 1) return; 558 if (e.defaultPrevented) return; 559 if (isPopupActive()) return; 560 561 const path = typeof e.composedPath === 'function' ? e.composedPath() : (e.path || []); 562 let targetLink = null; 563 for (const el of path) { 564 if ( 565 el.tagName === 'A' && 566 el.href && 567 (el.href.indexOf('t.me/GARANT_S_bot') !== -1 || el.href.indexOf(cfg.botUrl) !== -1) 568 ) { 569 targetLink = el; 570 break; 571 } 572 } 573 if (!targetLink) return; 574 if (targetLink.closest('[data-gs-no-modal]')) return; 575 if (targetLink.closest('.t-popup, .t-popup_opened, [class*="t-popup"]')) return; 576 if (path.includes(this.shadowRoot)) return; 577 578 const fabRoot = document.getElementById('gs-fab-button-root'); 579 if (fabRoot && path.includes(fabRoot)) return; 580 if (this._isOpen) return; 581 582 /* Ðез stopPropagation â ÑобÑÑие должно дойÑи до ÑелевÑÑ 583 обÑабоÑÑиков на <a> (напÑимеÑ, data-g5-cta на главной), 584 ÑÑÐ¾Ð±Ñ Ð°Ð½Ð°Ð»Ð¸Ñика ÑикÑиÑовала конкÑеÑнÑй CTA. */ 585 e.preventDefault(); 586 587 const fab = document.getElementById('gs-fab-button-root'); 588 if (fab && fab.shadowRoot) { 589 const trigger = fab.shadowRoot.querySelector('.fab-trigger'); 590 if (trigger && trigger.getAttribute('aria-expanded') === 'true') trigger.click(); 591 } 592 593 this.openModal(); 594 595 if (window.gsTrack) { 596 window.gsTrack('global_interceptor', 'Global Modal', 'global_interceptor'); 597 } 598 }; 599 document.addEventListener('click', this._boundClick, true); 600 } 601 602 setupModalControls() { 603 const overlay = this.shadowRoot.querySelector('.overlay'); 604 const closeBtn = this.shadowRoot.querySelector('.close-btn'); 605 const buttons = this.shadowRoot.querySelectorAll('.btn'); 606 607 closeBtn.addEventListener('click', () => this.closeModal()); 608 overlay.addEventListener('click', (e) => { 609 if (e.target === overlay) this.closeModal(); 610 }); 611 buttons.forEach((btn) => { 612 btn.addEventListener('click', () => { 613 const trackId = btn.dataset.track; 614 if (trackId && window.gsTrack) { 615 window.gsTrack(trackId, 'Modal Choice', trackId); 616 } 617 setTimeout(() => this.closeModal(), 150); 618 }); 619 }); 620 } 621 622 setupKeyboardNav() { 623 this._boundKeydown = (e) => { 624 if (!this._isOpen) return; 625 if (e.key === 'Escape') { 626 e.preventDefault(); 627 this.closeModal(); 628 return; 629 } 630 if (e.key === 'Tab') { 631 const focusable = Array.from(this.shadowRoot.querySelectorAll(this._focusableSelector)); 632 if (!focusable.length) return; 633 const first = focusable[0]; 634 const last = focusable[focusable.length - 1]; 635 const active = this.shadowRoot.activeElement || document.activeElement; 636 if (e.shiftKey) { 637 if (active === first) { e.preventDefault(); last.focus(); } 638 } else { 639 if (active === last) { e.preventDefault(); first.focus(); } 640 } 641 } 642 }; 643 document.addEventListener('keydown', this._boundKeydown); 644 } 645 646 setupTildaObserver() { 647 /* Tilda Ð¼Ð¾Ð¶ÐµÑ ÑÑавиÑÑ ÐºÐ»Ð°ÑÑ Ð¿Ð¾Ð¿Ð°Ð¿Ð° и на body, и на html. 648 Следим за обоими. */ 649 const observer = new MutationObserver(() => { 650 if (isPopupActive() && this._isOpen) this.closeModal(); 651 }); 652 observer.observe(document.body, { attributes: true, attributeFilter: ['class'] }); 653 observer.observe(document.documentElement, { attributes: true, attributeFilter: ['class'] }); 654 this._tildaObserver = observer; 655 } 656 657 setTabindexForAll(container, value) { 658 const elems = container.querySelectorAll('a[href], button, [tabindex]');
659 elems.forEach((el) => el.setAttribute('tabindex', value)); 660 } 661 662 openModal() { 663 if (this._isOpen) return; 664 this._isOpen = true; 665 this._lastFocused = document.activeElement; 666 this._prevOverflow = document.body.style.overflow; 667 668 const overlay = this.shadowRoot.querySelector('.overlay'); 669 overlay.classList.add('active'); 670 overlay.setAttribute('aria-hidden', 'false'); 671 document.body.style.overflow = 'hidden'; 672 this.setTabindexForAll(overlay, '0'); 673 674 /* ФокÑÑ Ð½Ð° пеÑвÑй CTA (Telegram), не на close-btn */ 675 setTimeout(() => { 676 const firstCta = overlay.querySelector('.btn'); 677 if (firstCta) firstCta.focus(); 678 }, 100); 679 680 if (window.gsTrack) { 681 window.gsTrack('modal_open_global', 'Global Modal', 'open'); 682 } 683 } 684 685 closeModal() { 686 if (!this._isOpen) return; 687 this._isOpen = false; 688 const overlay = this.shadowRoot.querySelector('.overlay'); 689 overlay.classList.remove('active'); 690 overlay.setAttribute('aria-hidden', 'true'); 691 document.body.style.overflow = this._prevOverflow || ''; 692 this.setTabindexForAll(overlay, '-1'); 693 if (this._lastFocused && typeof this._lastFocused.focus === 'function') { 694 try { this._lastFocused.focus(); } catch (e) { /* silent */ } 695 } 696 } 697 } 698 699 if (!customElements.get('gs-global-modal')) { 700 customElements.define('gs-global-modal', GsGlobalModal); 701 } 702 703 const ELEMENT_ID = 'gs-global-modal-root'; 704 const TAG_NAME = 'gs-global-modal'; 705 let isInjecting = false; 706 707 function inject() { 708 if (isInjecting) return false; 709 if (document.getElementById(ELEMENT_ID)) return true; 710 if (!document.body) return false; 711 isInjecting = true; 712 try { 713 const el = document.createElement(TAG_NAME); 714 el.id = ELEMENT_ID; 715 document.body.appendChild(el); 716 isInjecting = false; 717 return true; 718 } catch (e) { 719 isInjecting = false; 720 return false; 721 } 722 } 723 724 function setupWatcher() { 725 let c = 0; 726 const obs = new MutationObserver(() => { 727 if (!document.getElementById(ELEMENT_ID) && c < 3) { 728 c++; 729 inject(); 730 } 731 }); 732 obs.observe(document.body, { childList: true, subtree: true }); 733 } 734 735 function init() { 736 if (!document.body) { setTimeout(init, 100); return; } 737 if (inject()) setupWatcher(); 738 } 739 740 if (document.readyState === 'loading') { 741 document.addEventListener('DOMContentLoaded', init, { once: true }); 742 } else { 743 setTimeout(init, 120); 744 } 745 if (window.t_onReady && typeof window.t_onReady === 'function') { 746 window.t_onReady(() => setTimeout(init, 120)); 747 } 748 setTimeout(() => { 749 if (!document.getElementById(ELEMENT_ID)) inject(); 750 }, 1000); 751 752 window.gsOpenGatewayModal = function () { 753 const root = document.getElementById(ELEMENT_ID); 754 if (root && typeof root.openModal === 'function') { 755 root.openModal(); 756 } else { 757 window.open(cfg.botUrl, '_blank', 'noopener'); 758 } 759 }; 760})(); 761</script>
761 <!-- ============================================================ 762 SHADOW DOM FAB BUTTON v29.2 763 ============================================================ -->
763<script> 764(function () { 765 'use strict'; 766 if (window.__gsFabV29) return; 767 window.__gsFabV29 = true; 768 769 var cfg = window.__gsConfigV29 || {}; 770 cfg.botUrl = cfg.botUrl || 'https://t.me/GARANT_S_bot'; 771 cfg.maxUrl = cfg.maxUrl || 'https://guarantor.su/max'; 772 cfg.saleUrl = cfg.saleUrl || 'https://guarantor.su/sale'; 773 cfg.homeUrl = cfg.homeUrl || 'https://guarantor.su/'; 774 775 if (cfg.fabEnabled === false) return; 776 777 var p = window.location.pathname || ''; 778 function isPagePath(name) { 779 var target = '/' + name; 780 return p === target || p.indexOf(target + '/') !== -1 || p.slice(-target.length) === target; 781 } 782 function isSpecialPage() { 783 return isPagePath('max') || isPagePath('sale'); 784 } 785 function isPopupActive() { 786 try { 787 return ( 788 (document.body && (document.body.classList.contains('t-body_popup') || document.body.classList.contains('t-popup_opened'))) || 789 (document.documentElement && document.documentElement.classList.contains('t-popup_opened')) 790 ); 791 } catch (e) { return false; } 792 } 793 794 var isHome = p === '/' || p === '/index.html' || p === ''; 795 var isSale = isPagePath('sale'); 796 var is404 = p.indexOf('404') !== -1 || (document.title || '').indexOf('404') !== -1; 797 var isMiniApp = p.indexOf('/miniapp') !== -1 || (window.Telegram && window.Telegram.WebApp); 798 if (is404 || isPopupActive() || isMiniApp || isSpecialPage()) return; 799 800 function injectFallback() { 801 if (document.getElementById('gs-fab-fallback')) return; 802 var showHome = !isHome; 803 var showSale = !isSale; 804 var w = document.createElement('div'); 805 w.id = 'gs-fab-fallback'; 806 w.style.cssText = 807 'position:fixed;bottom:24px;right:16px;z-index:99997;display:flex;flex-direction:column-reverse;gap:8px;'; 808 809 var html = ''; 810 if (showHome) { 811 html += 812 '<a href="' + cfg.homeUrl + '" rel="noopener" style="display:inline-flex;align-items:center;gap:8px;min-height:48px;padding:10px 18px;border-radius:24px;background:linear-gradient(135deg,rgba(0,229,160,.95),rgba(0,180,120,.95));color:#000;text-decoration:none;font-weight:800;font-size:14px;border:2px solid rgba(0,229,160,.6);box-shadow:0 8px 24px rgba(0,229,160,.35);">ð ÐлавнаÑ</a>'; 813 } 814 html += 815 '<a href="' + cfg.maxUrl + '" rel="noopener" style="display:inline-flex;align-items:center;gap:8px;min-height:48px;padding:10px 18px;border-radius:24px;background:linear-gradient(135deg,rgba(48,209,88,.95),rgba(40,167,69,.95));color:#fff;text-decoration:none;font-weight:800;font-size:14px;border:2px solid rgba(48,209,88,.6);box-shadow:0 8px 24px rgba(48,209,88,.35);">ð¬ MAX (без VPN)</a>'; 816 html += 817 '<a href="' + cfg.botUrl + '" target="_blank" rel="noopener" style="display:inline-flex;align-items:center;gap:8px;min-height:48px;padding:10px 18px;border-radius:24px;background:linear-gradient(135deg,rgba(0,136,204,.95),rgba(0,102,153,.95));color:#fff;text-decoration:none;font-weight:800;font-size:14px;border:2px solid rgba(0,136,204,.6);box-shadow:0 8px 24px rgba(0,136,204,.35);">âï¸ Telegram</a>'; 818 if (showSale) { 819 html += 820 '<a href="' + cfg.saleUrl + '" rel="noopener" style="display:inline-flex;align-items:center;gap:8px;min-height:48px;padding:10px 18px;border-radius:24px;background:linear-gradient(135deg,rgba(255,107,107,.95),rgba(255,142,95,.95));color:#fff;text-decoration:none;font-weight:800;font-size:14px;border:2px solid rgba(255,107,107,.6);box-shadow:0 8px 24px rgba(255,107,107,.35);">ð¥ SALE</a>'; 821 } 822 w.innerHTML = html; 823 document.body.appendChild(w); 824 document.body.classList.add('has-gs-fab'); 825 document.documentElement.classList.add('has-gs-fab'); 826 } 827 828 if (!window.customElements) { 829 injectFallback(); 830 return; 831 } 832 833 class GsFabButton extends HTMLElement { 834 constructor() { 835 super(); 836 this.attachShadow({ mode: 'open' }); 837 this._rendered = false; 838 this._isOpen = false; 839 this._boundOutsideClick = null; 840 this._boundFocusout = null; 841 this._boundScroll = null; 842 this._boundResize = null; 843 this._hasInteracted = false; 844 } 845 846 connectedCallback() { 847 if (!this._rendered) { 848 this.render(); 849 this._rendered = true; 850 } 851 this.setupAnalytics(); 852 this.setupMenuToggle(); 853 this.setupOutsideClick(); 854 this.setupFocusout(); 855 this.setupScrollHide(); 856 this.setupAjaxUpdate(); 857 /* СÑÐ°Ð·Ñ ÐºÐ¾ÑÑекÑиÑÑем видимоÑÑÑ Ð¿ÑнкÑов â без flicker */ 858 this.updateMenuVisibility(); 859 } 860 861 disconnectedCallback() { 862 if (this._boundOutsideClick) document.removeEventListener('click', this._boundOutsideClick); 863 if (this._boundFocusout) document.removeEventListener('focusout', this._boundFocusout); 864 if (this._boundScroll) window.removeEventListener('scroll', this._boundScroll); 865 if (this._boundResize) window.removeEventListener('resize', this._boundResize); 866 } 867 868 render() { 869 this.shadowRoot.innerHTML = ` 870 <style> 871 @keyframes fab-pulse{0%,100%{transform:scale(1)}50%{transform:scale(1.03)}} 872 @keyframes fab-glow-opacity{0%,100%{opacity:.4;transform:scale(.95)}50%{opacity:.8;transform:scale(1.05)}} 873 @keyframes header-pulse{0%,100%{opacity:1}50%{opacity:.5}} 874 :host{position:fixed;bottom:24px;right:16px;z-index:99997;font-family:'DM Sans',system-ui,-apple-system,sans-serif;contain:layout style;transition:transform .3s cubic-bezier(.4,0,.2,1)} 875 .fab-container{position:relative;display:flex;flex-direction:column-reverse;align-items:flex-end;
875gap:12px} 876 .fab-trigger{pointer-events:auto;display:inline-flex;align-items:center;gap:8px;min-height:48px;padding:10px 18px;border-radius:24px;border:2px solid rgba(0,229,160,.6);background:linear-gradient(135deg,rgba(0,229,160,.95),rgba(0,180,120,.95));color:#000;font-size:14px;font-weight:800;line-height:1.2;white-space:nowrap;cursor:pointer;box-sizing:border-box;touch-action:manipulation;transition:transform .25s ease,box-shadow .25s ease,background .25s ease;will-change:transform,box-shadow;backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);animation:fab-pulse 3s ease-in-out infinite;-webkit-tap-highlight-color:transparent;user-select:none;outline:none;position:relative;overflow:hidden} 877 .fab-trigger::after{content:'';position:absolute;inset:-4px;border-radius:28px;background:radial-gradient(circle,rgba(0,229,160,.4) 0%,rgba(0,229,160,0) 70%);z-index:-1;opacity:.6;animation:fab-glow-opacity 2.5s ease-in-out infinite;pointer-events:none} 878 .fab-trigger:hover{animation:none;transform:translateY(-2px) scale(1.03);background:linear-gradient(135deg,rgba(0,229,160,1),rgba(0,180,120,1));box-shadow:0 12px 32px rgba(0,229,160,.55),0 6px 16px rgba(0,0,0,.3),0 0 24px rgba(0,229,160,.4)} 879 .fab-trigger:active{transform:translateY(-1px) scale(1.01)} 880 .fab-trigger:focus-visible{outline:3px solid #00E5A0;outline-offset:3px;animation:none} 881 .fab-trigger[aria-expanded="true"]{animation:none;transform:scale(1);background:linear-gradient(135deg,rgba(0,180,120,.95),rgba(0,140,90,.95));box-shadow:0 8px 24px rgba(0,180,120,.45),0 4px 12px rgba(0,0,0,.25)} 882 .fab-trigger[aria-expanded="true"]::after{animation:none;opacity:0} 883 .fab-trigger.has-interacted{animation:none} 884 .fab-trigger.has-interacted::after{animation:none;opacity:0} 885 .fab-icon{font-size:20px;line-height:1;flex-shrink:0} 886 .fab-text{display:flex;flex-direction:column;gap:1px;text-align:left} 887 .fab-text-main{font-size:14px;font-weight:800;letter-spacing:.3px;line-height:1;color:#000} 888 .fab-text-sub{font-size:10px;font-weight:600;opacity:1;color:rgba(0,0,0,.75);letter-spacing:.2px;line-height:1} 889 .fab-text-sub strong{color:#000;font-weight:900} 890 .fab-chevron{font-size:10px;line-height:1;transition:transform .3s cubic-bezier(.4,0,.2,1);margin-left:2px;opacity:.7;flex-shrink:0} 891 .fab-trigger[aria-expanded="true"] .fab-chevron{transform:rotate(180deg);opacity:1} 892 .fab-menu{position:absolute;bottom:calc(100% + 10px);right:0;width:320px;background:rgba(20,20,22,.98);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.1);border-radius:16px;padding:0;box-shadow:0 16px 48px rgba(0,0,0,.5),0 8px 24px rgba(0,0,0,.3);opacity:0;transform:translateY(10px) scale(.95);pointer-events:none;transition:opacity .25s cubic-bezier(.4,0,.2,1),transform .25s cubic-bezier(.4,0,.2,1);overflow:hidden} 893 .fab-menu.is-open{opacity:1;transform:translateY(0) scale(1);pointer-events:auto} 894 .menu-header{padding:16px;border-bottom:1px solid rgba(255,255,255,.08);background:linear-gradient(135deg,rgba(0,229,160,.05),rgba(0,180,120,.05))} 895 .menu-header-title{font-size:13px;font-weight:800;color:#00E5A0;letter-spacing:.5px;margin-bottom:4px;display:flex;align-items:center;gap:6px} 896 .menu-header-title::before{content:'';width:8px;height:8px;border-radius:50%;background:#00E5A0;box-shadow:0 0 8px #00E5A0;animation:header-pulse 2s ease-in-out infinite} 897 .menu-header-desc{font-size:11px;color:rgba(255,255,255,.7);line-height:1.4} 898 .menu-content{padding:8px} 899 .menu-item{display:flex;align-items:flex-start;gap:12px;padding:12px;border-radius:12px;text-decoration:none;color:#fff;transition:background .2s ease,transform .15s ease,box-shadow .2s ease;cursor:pointer;position:relative;overflow:hidden;outline:none;touch-action:manipulation} 900 .menu-item:hover,.menu-item:focus{background:rgba(255,255,255,.1);transform:translateX(2px);box-shadow:inset 3px 0 0 0 #00E5A0} 901 .menu-item:active{transform:translateX(1px) scale(.98)} 902 .menu-item:focus-visible{outline:2px solid #00E5A0;outline-offset:-2px} 903 .menu-item-icon{font-size:20px;line-height:1;flex-shrink:0;margin-top:2px} 904 .menu-item-content{flex:1;min-width:0} 905 .menu-item-title{font-size:14px;font-weight:700;line-height:1.3;margin-bottom:2px} 906 .menu-item-desc{font-size:11px;color:rgba(255,255,255,.6);line-height:1.3} 907 .menu-item-badge{display:inline-flex;align-items:center;gap:3px;padding:2px 6px;border-radius:6px;font-size:10px;font-weight:700;background:rgba(255,194,75,.15);color:#FFC24B;margin-top:3px} 908 .menu-divider{height:1px;background:rgba(255,255,255,.08);margin:4px 0} 909 .menu-item-sale{background:linear-gradient(135deg,rgba(255,107,107,.15),rgba(255,142,95,.15));border:1px solid rgba(255,107,107,.3)} 910 .menu-item-sale:hover,.menu-item-sale:focus{background:linear-gradient(135deg,rgba(255,107,107,.25),rgba(255,142,95,.25));box-shadow:inset 3px 0 0 0 #FF6B6B} 911 .menu-item-sale .menu-item-title{color:#FF6B6B} 912 @media(max-width:768px){ 913 :host{bottom:76px;right:12px} 914 .fab-trigger{min-height:44px;padding:8px 14px;border-radius:22px} 915 .fab-icon{font-size:18px} 916 .fab-text-main{font-size:13px} 917 .fab-text-sub{font-size:9px} 918 .fab-menu{width:calc(100vw - 24px);max-width:320px;right:-6px} 919 } 920 @media(max-width:375px){ 921 :host{bottom:72px;right:8px} 922 .fab-trigger{padding:8px 12px} 923 .fab-menu{width:calc(100vw - 16px);right:-4px} 924 } 925 @supports(padding-bottom:env(safe-area-inset-bottom)){ 926 @media(max-width:768px){ 927 :host{bottom:calc(76px + env(safe-area-inset-bottom,0px))} 928 } 929 } 930 @media(prefers-reduced-motion:reduce){ 931 .fab-trigger,.fab-menu,.menu-item,.fab-chevron,.menu-header-title::before,.fab-trigger::after{transition:none!important;animation:none!important} 932 } 933 @media print{ 934 :host{display:none!important} 935 } 936 </style> <div class="fab-container"> <button class="fab-trigger" aria-expanded="false" aria-controls="gs-fab-menu" aria-label="SALE: пÑÐ¾ÐµÐºÑ Ð¿ÑодаеÑÑÑ â безопаÑÐ½Ð°Ñ Ñделка, start escrow â Ð¼ÐµÐ½Ñ Ð¿Ð»Ð¾Ñадок запÑÑка" data-track="fab-trigger"> <span class="fab-icon" aria-hidden="true">ð¡ï¸</span> <span class="fab-text"> <span class="fab-text-main">SALE: ÐÐ ÐÐÐТ ÐÐ ÐÐÐÐТСЯ</span> <span class="fab-text-sub">ÐÐÐÐÐÐСÐÐЯ СÐÐÐÐÐ<strong> â START ESCROW</strong></span> </span> <span class="fab-chevron" aria-hidden="true">â¼</span> </button> <nav class="fab-menu" aria-hidden="true" aria-label="ÐавигаÑÐ¸Ñ Ð¿Ð¾ плоÑадкам"> <div class="menu-header"> <div class="menu-header-title">ESCROW GATEWAY · ACTIVE</div> <div class="menu-header-desc">ÐÑбеÑиÑе плоÑÐ°Ð´ÐºÑ Ð·Ð°Ð¿ÑÑка.<br>ÐезопаÑÐ½Ð°Ñ Ñделка акÑивиÑÑеÑÑÑ Ð·Ð° 30 ÑекÑнд ÑеÑез заÑиÑÑннÑй ÑлÑз.</div> </div> <div class="menu-content" id="gs-fab-menu"> <a href="${cfg.homeUrl}" class="menu-item" tabindex="-1" data-track="fab-home" rel="noopener" data-visible="home"> <span class="menu-item-icon" aria-hidden="true">ð </span> <div class="menu-item-content"> <div class="menu-item-title">ÐÑкÑоÑ-ÑеÑвиÑ</div> <div class="menu-item-desc">ÐÐ»Ð°Ð²Ð½Ð°Ñ â¢ ÐаÑÐ°Ð½Ñ Ñделок</div> </div> </a> <a href="${cfg.maxUrl}" class="menu-item" tabindex="-1" data-track="fab-max" rel="noopener"> <span class="menu-item-icon" aria-hidden="true">ð¬</span> <div class="menu-item-content"> <div class="menu-item-title">Сделки в MAX</div> <div class="menu-item-desc">ÐÐ»Ñ Ð Ð¤ ⢠РабоÑÐ°ÐµÑ Ð±ÐµÐ· VPN</div> <div class="menu-item-badge">ð·ðº РекомендÑеÑÑÑ</div> </div> </a> <a href="${cfg.botUrl}" class="menu-item" tabindex="-1" data-track="fab-telegram" target="_blank" rel="noopener"> <span class="menu-item-icon" aria-hidden="true">âï¸</span> <div class="menu-item-content"> <div class="menu-item-title">Сделки в Telegram</div> <div class="menu-item-desc">ÐезопаÑнÑе ÑаÑÑÑÑÑ</div> </div> </a> <div class="menu-divider" data-visible="sale"></div> <a href="${cfg.saleUrl}" class="menu-item menu-item-sale" tabindex="-1" data-track="fab-sale" rel="noopener" data-visible="sale"> <span class="menu-item-icon" aria-hidden="true">ð¥</span> <div class="menu-item-content"> <div class="menu-item-title">SALE: ÐÑпиÑÑ Ð¿ÑоекÑ</div> <div class="menu-item-desc">ÐÐ¸Ð·Ð½ÐµÑ Ð¿Ð¾Ð´ клÑÑ â¢ USDT</div> </div> </a> </div> </nav> </div> 937 `; 938 } 939 940 updateMenuVisibility() { 941 var path = window.location.pathname || ''; 942 function localIsPagePath(name) { 943 var target = '/' + name; 944 return path === target || path.indexOf(target + '/') !== -1 || path.slice(-target.length) === target; 945 } 946 var showHome = !(path === '/' || path === '/index.html' || path === ''); 947 var showSale = !localIsPagePath('sale'); 948 var menu = this.shadowRoot.querySelector('.fab-menu'); 949 if (!menu) return; 950 var items = menu.querySelectorAll('[data-visible]');
951 items.forEach(function (item) { 952 var type = item.getAttribute('data-visible'); 953 if (type === 'home') { 954 item.style.display = showHome ? '' : 'none'; 955 } else if (type === 'sale') { 956 item.style.display = showSale ? '' : 'none'; 957 } 958 }); 959 } 960 961 setupAnalytics() { 962 this.shadowRoot.addEventListener('click', (e) => { 963 var el = e.target.closest('[data-track]'); 964 if (!el) return; 965 var trackId = el.dataset.track; 966 if (!trackId) return; 967 if (window.gsTrack) { 968 window.gsTrack(trackId, 'FAB Menu', trackId); 969 } 970 }); 971 } 972 973 setupMenuToggle() { 974 var trigger = this.shadowRoot.querySelector('.fab-trigger'); 975 var menu = this.shadowRoot.querySelector('.fab-menu'); 976 var menuContent = this.shadowRoot.querySelector('.menu-content'); 977 var allMenuItems = menuContent.querySelectorAll('.menu-item'); 978 979 trigger.addEventListener('click', (e) => { 980 e.stopPropagation(); 981 if (!this._isOpen) this.updateMenuVisibility(); 982 this._isOpen = !this._isOpen; 983 trigger.setAttribute('aria-expanded', String(this._isOpen)); 984 menu.setAttribute('aria-hidden', String(!this._isOpen)); 985 986 if (!this._hasInteracted) { 987 this._hasInteracted = true; 988 trigger.classList.add('has-interacted'); 989 } 990 991 if (this._isOpen) { 992 menu.classList.add('is-open'); 993 var visibleItems = Array.from(allMenuItems).filter(function (item) { 994 return item.style.display !== 'none'; 995 }); 996 visibleItems.forEach(function (item) { 997 item.setAttribute('tabindex', '0'); 998 }); 999 if (visibleItems.length > 0) { 1000 setTimeout(function () { visibleItems[0].focus(); }, 50); 1001 } 1002 } else { 1003 menu.classList.remove('is-open'); 1004 allMenuItems.forEach(function (item) { 1005 item.setAttribute('tabindex', '-1'); 1006 }); 1007 trigger.focus(); 1008 } 1009 }); 1010 1011 menuContent.addEventListener('keydown', (e) => { 1012 if (!this._isOpen) return; 1013 var items = Array.from(allMenuItems).filter(function (item) { 1014 return item.style.display !== 'none'; 1015 }); 1016 if (!items.length) return; 1017 var active = this.shadowRoot.activeElement || document.activeElement; 1018 var currentIndex = items.indexOf(active); 1019 if (currentIndex === -1) currentIndex = 0; 1020 switch (e.key) { 1021 case 'ArrowDown': 1022 e.preventDefault(); 1023 items[(currentIndex + 1) % items.length].focus(); 1024 break; 1025 case 'ArrowUp': 1026 e.preventDefault(); 1027 items[(currentIndex - 1 + items.length) % items.length].focus(); 1028 break; 1029 case 'Home': 1030 e.preventDefault(); 1031 items[0].focus(); 1032 break; 1033 case 'End': 1034 e.preventDefault(); 1035 items[items.length - 1].focus(); 1036 break; 1037 case 'Escape': 1038 e.preventDefault(); 1039 this.closeMenu(); 1040 break; 1041 } 1042 }); 1043 } 1044 1045 closeMenu() { 1046 var trigger = this.shadowRoot.querySelector('.fab-trigger'); 1047 var menu = this.shadowRoot.querySelector('.fab-menu'); 1048 var menuContent = this.shadowRoot.querySelector('.menu-content'); 1049 var allMenuItems = menuContent.querySelectorAll('.menu-item'); 1050 this._isOpen = false; 1051 trigger.setAttribute('aria-expanded', 'false'); 1052 menu.setAttribute('aria-hidden', 'true'); 1053 menu.classList.remove('is-open'); 1054 allMenuItems.forEach(function (item) { 1055 item.setAttribute('tabindex', '-1'); 1056 }); 1057 trigger.focus(); 1058 } 1059 1060 setupOutsideClick() { 1061 this._boundOutsideClick = (e) => { 1062 if (!this._isOpen) return; 1063 const path = typeof e.composedPath === 'function' ? e.composedPath() : (e.path || []); 1064 if (!path.includes(this) && !path.includes(this.shadowRoot)) { 1065 this.closeMenu(); 1066 } 1067 }; 1068 document.addEventListener('click', this._boundOutsideClick); 1069 } 1070 1071 setupFocusout() { 1072 this._boundFocusout = (e) => { 1073 if (!this._isOpen) return; 1074 var related = e.relatedTarget; 1075 if (!related) { this.closeMenu(); return; } 1076 var inside = false; 1077 try { 1078 inside = (this.shadowRoot && this.shadowRoot.contains(related)) || this.contains(related); 1079 } catch (err) { inside = false; } 1080 if (!inside) this.closeMenu(); 1081 }; 1082 document.addEventListener('focusout', this._boundFocusout); 1083 } 1084 1085 setupScrollHide() { 1086 var lastY = window.scrollY; 1087 var ticking = false; 1088 var update = () => { 1089 var y = window.scrollY; 1090 if (!this._isOpen && window.innerWidth <= 768) { 1091 this.style.transform = y > lastY && y >
1091 100 ? 'translate3d(200%,0,0)' : 'translate3d(0,0,0)'; 1092 } else { 1093 this.style.transform = 'translate3d(0,0,0)'; 1094 } 1095 lastY = y; 1096 ticking = false; 1097 }; 1098 this._boundScroll = () => { 1099 if (!ticking) { requestAnimationFrame(update); ticking = true; } 1100 }; 1101 window.addEventListener('scroll', this._boundScroll, { passive: true }); 1102 1103 /* Resize: ÑбÑаÑÑваем ÑоÑÑоÑние пÑи повоÑоÑе ÑкÑана / оÑкÑÑÑии iOS-клавиаÑÑÑÑ */ 1104 this._boundResize = () => { 1105 if (!ticking) { requestAnimationFrame(update); ticking = true; } 1106 }; 1107 window.addEventListener('resize', this._boundResize, { passive: true }); 1108 } 1109 1110 setupAjaxUpdate() { 1111 window.addEventListener('popstate', () => this.updateMenuVisibility()); 1112 if (window.t_onReady && typeof window.t_onReady === 'function') { 1113 window.t_onReady(() => this.updateMenuVisibility()); 1114 } 1115 document.addEventListener('tilda_onajaxload', () => this.updateMenuVisibility()); 1116 } 1117 } 1118 1119 if (!customElements.get('gs-fab-button')) { 1120 customElements.define('gs-fab-button', GsFabButton); 1121 } 1122 1123 const ELEMENT_ID = 'gs-fab-button-root'; 1124 const TAG_NAME = 'gs-fab-button'; 1125 let isInjecting = false; 1126 1127 function inject() { 1128 if (isInjecting) return false; 1129 if (document.getElementById(ELEMENT_ID)) return true; 1130 if (!document.body) return false; 1131 isInjecting = true; 1132 try { 1133 var el = document.createElement(TAG_NAME); 1134 el.id = ELEMENT_ID; 1135 document.body.appendChild(el); 1136 document.body.classList.add('has-gs-fab'); 1137 document.documentElement.classList.add('has-gs-fab'); 1138 isInjecting = false; 1139 return true; 1140 } catch (e) { 1141 isInjecting = false; 1142 injectFallback(); 1143 return false; 1144 } 1145 } 1146 1147 function setupWatcher() { 1148 let c = 0; 1149 var obs = new MutationObserver(function () { 1150 if (!document.getElementById(ELEMENT_ID) && c < 3) { 1151 c++; 1152 inject(); 1153 } 1154 }); 1155 obs.observe(document.body, { childList: true, subtree: true }); 1156 } 1157 1158 function init() { 1159 if (!document.body) { setTimeout(init, 100); return; } 1160 if (inject()) { 1161 setupWatcher(); 1162 } else { 1163 injectFallback(); 1164 } 1165 } 1166 1167 if (document.readyState === 'loading') { 1168 document.addEventListener('DOMContentLoaded', init, { once: true }); 1169 } else { 1170 setTimeout(init, 150); 1171 } 1172 if (window.t_onReady && typeof window.t_onReady === 'function') { 1173 window.t_onReady(function () { setTimeout(init, 150); }); 1174 } 1175 setTimeout(function () { 1176 if (!document.getElementById(ELEMENT_ID)) inject(); 1177 }, 1000); 1178})(); 1179</script>
1179 <!-- ============================================================ 1180 Global accessibility / Tilda compatibility CSS 1181 ============================================================ --> <style> 1182 /* scroll-padding â ÑолÑко когда FAB ÑеалÑно оÑÑиÑован */ 1183 html.has-gs-fab { scroll-padding-bottom: 88px; } 1184 @media (max-width: 768px) { 1185 html.has-gs-fab { scroll-padding-bottom: 150px; } 1186 } 1187 1188 /* Tilda popup â пÑÑÑем наÑи ÑикÑиÑованнÑе ÑлеменÑÑ */ 1189 body.t-body_popup #gs-fab-button-root, 1190 body.t-body_popup #gs-fab-fallback, 1191 body.t-popup_opened #gs-fab-button-root, 1192 body.t-popup_opened #gs-fab-fallback, 1193 html.t-popup_opened #gs-fab-button-root, 1194 html.t-popup_opened #gs-fab-fallback, 1195 body.t-body_popup #gs-global-modal-root, 1196 body.t-popup_opened #gs-global-modal-root, 1197 html.t-popup_opened #gs-global-modal-root { 1198 display: none !important; 1199 pointer-events: none !important; 1200 } 1201 body.t-body_popup .gn-mnav, 1202 body.t-popup_opened .gn-mnav, 1203 html.t-popup_opened .gn-mnav { 1204 display: none !important; 1205 } 1206 1207 #gs-global-modal-root { 1208 position: absolute !important; 1209 width: 0 !important; 1210 height: 0 !important; 1211 overflow: visible !important; 1212 pointer-events: none !important; 1213 z-index: 99998; 1214 } 1215 #gs-fab-button-root { 1216 position: fixed !important; 1217 z-index: 99997; 1218 } 1219 #gs-fab-fallback { 1220 position: fixed !important; 1221 z-index: 99997; 1222 } 1223 1224 @media (max-width: 768px) { 1225 #gs-fab-button-root { 1226 bottom: calc(76px + env(safe-area-inset-bottom, 0px)) !important; 1227 right: 12px !important; 1228 } 1229 #gs-fab-fallback { 1230 bottom: calc(76px + env(safe-area-inset-bottom, 0px)) !important; 1231 right: 12px !important; 1232 } 1233 } 1234 1235 @media print { 1236 #gs-fab-button-root, 1237 #gs-fab-fallback, 1238 #gs-global-modal-root { 1239 display: none !important; 1240 } 1241 } 1242</style><!-- nominify end -->
1242<script type="text/javascript">window.dataLayer=window.dataLayer||[];</script>
1242
1242<script type="text/javascript">(function() {var ttt='cebo';var tt='oog';var re=new RegExp("bot|g" + tt + "le|yandex|baidu|bing|msn|duckduckbot|teoma|slurp|crawler|spider|robot|crawling|fa" + ttt + "ok","i");if((re.test(navigator.userAgent))===false&&typeof(sessionStorage)!='undefined'&&sessionStorage.getItem('visited')!=='y'&&document.visibilityState){var style=document.createElement('style');style.type='text/css';style.innerHTML='@media screen and (min-width: 980px) {.t-records {opacity: 0;}.t-records_animated {-webkit-transition: opacity ease-in-out .2s;-moz-transition: opacity ease-in-out .2s;-o-transition: opacity ease-in-out .2s;transition: opacity ease-in-out .2s;}.t-records.t-records_visible {opacity: 1;}}';document.getElementsByTagName('head')[0].appendChild(style);function t_setvisRecs(){var alr=document.querySelectorAll('.t-records');Array.prototype.forEach.call(alr,function(el) {el.classList.add("t-records_animated");});setTimeout(function() {Array.prototype.forEach.call(alr,function(el) {el.classList.add("t-records_visible");});sessionStorage.setItem("visited","y");},400);} 1243document.addEventListener('DOMContentLoaded',t_setvisRecs);}})();</script>
1243</head> <body class="t-body" style="margin:0;"> <!--allrecords--> <div id="allrecords" class="t-records" data-hook="blocks-collection-content-node" data-tilda-project-id="2980991" data-tilda-page-id="148048346" data-tilda-page-alias="max" data-tilda-formskey="d0489d7fe5b1493d0ad94dcc7ba3d384" data-tilda-cookie="no" data-tilda-stat-scroll="yes" data-tilda-lazy="yes" data-tilda-project-lang="RU" data-tilda-root-zone="com" data-tilda-project-headcode="yes" data-tilda-ts="y" data-tilda-project-country="RU"> <div id="rec2371178081" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin --> <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover"> <meta name="theme-color" content="#000000"> <title>ÐÐÐ ÐÐТ СÐÐÐÐÐ â1 â ÐезопаÑÐ½Ð°Ñ Ñделка ÑеÑез MAX</title> <style> 1244*{-webkit-tap-highlight-color:transparent;box-sizing:border-box;margin:0;padding:0} 1245html,body{height:100%;overflow-x:hidden} 1246body{background:linear-gradient(135deg,#000 0%,#0a0a0a 100%);color:#fff;font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;overscroll-behavior-y:contain;-webkit-font-smoothing:antialiased} 1247 1248.app-container{min-height:100vh;display:flex;flex-direction:column;position:relative;max-width:640px;margin:0 auto} 1249.app-header{position:sticky;top:0;z-index:40;background:rgba(0,0,0,.95);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border-bottom:1px solid rgba(255,255,255,.08);padding:env(safe-area-inset-top) 0 0 0} 1250.app-content{flex:1;overflow-y:auto;-webkit-overflow-scrolling:touch;padding-bottom:env(safe-area-inset-bottom)} 1251 1252.glass{background:rgba(28,28,30,.7);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,.08);border-radius:16px} 1253.glass-light{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.08);border-radius:12px} 1254 1255.accent{color:#30D158} 1256.accent-bg{background:linear-gradient(135deg,#30D158 0%,#28A745 100%)} 1257.accent-border{border-color:#30D158} 1258 1259.buyer-accent{color:#0A84FF} 1260.buyer-bg{background:linear-gradient(135deg,#0A84FF 0%,#007AFF 100%)} 1261.seller-accent{color:#FF9F0A} 1262.seller-bg{background:linear-gradient(135deg,#FF9F0A 0%,#FF9500 100%)} 1263.max-accent{color:#FF3B30} 1264.max-bg{background:linear-gradient(135deg,#FF3B30 0%,#FF2D20 100%)} 1265 1266@keyframes slideUp{from{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}} 1267@keyframes slideIn{from{transform:translateX(30px);opacity:0}to{transform:translateX(0);opacity:1}} 1268@keyframes fadeIn{from{opacity:0}to{opacity:1}} 1269@keyframes pulse{0%,100%{opacity:1}50%{opacity:.5}} 1270@keyframes glow{0%,100%{box-shadow:0 0 20px rgba(48,209,88,.3)}50%{box-shadow:0 0 30px rgba(48,209,88,.6)}} 1271@keyframes ticker{0%{transform:translateX(100%)}100%{transform:translateX(-100%)}} 1272@keyframes countUp{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}} 1273 1274.animate-slide-up{animation:slideUp .4s cubic-bezier(.4,0,.2,1)} 1275.animate-slide-in{animation:slideIn .4s cubic-bezier(.4,0,.2,1)} 1276.animate-fade-in{animation:fadeIn .3s ease-out} 1277.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite} 1278.animate-glow{animation:glow 2s ease-in-out infinite} 1279.animate-ticker{animation:ticker 30s linear infinite} 1280.animate-count{animation:countUp .5s ease-out} 1281 1282.bottom-sheet{position:fixed;inset:0;z-index:50;display:flex;flex-direction:column;justify-content:flex-end} 1283.bottom-sheet-overlay{position:absolute;inset:0;background:rgba(0,0,0,.6);backdrop-filter:blur(4px)} 1284.bottom-sheet-content{position:relative;background:#1C1C1E;border-radius:20px 20px 0 0;max-height:90vh;overflow-y:auto;padding-bottom:env(safe-area-inset-bottom);max-width:640px;margin:0 auto;width:100%} 1285.bottom-sheet-handle{width:36px;height:5px;background:rgba(255,255,255,.3);border-radius:3px;margin:8px auto} 1286 1287.progress-container{padding:12px 16px;background:rgba(0,0,0,.5);border-bottom:1px solid rgba(255,255,255,.08)} 1288.progress-bar{height:4px;background:rgba(255,255,255,.1);border-radius:2px;overflow:hidden} 1289.progress-fill{height:100%;background:linear-gradient(90deg,#30D158 0%,#28A745 100%);transition:width .5s cubic-bezier(.4,0,.2,1);border-radius:2px} 1290 1291.sticky-nav{position:sticky;bottom:0;background:linear-gradient(to top,rgba(0,0,0,.98) 0%,rgba(0,0,0,.95) 80%,transparent 100%);padding:16px;padding-bottom:calc(16px + env(safe-area-inset-bottom));z-index:30} 1292 1293.card{background:rgba(28,28,30,.7);border:1px solid rgba(255,255,255,.08);border-radius:16px;padding:16px;transition:all .2s;cursor:pointer} 1294.card:active{transform:scale(.98);background:rgba(28,28,30,.9)} 1295.card-selected{border-color:#30D158;background:rgba(48,209,88,.08)} 1296 1297.btn{width:100%;padding:16px;border-radius:12px;font-weight:600;font-size:16px;transition:all .2s;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px} 1298.btn-primary{background:linear-gradient(135deg,#30D158 0%,#28A745 100%);color:#000} 1299.btn-primary:active{transform:scale(.98)} 1300.btn-secondary{background:rgba(255,255,255,.1);color:#fff;border:1px solid rgba(255,255,255,.2)} 1301.btn-secondary:active{background:rgba(255,255,255,.15)} 1302.btn-buyer{background:linear-gradient(135deg,#0A84FF 0%,#007AFF 100%);color:#fff} 1303.btn-seller{background:linear-gradient(135deg,#FF9F0A 0%,#FF9500 100%);color:#fff} 1304.btn-max{background:linear-gradient(135deg,#FF3B30 0%,#FF2D20 100%);color:#fff} 1305.btn-max:active{transform:scale(.98)} 1306 1307.input{width:100%;padding:14px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.1);border-radius:12px;color:#fff;font-size:15px;transition:all .2s;font-family:inherit} 1308.input:focus{outline:none;border-color:#30D158;background:rgba(255,255,255,.12)} 1309.input:disabled{opacity:.5;cursor:not-allowed} 1310 1311.ticker-container{overflow:hidden;background:rgba(48,209,88,.05);border:1px solid rgba(48,209,88,.2);border-radius:12px;padding:12px 0} 1312.ticker-content{display:flex;gap:24px;white-space:nowrap;animation:ticker 30s linear infinite} 1313.ticker-item{display:flex;align-items:center;gap:8px;padding:0 16px} 1314 1315.stat-value{font-size:24px;font-weight:700;color:#30D158;line-height:1} 1316.stat-label{font-size:11px;color:rgba(255,255,255,.5);margin-top:4px} 1317 1318.shield-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px} 1319@media(max-width:400px){.shield-grid{grid-template-columns:repeat(3,1fr)}} 1320.shield-item{background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.08);border-radius:12px;padding:12px 8px;text-align:center;transition:all .2s} 1321.shield-item:hover{border-color:rgba(48,209,88,.3);transform:translateY(-2px)} 1322.shield-number{width:24px;height:24px;background:linear-gradient(135deg,#30D158 0%,#28A745 100%);color:#000;border-radius:50%;font-weight:700;font-size:12px;display:flex;align-items:center;justify-content:center;margin:0 auto 6px} 1323 1324.currency-selector{position:relative} 1325.currency-trigger{width:100%;padding:14px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.1);border-radius:12px;display:flex;align-items:center;justify-content:space-between;cursor:pointer;transition:all .2s} 1326.currency-trigger:hover{border-color:#30D158} 1327.currency-dropdown{position:absolute;top:calc(100% + 8px);left:0;right:0;background:#1C1C1E;border:1px solid rgba(255,255,255,.1);border-radius:12px;max-height:320px;overflow-y:auto;z-index:100;box-shadow:0 10px 40px rgba(0,0,0,.5)} 1328 1329.agree-toggle{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:12px} 1330.agree-btn{padding:14px;border-radius:12px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s;border:2px solid rgba(255,255,255,.1);background:rgba(255,255,255,.05);color:#fff;text-align:center} 1331.agree-btn:active{transform:scale(.98)} 1332.agree-btn-agreed{background:rgba(48,209,88,.15);border-color:#30D158;color:#30D158}
1333.agree-btn-proposed{background:rgba(255,159,10,.15);border-color:#FF9F0A;color:#FF9F0A} 1334 1335.toast{position:fixed;bottom:100px;left:50%;transform:translateX(-50%);background:rgba(28,28,30,.95);backdrop-filter:blur(20px);color:#fff;padding:12px 24px;border-radius:12px;border:1px solid rgba(255,255,255,.1);z-index:1000;animation:slideUp .3s ease-out;max-width:90%;text-align:center} 1336 1337::-webkit-scrollbar{width:6px;height:6px} 1338::-webkit-scrollbar-track{background:transparent} 1339::-webkit-scrollbar-thumb{background:rgba(255,255,255,.2);border-radius:3px} 1340 1341.hidden{display:none!important} 1342.safe-top{padding-top:env(safe-area-inset-top)} 1343.safe-bottom{padding-bottom:env(safe-area-inset-bottom)} 1344 1345.max-hint{background:rgba(255,59,48,.08);border:1px solid rgba(255,59,48,.3);border-radius:12px;padding:12px;margin-top:12px} 1346.max-link-display{background:rgba(0,0,0,.5);border:1px solid rgba(255,59,48,.3);border-radius:8px;padding:10px;font-family:monospace;font-size:12px;color:#FF3B30;word-break:break-all;margin-top:8px;user-select:all} 1347 1348@media(min-width:641px){ 1349body{padding:20px 0} 1350.app-header{border-radius:16px 16px 0 0} 1351} 1352</style> </head> <body> <div class="app-container"> <header class="app-header"> <div style="padding:12px 16px"> <div style="display:flex;align-items:center;justify-content:space-between"> <div style="display:flex;align-items:center;gap:12px"> <div style="width:40px;height:40px" class="accent-bg"><div style="display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-size:20px">ð¡ï¸</div></div> <div> <div style="font-size:16px;font-weight:700">ÐÐÐ ÐÐТ СÐÐÐÐÐ â1</div> <div style="font-size:12px" class="accent">ÐÑкÑÐ¾Ñ ÑеÑез MAX</div> </div> </div> <div class="glass-light" style="padding:6px 12px;border-radius:20px;font-size:12px;display:flex;align-items:center;gap:8px"> <div style="width:8px;height:8px" class="accent-bg animate-pulse"></div> <span class="accent">24/7</span> </div> </div> </div> </header> <main class="app-content" style="padding:24px 16px"> <div id="counterparty-banner" class="hidden" style="margin-bottom:16px"> <div class="glass accent-border" style="padding:16px"> <div style="display:flex;align-items:center;gap:12px"> <div style="font-size:24px">ð¤</div> <div style="flex:1"> <div style="font-size:14px;font-weight:600" class="buyer-accent">Режим ÑоглаÑованиÑ</div> <div style="font-size:12px;color:rgba(255,255,255,.6)">ÐÑоÑмоÑÑиÑе ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ ÑоглаÑÑйÑе каждое</div> </div> </div> </div> </div> <div id="progress-container" class="hidden" style="margin-bottom:16px"> <div class="progress-container" style="border-radius:8px"> <div style="display:flex;justify-content:space-between;font-size:12px;color:rgba(255,255,255,.6);margin-bottom:8px"> <span id="step-text">Шаг 1 из 7</span> <span id="step-percent">14%</span> </div> <div class="progress-bar"> <div id="progress-bar" class="progress-fill" style="width:14%"></div> </div> </div> </div> <div id="quiz-container" class="hidden"></div> <div id="start-screen"> <div style="text-align:center;margin-bottom:24px"> <h1 style="font-size:24px;font-weight:700;margin-bottom:8px">ÐезопаÑÐ½Ð°Ñ Ñделка ÑеÑез <span class="accent">меÑÑÐµÐ½Ð´Ð¶ÐµÑ MAX</span></h1> <p style="font-size:14px;color:rgba(255,255,255,.6)">AI-native ÑÑкÑÐ¾Ñ Ð´Ð»Ñ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑнÑÑ ÑаÑÑÑÑов в кÑипÑе и ÑиаÑе. ÐÑлÑÑиподпиÑÑ 2/3, заÑиÑа Ð¾Ñ Ñкама, ÑÑÑÐ°Ñ Ð¾Ð²Ð°Ð½Ð¸Ðµ Lloyd's $45M.</p> </div> <div class="ticker-container"> <div class="ticker-content" id="live-ticker"> <div class="ticker-item"><span style="font-size:12px">ð</span><span style="font-size:12px;font-weight:600" class="accent">Сделка #P-41063</span><span style="font-size:12px;color:rgba(255,255,255,.6)">7,101 USDT</span><span style="font-size:12px" class="accent">â ÐаÑиÑена</span></div> <div class="ticker-item"><span style="font-size:12px">ð</span><span style="font-size:12px;font-weight:600" class="accent">Сделка #E-12386</span><span style="font-size:12px;color:rgba(255,255,255,.6)">
13521,789 USDT</span><span style="font-size:12px" class="accent">â ÐаÑиÑена</span></div> <div class="ticker-item"><span style="font-size:12px">ð</span><span style="font-size:12px;font-weight:600" class="accent">Сделка #T-89234</span><span style="font-size:12px;color:rgba(255,255,255,.6)">2,450 USDT</span><span style="font-size:12px" class="accent">â ÐаÑиÑена</span></div> </div> </div> <div class="glass" style="padding:16px;margin-top:16px"> <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:16px"> <div style="text-align:center"><div class="stat-value animate-count" id="stat-deals">10,247</div><div class="stat-label">Сделок заÑиÑено</div></div> <div style="text-align:center"><div class="stat-value animate-count" id="stat-amount">$12.4M</div><div class="stat-label">ÐÑедоÑвÑаÑено поÑеÑÑ</div></div> <div style="text-align:center"><div class="stat-value animate-count" id="stat-success">99.97%</div><div class="stat-label">УÑпеÑнÑÑ
Ñделок</div></div> </div> </div> <div class="glass" style="padding:20px;margin-top:16px"> <h3 style="font-size:16px;font-weight:600;margin-bottom:16px;text-align:center" class="accent">â¡ Ðак пÑоÑ
Ð¾Ð´Ð¸Ñ Ñделка</h3> <div> <div style="display:flex;gap:12px;align-items:flex-start;margin-bottom:12px"> <div style="width:32px;height:32px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;color:#000;border-radius:50%" class="accent-bg">1</div> <div style="flex:1"><div style="font-size:14px;font-weight:600">ÐниÑиаÑÐ¾Ñ Ð·Ð°Ð¿Ð¾Ð»Ð½ÑÐµÑ ÑÑловиÑ</div><div style="font-size:12px;color:rgba(255,255,255,.6)">РолÑ, пÑедмеÑ, ÑÑмма, ÑÑоки, конÑакÑÑ</div><div style="font-size:12px;font-weight:600;margin-top:4px" class="accent">â¡ 30 Ñек</div></div> </div> <div style="display:flex;gap:12px;align-items:flex-start;margin-bottom:12px"> <div style="width:32px;height:32px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;color:#000;border-radius:50%" class="accent-bg">2</div> <div style="flex:1"><div style="font-size:14px;font-weight:600">ÐÑиглаÑÐ°ÐµÑ ÐºÐ¾Ð½ÑÑагенÑа ÑеÑез MAX</div><div style="font-size:12px;color:rgba(255,255,255,.6)">ÐонÑÑÐ°Ð³ÐµÐ½Ñ Ð²Ð¸Ð´Ð¸Ñ ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ ÑоглаÑÑÐµÑ ÐºÐ°Ð¶Ð´Ð¾Ðµ</div><div style="font-size:12px;font-weight:600;margin-top:4px" class="accent">â¡ 1-2 мин</div></div> </div> <div style="display:flex;gap:12px;align-items:flex-start"> <div style="width:32px;height:32px;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-weight:700;font-size:14px;color:#000;border-radius:50%" class="accent-bg">3</div> <div style="flex:1"><div style="font-size:14px;font-weight:600">Ðба пиÑÑÑ Ð³Ð°ÑанÑÑ Ð² MAX</div><div style="font-size:12px;color:rgba(255,255,255,.6)">ÐаÑÐ°Ð½Ñ ÑоздаÑÑ Ð¾Ð±Ñий ÑÐ°Ñ Ð¸ запÑÑÐºÐ°ÐµÑ ÑÑкÑоÑ</div><div style="font-size:12px;font-weight:600;margin-top:4px" class="accent">â¡ 30-60 Ñек</div></div> </div> </div> <p style="font-size:10px;color:rgba(255,255,255,.4);text-align:center;margin-top:16px">СÑеднее вÑÐµÐ¼Ñ Ñделки: <strong class="accent">3-7 минÑÑ</strong> Ð´Ð»Ñ ÐºÑипÑÑ â¢ ÐÑ 150 USDT</p> </div> <div class="glass" style="padding:20px;margin-top:16px"> <h3 style="font-size:16px;font-weight:600;margin-bottom:12px;text-align:center" class="accent">ð ТаÑиÑÑ (ÑÐºÐ²Ð¸Ð²Ð°Ð»ÐµÐ½Ñ USDT)</h3> <div style="display:grid;grid-template-columns:repeat(2,1fr);gap:8px"> <div class="glass-light" style="padding:12px;text-align:center"><div style="font-size:20px;font-weight:700" class="accent">15%</div><div style="font-size:12px;color:rgba(255,255,255,.6)">до 1 000</div></div> <div class="glass-light" style="padding:12px;text-align:center"><div style="font-size:20px;font-weight:700" class="accent">12.5%</div><div style="font-size:12px;color:rgba(255,255,255,.6)">1Kâ10K</div></div> <div class="glass-light" style="padding:12px;text-align:center"><div style="font-size:20px;font-weight:700" class="accent">10%</div><div style="font-size:12px;color:rgba(255,255,255,.6)">10Kâ1M</div></div> <div class="glass-light" style="padding:12px;text-align:center"><div style="font-size:20px;font-weight:700" class="accent">7.5%</div><div style="font-size:12px;color:rgba(255,255,255,.6)">ÑвÑÑе 1M</div></div> </div> <p style="font-size:10px;color:rgba(255,255,255,.4);text-align:center;margin-top:12px">ÐинимÑм: <strong class="accent">150 USDT</strong> ⢠Ðез ÑкÑÑÑÑÑ
плаÑежей</p> </div> <div class="glass accent-border" style="padding:20px;margin-top:16px;text-align:center"> <div style="font-size:30px;margin-bottom:8px">ð¤</div> <h3 style="font-size:16px;font-weight:600;margin-bottom:8px">ÐоÑÐ¾Ð²Ñ Ð½Ð°ÑаÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑнÑÑ ÑделкÑ?</h3> <p style="font-size:12px;color:rgba(255,255,255,.6);margin-bottom:16px">ÐÑоÑмление 3-7 минÑÑ â¢ ÐаÑанÑÐ¸Ñ Lloyd's $45M ⢠ÐÑ 150 USDT</p> <button onclick="startQuiz()" class="btn btn-primary animate-glow">â¡ ÐаÑаÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑнÑÑ ÑделкÑ</button> <p style="font-size:10px;color:rgba(255,255,255,.4);margin-top:12px">ЧеÑез меÑÑÐµÐ½Ð´Ð¶ÐµÑ MAX ⢠Ðез ÑегиÑÑÑаÑии<
1352/p> </div> <div class="glass" style="padding:16px;margin-top:16px"> <h3 style="font-size:14px;font-weight:600;margin-bottom:12px;text-align:center" class="accent">ð¡ï¸ 7 ÑÑовней заÑиÑÑ Ñделки</h3> <div class="shield-grid"> <div class="shield-item"><div class="shield-number">1</div><div style="font-size:10px;font-weight:600">AI-KYC</div><div style="font-size:8px;color:rgba(255,255,255,.4)">10 Ñек</div></div> <div class="shield-item"><div class="shield-number">2</div><div style="font-size:10px;font-weight:600">AML/KYT</div><div style="font-size:8px;color:rgba(255,255,255,.4)">100+ баз</div></div> <div class="shield-item"><div class="shield-number">3</div><div style="font-size:10px;font-weight:600">Smart</div><div style="font-size:8px;color:rgba(255,255,255,.4)">ÑÑкÑоÑ</div></div> <div class="shield-item"><div class="shield-number">4</div><div style="font-size:10px;font-weight:600">MultiSig</div><div style="font-size:8px;color:rgba(255,255,255,.4)">2/3 + MPC</div></div> <div class="shield-item"><div class="shield-number">5</div><div style="font-size:10px;font-weight:600">Atomic</div><div style="font-size:8px;color:rgba(255,255,255,.4)">пеÑедаÑа</div></div> <div class="shield-item"><div class="shield-number">6</div><div style="font-size:10px;font-weight:600">AI-аÑбиÑÑаж</div><div style="font-size:8px;color:rgba(255,255,255,.4)">⤠2 ÑаÑа</div></div> <div class="shield-item"><div class="shield-number">7</div><div style="font-size:10px;font-weight:600">Lloyd's</div><div style="font-size:8px;color:rgba(255,255,255,.4)">$45M</div></div> <div class="shield-item" style="background:rgba(48,209,88,.08);border-color:rgba(48,209,88,.3)"><div style="font-size:14px;margin-bottom:2px">ð</div><div style="font-size:10px;font-weight:600" class="accent">Forbes</div><div style="font-size:8px;color:rgba(255,255,255,.4)">Crypto 2026</div></div> </div> </div> <div class="glass" style="padding:20px;margin-top:16px"> <h3 style="font-size:16px;font-weight:600;margin-bottom:16px;text-align:center" class="accent">ð¦ ЧÑо заÑиÑаем</h3> <div style="display:grid;grid-template-columns:repeat(2,1fr);gap:12px"> <div class="glass-light" style="padding:12px"><div style="font-size:20px;margin-bottom:4px">ðª</div><div style="font-size:12px;font-weight:600">ÐÑипÑовалÑÑа ТÐÐ-25</div><div style="font-size:10px;color:rgba(255,255,255,.4)">BTC, ETH, USDT, TON</div></div> <div class="glass-light" style="padding:12px"><div style="font-size:20px;margin-bottom:4px">ð¨</div><div style="font-size:12px;font-weight:600">NFT и Digital Art</div><div style="font-size:10px;color:rgba(255,255,255,.4)">CryptoPunks, BAYC</div></div> <div class="glass-light" style="padding:12px"><div style="font-size:20px;margin-bottom:4px">âï¸</div><div style="font-size:12px;font-weight:600">Telegram-акÑивÑ</div><div style="font-size:10px;color:rgba(255,255,255,.4)">ÐÐ°Ð½Ð°Ð»Ñ 10K-5M</div></div> <div class="glass-light" style="padding:12px"><div style="font-size:20px;margin-bottom:4px">ð»</div><div style="font-size:12px;font-weight:600">IT-Ð±Ð¸Ð·Ð½ÐµÑ Ð¸ SaaS</div><div style="font-size:10px;color:rgba(255,255,255,.4)">ÐÑоекÑÑ, доменÑ</div></div> <div class="glass-light" style="padding:12px"><div style="font-size:20px;margin-bottom:4px">ð¢</div><div style="font-size:12px;font-weight:600">RWA (ÑеалÑнÑе акÑивÑ)</div><div style="font-size:10px;color:rgba(255,255,255,.4)">ÐедвижимоÑÑÑ, доли</div></div> <div class="glass-light" style="padding:12px"><div style="font-size:20px;margin-bottom:4px">ðµ</div><div style="font-size:12px;font-weight:600">ФиаÑнÑе Ñделки</div><div style="font-size:10px;color:rgba(255,255,255,.4)">USD, EUR, RUB</div></div> <div class="glass-light" style="padding:12px"><div style="font-size:20px;margin-bottom:4px">ð</div><div style="font-size:12px;font-weight:600">VIP OTC Ð¾Ñ $100K</div><div style="font-size:10px;color:rgba(255,255,255,.4)">Ðо $50M+</div></div> <div class="glass-light" style="padding:12px"><div style="font-size:20px;margin-bottom:4px">ð</div><div style="font-size:12px;font-weight:600">ÐаÑенÑÑ Ð¸ ÐÐ</div><div style="font-size:10px;color:rgba(255,255,255,.4)">ТоваÑнÑе знаки</div></div> </div> </div> <div class="glass" style="padding:20px;margin-top:16px"> <h3 style="font-size:16px;font-weight:600;margin-bottom:16px;text-align:center" class="accent">ð ÐÑовеÑÑÑе Ð½Ð°Ñ â ÑеалÑнÑе оÑзÑвÑ</h3> <div style="margin-bottom:12px"> <a href="https://guarantor.su" target="_blank" rel="noopener" class="glass-light" style="padding:12px;display:flex;align-items:center;gap:12px;text-decoration:none;color:#fff;margin-bottom:8px"> <div style="width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:18px;background:rgba(48,209,88,.15);color:#30D158">ð</div> <div style="flex:1"><div style="font-size:14px;font-weight:600">guarantor.su</div><div style="font-size:12px;color:rgba(255,255,255,.6)">ÐÑиÑиалÑнÑй ÑÐ°Ð¹Ñ â¢ SSL ⢠WHOIS</div></div> <div style="color:rgba(255,255,255,.4)">â</div> </a> </div> <h4 style="font-size:14px;font-weight:600;margin-bottom:8px;color:rgba(255,255,255,.8)">â Ðде ÑмоÑÑеÑÑ Ð¾ÑзÑвÑ:</h4> <div> <a href="https://yandex.ru/maps/157/moscow/search/guarantor.su" target="_blank" rel="noopener" class="glass-light" style="padding:12px;display:flex;align-items:center;gap:12px;text-decoration:none;color:#fff;margin-bottom:8px"> <div style="width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;background:rgba(255,204,0,.15);color:#FFCC00">Я</div> <div style="flex:1"><div style="font-size:14px;font-weight:600">Ð¯Ð½Ð´ÐµÐºÑ ÐаÑÑÑ / ÐизнеÑ</div><div style="font-size:12px;color:rgba(255,255,255,.6)">РейÑинг и оÑзÑÐ²Ñ ÐºÐ»Ð¸ÐµÐ½Ñов</div></div> <div style="color:rgba(255,255,255,.4)">â</div> </a> <a href="https://www.google.com/search?q=guarantor.su+оÑзÑвÑ" target="_blank" rel="noopener" class="glass-light" style="padding:12px;display:flex;align-items:center;gap:12px;text-decoration:none;color:#fff;margin-bottom:8px"> <div style="width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:18px;font-weight:700;background:rgba(10,132,255,.15);color:#0A84FF">G</div> <div style="flex:1"><div style="font-size:14px;font-weight:600">Google ÐÑзÑвÑ</div><div style="font-size:12px;color:rgba(255,255,255,.6)">ÐоиÑк "guarantor.su оÑзÑвÑ"</div></div> <div style="color:rgba(255,255,255,.4)">â</div> </a> <a href="https://www.trustpilot.com/review/guarantor.su" target="_blank" rel="noopener" class="glass-light" style="padding:12px;display:flex;align-items:center;gap:12px;text-decoration:none;color:#fff"> <div style="width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:18px;background:rgba(48,209,88,.15);color:#30D158">â
</div> <div style="flex:1"><div style="font-size:14px;font-weight:600">Trustpilot</div><div style="font-size:12px;color:rgba(255,255,255,.6)">ÐеждÑнаÑÐ¾Ð´Ð½Ð°Ñ Ð¿Ð»Ð°ÑÑоÑма</div></div> <div style="color:rgba(255,255,255,.4)">â</div> </a> </div> <div style="background:rgba(255,204,0,.08);border:1px solid rgba(255,204,0,.2);border-radius:10px;padding:10px;margin-top:12px"> <div style="font-size:12px;font-weight:600;margin-bottom:4px;color:#FFCC00">ð¡ Ðак ÑмоÑÑеÑÑ Ð¾ÑзÑÐ²Ñ Ð² ЯндекÑе:</div> <div style="font-size:11px;color:rgba(255,255,255,.7);margin-bottom:8px">ÐÑкÑойÑе ÑÐ°Ð¹Ñ <strong style="color:#FFCC00">guarantor.su</strong> в ЯндекÑ.ÐÑаÑзеÑе:</div> <ul style="font-size:11px;color:rgba(255,255,255,.6);list-style:none"> <li style="display:flex;gap:8px;margin-bottom:4px"><span style="color:#FFCC00">â</span>ÐажмиÑе на <strong style="color:#FFCC00">замок ð</strong> Ñлева Ð¾Ñ Ð°Ð´ÑеÑной ÑÑÑоки</li> <li style="display:flex;gap:8px;margin-bottom:4px"><span style="color:#FFCC00">â</span>ÐÑбеÑиÑе <strong style="color:#FFCC00">"ÐодÑобнее о ÑайÑе"</strong></li> <li style="display:flex;gap:8px"><span style="color:#FFCC00">â</span>УвидиÑе <strong style="color:#FFCC00">ÑейÑинг и оÑзÑвÑ</strong> клиенÑов</li> </ul> </div> </div> <div class="glass" style="padding:20px;margin-top:16px"> <h3 style="font-size:16px;font-weight:600;margin-bottom:16px;text-align:center" class="accent">ð Ðам довеÑÑÑÑ</h3> <div style="display:grid;grid-template-columns:repeat(2,1fr);gap:12px"> <div class="glass-light" style="padding:12px;text-align:center"><div class="stat-value">2019</div><div class="stat-label">Ðа ÑÑнке Ñ</div></div> <div class="glass-light" style="padding:12px;text-align:center"><div class="stat-value">0%</div><div class="stat-label">ÐоÑенниÑеÑÑва</div></div> <div class="glass-light" style="padding:12px;text-align:center"><div class="stat-value">$12.4M+</div><div class="stat-label">ÐÑедоÑвÑаÑено поÑеÑÑ</div></div> <div class="glass-light" style="padding:12px;text-align:center"><div class="stat-value">â1</div><div class="stat-label">СÐÐ (Forbes 2026)</div></div> </div> <p style="font-size:10px;color:rgba(255,255,255,.4);text-align:center;margin-top:12px">Ðолее 10 000 ÑÑпеÑнÑÑ
Ñделок ⢠99.97% без ÑпоÑов ⢠РÐÐ ÐнноваÑии<
1352/p> </div> <div style="margin-top:24px;text-align:center"> <button onclick="resetDeal()" style="font-size:12px;color:rgba(255,255,255,.4);background:none;border:none;cursor:pointer;text-decoration:underline">ð ÐаÑаÑÑ Ð·Ð°Ð½Ð¾Ð²Ð¾ (ÑбÑоÑиÑÑ Ð´Ð°Ð½Ð½Ñе)</button> </div> </div> </main> </div> <div id="final-modal" class="bottom-sheet hidden"> <div class="bottom-sheet-overlay" onclick="closeFinalModal()"></div> <div class="bottom-sheet-content"> <div class="bottom-sheet-handle"></div> <div style="padding:24px"> <div style="text-align:center;margin-bottom:24px"> <div style="width:80px;height:80px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 16px" class="accent-bg"> <svg style="width:48px;height:48px;color:#000" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"></path></svg> </div> <h3 style="font-size:24px;font-weight:700;margin-bottom:8px">Сделка подгоÑовлена!</h3> <p style="font-size:14px;color:rgba(255,255,255,.6)" id="final-modal-subtitle">ÐÑпÑавÑÑе заÑÐ²ÐºÑ Ð³Ð°ÑанÑÑ Ð² MAX</p> </div> <div class="glass-light" style="padding:16px;margin-bottom:16px;font-size:14px" id="modal-summary"></div> <div id="agreement-summary-block" class="hidden"></div> <div id="final-buttons"> <button id="btn-max" onclick="contactMax()" class="btn-max" style="margin-bottom:12px">ð¨ ÐÑкÑÑÑÑ MAX и напиÑаÑÑ Ð³Ð°ÑанÑÑ</button> <button id="btn-invite" onclick="inviteCounterparty()" class="btn btn-secondary" style="margin-bottom:12px">ð ÐÑиглаÑиÑÑ ÐºÐ¾Ð½ÑÑагенÑа</button> <p id="btn-invite-hint" style="font-size:12px;text-align:center;color:rgba(255,255,255,.5);margin-bottom:12px">СгенеÑиÑÑÐµÑ ÑÑÑÐ»ÐºÑ Ð´Ð»Ñ Ð¾ÑпÑавки конÑÑагенÑÑ</p> <button onclick="copyDealData()" class="btn btn-secondary">ð СкопиÑоваÑÑ Ð´Ð°Ð½Ð½Ñе Ñделки</button> </div> <div class="max-hint"> <div style="font-size:12px;font-weight:600;margin-bottom:4px;color:#FF3B30">ð± Ðак ÑвÑзаÑÑÑÑ Ñ Ð³Ð°ÑанÑом:</div> <div style="font-size:11px;color:rgba(255,255,255,.7);margin-bottom:8px">1. ÐажмиÑе ÐºÐ½Ð¾Ð¿ÐºÑ Ð²ÑÑе â оÑкÑоеÑÑÑ MAX<br>2. СкопиÑÑйÑе даннÑе Ñделки ниже<br>3. ÐÑÑавÑÑе в ÑÐ°Ñ Ñ Ð³Ð°ÑанÑом</div> <div style="font-size:11px;color:rgba(255,255,255,.7);margin-top:8px"><strong style="color:#FF3B30">СÑÑлка на MAX-пÑоÑÐ¸Ð»Ñ Ð³Ð°ÑанÑа:</strong></div> <div class="max-link-display">https://max.ru/u/f9LHodD0cOKxM9AneUugd9eK_DO3CEW5UX3L1LT8p9xdK_jmZ9lakbDVp1I</div> <div style="font-size:11px;color:rgba(255,255,255,.7);margin-top:8px"><strong style="color:#FF3B30">Ðли по номеÑÑ:</strong> +7 963 916-63-14</div> </div> <div class="max-hint" style="margin-top:16px;background:rgba(255,59,48,.08);border-color:rgba(255,59,48,.3)"> <div style="font-size:12px;font-weight:600;margin-bottom:4px;color:#FF3B30">ð¡ Ðак ÑÑо ÑабоÑаеÑ:</div> <p style="font-size:11px;color:rgba(255,255,255,.7)" id="final-hint-text">1. ÐÑпÑавÑÑе ÑÑÑÐ»ÐºÑ ÐºÐ¾Ð½ÑÑагенÑÑ<br>2. ÐонÑÑÐ°Ð³ÐµÐ½Ñ ÑоглаÑÑÐµÑ ÑÑловиÑ<br>3. Ðба пиÑеÑе гаÑанÑÑ Ð² MAX<br>4. ÐаÑÐ°Ð½Ñ ÑоздаÑÑ Ð¾Ð±Ñий ÑÐ°Ñ Ñделки</p> </div> <button onclick="closeFinalModal()" style="width:100%;color:rgba(255,255,255,.5);font-size:14px;padding:12px;margin-top:16px;background:none;border:none;cursor:pointer">â ÐеÑнÑÑÑÑÑ Ðº ÑедакÑиÑованиÑ</button> </div> </div> </div> <div id="invite-modal" class="bottom-sheet hidden"> <div class="bottom-sheet-overlay" onclick="closeInviteModal()"></div> <div class="bottom-sheet-content"> <div class="bottom-sheet-handle"></div> <div style="padding:24px"> <div style="text-align:center;margin-bottom:20px"> <div style="font-size:40px;margin-bottom:8px">ð</div> <h3 style="font-size:20px;font-weight:700;margin-bottom:4px">СÑÑлка Ð´Ð»Ñ ÐºÐ¾Ð½ÑÑагенÑа</h3> <p style="font-size:14px;color:rgba(255,255,255,.6)">ÐÑпÑавÑÑе ÑÑÑ ÑÑÑÐ»ÐºÑ Ð² MAX</p> </div> <div class="glass-light" style="padding:16px;margin-bottom:16px"> <div style="font-size:12px;color:rgba(255,255,255,.6);margin-bottom:8px">СÑÑлка Ñделки:</div> <div style="background:rgba(0,0,0,.5);border-radius:8px;padding:12px;font-family:monospace;font-size:12px;word-break:break-all;user-select:all" class="accent" id="invite-link-display"></div> </div> <div> <button onclick="copyInviteLink()" class="btn btn-primary" style="margin-bottom:12px">ð СкопиÑоваÑÑ ÑÑÑлкÑ</button> <button onclick="shareInviteLink()" class="btn btn-secondary">ð¤ ÐоделиÑÑÑÑ ÑеÑез...</button> </div> <div class="max-hint" style="margin-top:16px;background:rgba(255,59,48,.08);border-color:rgba(255,59,48,.3)"> <div style="font-size:12px;font-weight:600;margin-bottom:4px;color:#FF3B30">ð¡ ЧÑо пÑоизойдÑÑ:</div> <p style="font-size:11px;color:rgba(255,255,255,.7)">ÐонÑÑÐ°Ð³ÐµÐ½Ñ Ð¾ÑкÑÐ¾ÐµÑ ÑÑÑÐ»ÐºÑ â ÑÐ²Ð¸Ð´Ð¸Ñ ÑÑÐ»Ð¾Ð²Ð¸Ñ â ÑоглаÑÑÐµÑ ÐºÐ°Ð¶Ð´Ð¾Ðµ â напиÑÐµÑ Ð³Ð°ÑанÑÑ Ð² MAX Ñо Ñвоей заÑвкой. ÐаÑÐ°Ð½Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð¾Ð±Ðµ заÑвки и ÑоздаÑÑ Ð¾Ð±Ñий ÑаÑ.</p> </div> <button onclick="closeInviteModal()" style="width:100%;color:rgba(255,255,255,.5);font-size:14px;padding:12px;margin-top:16px;background:none;border:none;cursor:pointer">â Ðазад</button> </div> </div> </div> </body> </html> <!-- nominify end --> </div> </div> </div> </div> <div id="rec2371177731" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin -->
1352<script> 1353(function(){ 1354'use strict'; 1355 1356// ===== MAX-ÐÐÐТÐÐТЫ ===== 1357const MAX_URL = 'https://max.ru/u/f9LHodD0cOKxM9AneUugd9eK_DO3CEW5UX3L1LT8p9xdK_jmZ9lakbDVp1I'; 1358const MAX_PHONE = '+79639166314'; 1359const MAX_PHONE_FORMATTED = '+7 963 916-63-14'; 1360const MIN_DEAL_USDT = 150; 1361 1362// ===== ÐÐÐЮТЫ ===== 1363const currencies = [ 1364 {code:'USDT', name:'Tether', symbol:'USDT', icon:'ðµ', color:'#26A17B', rate:1, group:'popular'}, 1365 {code:'BTC', name:'Bitcoin', symbol:'â¿', icon:'â¿', color:'#F7931A', rate:105000, group:'popular', cgId:'bitcoin'}, 1366 {code:'ETH', name:'Ethereum', symbol:'Î', icon:'Î', color:'#627EEA', rate:2600, group:'popular', cgId:'ethereum'}, 1367 {code:'TON', name:'Toncoin', symbol:'TON', icon:'ð', color:'#0098EA', rate:5.2, group:'popular', cgId:'the-open-network'}, 1368 {code:'BNB', name:'BNB', symbol:'BNB', icon:'ð¶', color:'#F0B90B', rate:620, group:'crypto', cgId:'binancecoin'}, 1369 {code:'SOL', name:'Solana', symbol:'SOL', icon:'â', color:'#9945FF', rate:170, group:'crypto', cgId:'solana'}, 1370 {code:'XRP', name:'Ripple', symbol:'XRP', icon:'â', color:'#23292F', rate:2.35, group:'crypto', cgId:'ripple'}, 1371 {code:'DOGE', name:'Dogecoin', symbol:'Ã', icon:'ð', color:'#C2A633', rate:0.22, group:'crypto', cgId:'dogecoin'}, 1372 {code:'ADA', name:'Cardano', symbol:'â³', icon:'â³', color:'#0033AD', rate:0.78, group:'crypto', cgId:'cardano'}, 1373 {code:'TRX', name:'TRON', symbol:'TRX', icon:'â¡', color:'#FF0013', rate:0.28, group:'crypto', cgId:'tron'}, 1374 {code:'AVAX', name:'Avalanche', symbol:'AVAX', icon:'ðº', color:'#E84142', rate:36, group:'crypto', cgId:'avalanche-2'}, 1375 {code:'SHIB', name:'Shiba Inu', symbol:'SHIB', icon:'ð¶', color:'#FFA409', rate:0.000018, group:'crypto', cgId:'shiba-inu'}, 1376 {code:'DOT', name:'Polkadot', symbol:'DOT', icon:'â', color:'#E6007A', rate:7.5, group:'crypto', cgId:'polkadot'}, 1377 {code:'POL', name:'Polygon', symbol:'POL', icon:'⬡', color:'#8247E5', rate:0.48, group:'crypto', cgId:'matic-network'}, 1378 {code:'LTC', name:'Litecoin', symbol:'Å', icon:'Å', color:'#BFBBBB', rate:88, group:'crypto', cgId:'litecoin'}, 1379 {code:'UNI', name:'Uniswap', symbol:'UNI', icon:'ð¦', color:'#FF007A', rate:11.5, group:'crypto', cgId:'uniswap'}, 1380 {code:'LINK', name:'Chainlink', symbol:'LINK', icon:'ð', color:'#2A5ADA', rate:17.5, group:'crypto', cgId:'chainlink'}, 1381 {code:'NEAR', name:'NEAR', symbol:'NEAR', icon:'â', color:'#000000', rate:5.2, group:'crypto', cgId:'near'}, 1382 {code:'XLM', name:'Stellar', symbol:'XLM', icon:'â¡', color:'#000000', rate:0.38, group:'crypto', cgId:'stellar'}, 1383 {code:'BCH', name:'Bitcoin Cash', symbol:'BCH', icon:'É', color:'#0AC18E', rate:450, group:'crypto', cgId:'bitcoin-cash'}, 1384 {code:'RUB', name:'РоÑÑийÑкий ÑÑблÑ', symbol:'â½', icon:'â½', color:'#0033A0', rate:1/92.5, group:'fiat'}, 1385 {code:'USD', name:'ÐÐ¾Ð»Ð»Ð°Ñ Ð¡Ð¨Ð', symbol:'$', icon:'$', color:'#85BB65', rate:1, group:'fiat'}, 1386 {code:'EUR', name:'ÐвÑо', symbol:'â¬', icon:'â¬', color:'#003399', rate:1.08, group:'fiat'}, 1387 {code:'CNY', name:'ÐиÑайÑкий ÑанÑ', symbol:'Â¥', icon:'Â¥', color:'#DE2910', rate:0.138, group:'fiat'}, 1388 {code:'TRY', name:'ТÑÑеÑÐºÐ°Ñ Ð»Ð¸Ñа', symbol:'âº', icon:'âº', color:'#E30A17', rate:0.031, group:'fiat'}, 1389 {code:'AED', name:'ÐиÑÑ Ð°Ð¼ ÐÐÐ', symbol:'د.Ø¥', icon:'د.Ø¥', color:'#00732F', rate:0.27, group:'fiat'}, 1390 {code:'GBP', name:'ФÑÐ½Ñ ÑÑеÑлингов', symbol:'£', icon:'£', color:'#012169', rate:1.27, group:'fiat'} 1391]; 1392 1393const groupNames = {popular:'â ÐопÑлÑÑнÑе', crypto:'ðª ÐÑипÑовалÑÑÑ', fiat:'ðµ ФиаÑнÑе валÑÑÑ'}; 1394 1395const dealCategories = [ 1396 {id:'crypto', name:'ÐÑипÑовалÑÑа ТÐÐ-25', icon:'ðª', description:'BTC, ETH, USDT, TON, SOL и дÑ.'}, 1397 {id:'nft', name:'NFT и Digital Art', icon:'ð¨', description:'CryptoPunks, BAYC, Azuki'}, 1398 {id:'telegram', name:'Telegram-каналÑ', icon:'âï¸', description:'ÐÐ°Ð½Ð°Ð»Ñ 10K-5M, боÑÑ, гÑÑппÑ'}, 1399 {id:'it_business', name:'IT-Ð±Ð¸Ð·Ð½ÐµÑ Ð¸ SaaS', icon:'ð»', description:'ÐÑоекÑÑ, доменÑ, MRR'}, 1400 {id:'rwa', name:'RWA (ÑеалÑнÑе акÑивÑ)', icon:'ð¢', description:'ÐедвижимоÑÑÑ, доли, золоÑо'}, 1401 {id:'fiat', name:'ФиаÑнÑе Ñделки', icon:'ðµ', description:'USD, EUR, RUB, CNY, GBP'}, {id:'otc', name:'VIP OTC Ð¾Ñ $100K', icon:'ð', description:'Ðо $50M+, пеÑÑоналÑнÑй менеджеÑ'}, 1402 {id:'patent', name:'ÐаÑенÑÑ Ð¸ ÐÐ', icon:'ð', description:'ТоваÑнÑе знаки, лиÑензии'}, 1403 {id:'other', name:'ÐÑÑгое', icon:'ð¦', description:'ÐнÑе акÑивÑ'} 1404]; 1405 1406const DEFAULT_STATE = { 1407 role: null, category: null, details: '', amount: 0, currency: 'USDT', 1408 commissionPayer: 'buyer', deadline: '', counterparty: '', 1409 myMaxContact: '', 1410 isCounterparty: false, initiatorUsername: '', 1411 agreements: {category:'pending', details:'pending', amount:'pending', currency:'pending', commissionPayer:'pending', deadline:'pending'}, 1412 proposals: {category:null, details:null, amount:null, currency:null, commissionPayer:null, deadline:null},
1413 comment: '', 1414 confirmations: {agreement:false, commission:false, amounts:false, terms:false, chat:false} 1415}; 1416 1417let state = {...DEFAULT_STATE, 1418 agreements: {...DEFAULT_STATE.agreements}, 1419 proposals: {...DEFAULT_STATE.proposals}, 1420 confirmations: {...DEFAULT_STATE.confirmations}}; 1421 1422const STORAGE_KEY = 'max_deal_state_v4'; 1423 1424function handleUrlParams() { 1425 const params = new URLSearchParams(window.location.search); 1426 const dealParam = params.get('deal'); 1427 if (!dealParam) return false; 1428 1429 try { 1430 let json; 1431 try { 1432 const binString = atob(dealParam); 1433 const bytes = Uint8Array.from(binString, c => c.charCodeAt(0)); 1434 json = new TextDecoder().decode(bytes); 1435 } catch(e) { 1436 json = decodeURIComponent(dealParam); 1437 } 1438 const dec = JSON.parse(json); 1439 1440 try { localStorage.removeItem(STORAGE_KEY + '_cp'); } catch(e) {} 1441 1442 state = { 1443 ...DEFAULT_STATE, ...dec, 1444 isCounterparty: true, 1445 role: dec.role === 'buyer' ? 'seller' : 'buyer', 1446 initiatorUsername: dec.initiatorContact || 'полÑзоваÑелÑ', 1447 counterparty: dec.initiatorContact || '', 1448 myMaxContact: '', 1449 agreements: {category:'pending', details:'pending', amount:'pending', currency:'pending', commissionPayer:'pending', deadline:'pending'}, 1450 proposals: {...DEFAULT_STATE.proposals}, confirmations: {...DEFAULT_STATE.confirmations}, 1451 comment: '' 1452 }; 1453 1454 document.getElementById('counterparty-banner').classList.remove('hidden'); 1455 document.getElementById('start-screen').classList.add('hidden'); 1456 document.getElementById('progress-container').classList.remove('hidden'); 1457 currentStep = 2; 1458 renderStep(); 1459 showToast('ð¤ ÐÑиглаÑение Ð¾Ñ ÐºÐ¾Ð½ÑÑагенÑа. СоглаÑÑйÑе ÑÑловиÑ.'); 1460 return true; 1461 } catch(e) { 1462 console.warn('Decode error:', e); 1463 showToast('â ÐÑибка загÑÑзки даннÑÑ Ñделки'); 1464 return false; 1465 } 1466} 1467 1468try { 1469 const saved = localStorage.getItem(STORAGE_KEY); 1470 if (saved && !state.isCounterparty) { 1471 const p = JSON.parse(saved); 1472 state = { 1473 ...DEFAULT_STATE, ...p, 1474 agreements: {...DEFAULT_STATE.agreements, ...(p.agreements || {})}, 1475 proposals: {...DEFAULT_STATE.proposals, ...(p.proposals || {})}, 1476 confirmations: {...DEFAULT_STATE.confirmations, ...(p.confirmations || {})} 1477 }; 1478 if (!state.commissionPayer) state.commissionPayer = 'buyer'; 1479 } 1480} catch(e) {} 1481 1482function saveState() { 1483 if (state.isCounterparty) return; 1484 try { localStorage.setItem(STORAGE_KEY, JSON.stringify(state)); } catch(e) {} 1485} 1486 1487window.resetDeal = function() { 1488 if (!confirm('СбÑоÑиÑÑ Ð²Ñе даннÑе Ñделки?')) return; 1489 state = {...DEFAULT_STATE, 1490 agreements: {...DEFAULT_STATE.agreements}, 1491 proposals: {...DEFAULT_STATE.proposals}, 1492 confirmations: {...DEFAULT_STATE.confirmations}}; 1493 try { localStorage.removeItem(STORAGE_KEY); } catch(e) {} 1494 currentStep = 0; 1495 document.getElementById('quiz-container').classList.add('hidden'); 1496 document.getElementById('progress-container').classList.add('hidden'); 1497 document.getElementById('start-screen').classList.remove('hidden'); 1498 document.getElementById('counterparty-banner').classList.add('hidden'); 1499 showToast('â ÐаннÑе ÑбÑоÑенÑ'); window.scrollTo({top: 0, behavior: 'smooth'}); 1500}; 1501 1502let ratesLastUpdated = null; 1503let ratesSource = 'fallback'; 1504 1505async function fetchLiveRates() { 1506 try { 1507 const ids = currencies.filter(c => c.cgId).map(c => c.cgId).join(','); 1508 const ctrl = new AbortController(); 1509 const timeout = setTimeout(() => ctrl.abort(), 5000); 1510 const r = await fetch(`https://api.coingecko.com/api/v3/simple/price?ids=${ids}&vs_currencies=usd`, {signal: ctrl.signal}); 1511 clearTimeout(timeout); 1512 if (!r.ok) throw new Error('API'); 1513 const d = await r.json(); 1514 currencies.forEach(c => { 1515 if (c.cgId && d[c.cgId]?.usd) c.rate = d[c.cgId].usd; 1516 }); 1517 ratesLastUpdated = Date.now(); 1518 ratesSource = 'live'; 1519 try { localStorage.setItem('max_rates_cache_v3', JSON.stringify({time: ratesLastUpdated, rates: currencies.map(c => ({code: c.code, rate: c.rate}))})); } catch(e) {} 1520 if (currentStep === 3) updateAmount(state.amount); 1521 } catch(e) { 1522 try { 1523 const cached = localStorage.getItem('max_rates_cache_v3'); 1524 if (cached) { 1525 const {time, rates} = JSON.parse(cached);
1526 rates.forEach(r => { 1527 const cur = currencies.find(x => x.code === r.code); 1528 if (cur) cur.rate = r.rate; 1529 }); 1530 ratesLastUpdated = time; 1531 ratesSource = 'cached'; 1532 } else { 1533 ratesSource = 'fallback'; 1534 } 1535 } catch(e) { 1536 ratesSource = 'fallback'; 1537 } 1538 } 1539} 1540 1541function getCommissionRate(a) { 1542 if (a <= 1000) return 0.15; 1543 if (a <= 10000) return 0.125; 1544 if (a <= 1000000) return 0.1; 1545 return 0.075; 1546} 1547 1548function formatNumber(n) { if (n === 0) return '0'; 1549 if (n < 0.0001 && n > 0) return n.toFixed(8); 1550 if (n < 0.01 && n > 0) return n.toFixed(6); 1551 if (n < 1 && n > 0) return n.toFixed(4); 1552 return n.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$& ').replace('.', ','); 1553} 1554 1555function calculateCommissionData(a, c) { 1556 const cur = currencies.find(x => x.code === c) || currencies[0]; 1557 const u = a * cur.rate; 1558 const r = getCommissionRate(u); 1559 const com = a * r; 1560 return {currency: cur, amountInUSDT: u, commissionRate: r, commission: com}; 1561} 1562 1563function calculateFinalSums(a, c, p) { 1564 let b = a, s = a; 1565 if (p === 'buyer') b = a + c; 1566 else if (p === 'seller') s = a - c; 1567 else if (p === 'half') { b = a + (c/2); s = a - (c/2); } 1568 return {buyerPays: b, sellerGets: s}; 1569} 1570 1571function getPayerLabel(p) { 1572 if (p === 'buyer') return 'ÐокÑпаÑÐµÐ»Ñ 100%'; 1573 if (p === 'seller') return 'ÐÑÐ¾Ð´Ð°Ð²ÐµÑ 100%'; 1574 return '50/50 пополам'; 1575} 1576 1577function getPayerIcon(p) { 1578 if (p === 'buyer') return 'ð'; 1579 if (p === 'seller') return 'ð¼'; 1580 return 'ð¤'; 1581} 1582 1583let openDropdownId = null; 1584 1585function createCurrencySelector(id, init, onChange, disabled = false) { 1586 const container = document.getElementById(id); 1587 if (!container) return; 1588 let sel = init; 1589 1590 function render() { 1591 const cur = currencies.find(x => x.code === sel) || currencies[0]; 1592 container.innerHTML = ` 1593 <div class="currency-selector" id="${id}-wrapper"> <button type="button" class="currency-trigger" onclick="${disabled ? '' : `window._toggleDropdown('${id}')`}" ${disabled ? 'disabled' : ''}> <div style="display:flex;align-items:center;gap:12px"> <div style="width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:bold;background:${cur.color}20;color:${cur.color}">${cur.icon}</div> <div> <div style="font-size:14px;font-weight:600">${cur.code}</div> <div style="font-size:12px;color:rgba(255,255,255,.6)">${cur.name}</div> </div> </div> 1594 ${!disabled ? '<svg width="16" height="16" fill="none" stroke="rgba(255,255,255,.4)" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/></svg>' : ''} 1595 </button> 1596 ${!disabled ? `<div class="currency-dropdown hidden" id="${id}-dropdown"></div>` : ''} 1597 </div>`; 1598 if (!disabled) renderDD(); 1599 } 1600 1601 function renderDD(filter = '') { 1602 const dd = document.getElementById(`${id}-dropdown`); 1603 if (!dd) return; 1604 const fl = filter.toLowerCase(); 1605 const groups = ['popular', 'crypto', 'fiat']; 1606 let html = `<div style="padding:8px;border-bottom:1px solid rgba(255,255,255,.1)"> <input type="text" placeholder="ð ÐоиÑк..." value="${filter}" 1607 oninput="window._filterCurrency('${id}', this.value)" 1608 onclick="event.stopPropagation()" 1609 style="width:100%;padding:8px 12px;border-radius:8px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);font-size:14px;color:#fff"> </div>`; 1610 groups.forEach(g => { 1611 const gc = currencies.filter(x => x.group === g && (filter === '' || x.code.toLowerCase().includes(fl) || x.name.toLowerCase().includes(fl))); 1612 if (gc.length > 0) { 1613 html += `<div style="padding:8px 12px 4px;font-size:11px;color:rgba(255,255,255,.4);font-weight:600;text-transform:uppercase">${groupNames[g]}</div>`; 1614 gc.forEach(x => { 1615 const is = x.code === sel; 1616 let rt = ''; 1617 if (x.code === 'RUB') rt = '92.5 â½/USDT'; 1618 else if (x.rate !== 1) rt = `$${x.rate < 0.001 ? x.rate.toExponential(2) : x.rate.toFixed(x.rate < 1 ? 4 : 2)}`; 1619 else rt = '1:1'; 1620 html += `<div style="padding:10px 12px;cursor:pointer;display:flex;align-items:center;gap:12px;${is ? 'background:rgba(48,209,88,.1);color:#30D158' : ''}" 1621 onclick="event.stopPropagation();window._selectCurrency('${id}', '${x.code}')"> <div style="width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:14px;font-weight:bold;background:${x.color}20;color:${x.color}">${x.icon}</div> <div style="flex:1"><div style="font-size:14px;font-weight:600">${x.code}</div><div style="font-size:12px;color:rgba(255,255,255,.6)">${x.name}</div></div> <div style="font-size:11px;color:rgba(255,255,255,.4)">${rt}</div> </div>`; 1622 }); 1623 } 1624 }); 1625 dd.innerHTML = html; 1626 } 1627 1628 window._toggleDropdown = function(i) { 1629 const dd = document.getElementById(`${i}-dropdown`); 1630 if (!dd) return; 1631 const wasHidden = dd.classList.contains('hidden'); 1632 document.querySelectorAll('.currency-dropdown').forEach(d => d.classList.add('hidden')); 1633 if (wasHidden) { dd.classList.remove('hidden'); 1634 openDropdownId = i; 1635 renderDD(); 1636 } else { 1637 dd.classList.add('hidden'); 1638 openDropdownId = null; 1639 } 1640 }; 1641 1642 window._selectCurrency = function(i, code) { 1643 sel = code; 1644 render(); 1645 onChange(code); 1646 const dd = document.getElementById(`${i}-dropdown`); 1647 if (dd) dd.classList.add('hidden'); 1648 openDropdownId = null; 1649 }; 1650 1651 window._filterCurrency = function(i, f) { renderDD(f); }; 1652 1653 render(); 1654} 1655 1656document.addEventListener('click', e => { 1657 if (openDropdownId && !e.target.closest('.currency-selector')) { 1658 const dd = document.getElementById(`${openDropdownId}-dropdown`); 1659 if (dd) dd.classList.add('hidden'); 1660 openDropdownId = null; 1661 } 1662}); 1663 1664let currentStep = 0; 1665const totalSteps = 7; 1666 1667window.startQuiz = function() { 1668 document.getElementById('start-screen').classList.add('hidden'); 1669 document.getElementById('progress-container').classList.remove('hidden'); 1670 currentStep = 1; 1671 renderStep(); 1672 window.scrollTo({top: 0, behavior: 'smooth'}); 1673}; 1674 1675function updateProgress() { 1676 const p = Math.round((currentStep / totalSteps) * 100); 1677 document.getElementById('step-text').textContent = `Шаг ${currentStep} из ${totalSteps}`; 1678 document.getElementById('step-percent').textContent = `${p}%`; 1679 document.getElementById('progress-bar').style.width = `${p}%`; 1680} 1681 1682function renderNavButtons(showBack = true, showNext = true) { const nextText = state.isCounterparty ? 'СоглаÑоваÑÑ â' : 'Ðалее â'; 1683 const btnClass = state.role === 'buyer' ? 'btn-buyer' : (state.role === 'seller' ? 'btn-seller' : 'btn-primary'); 1684 return `<div class="sticky-nav"> <div style="display:flex;gap:12px;max-width:640px;margin:0 auto"> 1685 ${showBack ? `<button onclick="prevStep()" class="btn btn-secondary" style="flex:1">â Ðазад</button>` : '<div style="flex-1"></div>'} 1686 ${showNext ? `<button onclick="nextStep()" class="btn ${btnClass}" style="flex:1">${nextText}</button>` : ''} 1687 </div> </div>`; 1688} 1689
1690function renderStep() { 1691 updateProgress(); 1692 const c = document.getElementById('quiz-container'); 1693 c.classList.remove('hidden'); 1694 switch(currentStep) { 1695 case 1: renderStep1(); break; 1696 case 2: renderStep2(); break; 1697 case 3: renderStep3(); break; 1698 case 4: renderStep4(); break; 1699 case 5: renderStep5(); break; 1700 case 6: renderStep6(); break; 1701 case 7: renderStep7(); break; 1702 } 1703 saveState(); 1704 setTimeout(() => { 1705 const progressContainer = document.getElementById('progress-container'); 1706 if (progressContainer) { 1707 window.scrollTo({top: progressContainer.offsetTop - 80, behavior: 'smooth'}); 1708 } 1709 }, 100); 1710} 1711 1712function renderStep1() { 1713 document.getElementById('quiz-container').innerHTML = ` 1714 <div class="animate-slide-in"> <h3 style="font-size:20px;font-weight:700;margin-bottom:8px">ÐаÑа ÑÐ¾Ð»Ñ Ð² Ñделке</h3> <p style="font-size:14px;color:rgba(255,255,255,.6);margin-bottom:20px">ÐÑбеÑиÑе, кем Ð²Ñ Ð²ÑÑÑÑпаеÑе</p> <div style="display:flex;flex-direction:column;gap:12px"> <div class="card ${state.role === 'buyer' ? 'card-selected' : ''}" onclick="selectRole('buyer')"> <div style="display:flex;align-items:center;gap:16px"> <div style="width:56px;height:56px;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:24px;flex-shrink:0" class="buyer-bg">ð</div> <div style="flex:1"> <div style="font-size:18px;font-weight:700">ÐокÑпаÑелÑ</div> <div style="font-size:14px;color:rgba(255,255,255,.6)">ХоÑÑ ÐºÑпиÑÑ Ð°ÐºÑив безопаÑно</div> </div> </div> </div> <div class="card ${state.role === 'seller' ? 'card-selected' : ''}" onclick="selectRole('seller')"> <div style="display:flex;align-items:center;gap:16px"> <div style="width:56px;height:56px;border-radius:16px;display:flex;align-items:center;justify-content:center;font-size:24px;flex-shrink:0" class="seller-bg">ð¼</div> <div style="flex:1"> <div style="font-size:18px;font-weight:700">ÐÑодавеÑ</div> <div style="font-size:14px;color:rgba(255,255,255,.6)">ХоÑÑ Ð¿ÑодаÑÑ Ð°ÐºÑив безопаÑно</div> </div> </div> </div> </div> 1715 ${renderNavButtons(true, false)} 1716 </div>`; 1717} 1718 1719window.selectRole = function(r) { 1720 state.role = r; 1721 saveState(); 1722 renderStep(); 1723 setTimeout(() => nextStep(), 300); 1724}; 1725
1726function renderStep2() { 1727 const cp = state.isCounterparty; 1728 const cat = dealCategories.find(c => c.id === state.category); 1729 1730 if (cp) { 1731 const ag = state.agreements.category === 'agreed'; 1732 const pr = state.agreements.category === 'proposed'; 1733 1734 document.getElementById('quiz-container').innerHTML = ` 1735 <div class="animate-slide-in"> <h3 style="font-size:20px;font-weight:700;margin-bottom:8px">ð¤ СоглаÑование: ÐÑÐµÐ´Ð¼ÐµÑ Ñделки</h3> <p style="font-size:14px;color:rgba(255,255,255,.6);margin-bottom:16px">ÐниÑиаÑÐ¾Ñ ${state.initiatorUsername} пÑедлагаеÑ:</p> <div class="glass-light" style="padding:16px;margin-bottom:16px;background:rgba(10,132,255,.08);border:1px solid rgba(10,132,255,.2)"> <div style="font-size:12px;color:#0A84FF;margin-bottom:4px">ð¤ ÐÑедложение иниÑиаÑоÑа:</div> <div style="display:flex;align-items:center;gap:12px"> <div style="font-size:24px">${cat?.icon || 'ð¦'}</div> <div> <div style="font-weight:600">${cat?.name || 'Ðе вÑбÑано'}</div> <div style="font-size:12px;color:rgba(255,255,255,.6);margin-top:4px">${state.details || state.proposals.details || 'Ðе Ñказано'}</div> </div> </div> </div> <div style="font-size:14px;font-weight:600;margin-bottom:8px">ÐаÑе ÑеÑение:</div> <div class="agree-toggle"> <button class="agree-btn ${ag ? 'agree-btn-agreed' : ''}" onclick="setAgreement('category', 'agreed')"> 1736 â СоглаÑен<br><span style="font-size:12px;font-weight:400">ÐÑинÑÑÑ ÐºÐ°Ðº еÑÑÑ</span> </button>
1736 <button class="agree-btn ${pr ? 'agree-btn-proposed' : ''}" onclick="setAgreement('category', 'proposed')"> 1737 â ï¸ ÐÑÐµÐ´Ð»Ð°Ð³Ð°Ñ ÑвоÑ<br><span style="font-size:12px;font-weight:400">ÐзмениÑÑ ÑÑловие</span> </button> </div> 1738 1739 ${pr ? ` 1740 <div style="margin-top:12px;padding:12px;border-radius:12px;background:rgba(255,159,10,.08);border:1px solid rgba(255,159,10,.2)"> <div style="font-size:12px;color:#FF9F0A;margin-bottom:8px">âï¸ ÐаÑе пÑедложение:</div> <div style="display:flex;flex-direction:column;gap:8px"> <div> <label style="display:block;font-size:12px;margin-bottom:4px">ÐаÑегоÑиÑ:</label> <select id="proposal-category" class="input" style="font-size:14px" onchange="updateProposal('category', this.value)"> 1741 ${dealCategories.map(c => `<option value="${c.id}" ${state.proposals.category === c.id ? 'selected' : ''}>${c.icon} ${c.name}</option>`).join('')} 1742 </select> </div> <div> <label style="display:block;font-size:12px;margin-bottom:4px">ÐеÑали (ÑÑо именно):</label> <input type="text" id="proposal-details" class="input" style="font-size:14px" value="${state.proposals.details || state.details}" 1743 placeholder="ÐапÑимеÑ: iPhone 15 Pro Max 256GB" oninput="updateProposal('details', this.value)"> </div> </div> </div>` : ''} 1744 1745 ${renderNavButtons(true, true)} 1746 </div>`; 1747 } else { 1748 document.getElementById('quiz-container').innerHTML = ` 1749 <div class="animate-slide-in"> <h3 style="font-size:20px;font-weight:700;margin-bottom:8px">ÐÑÐµÐ´Ð¼ÐµÑ Ñделки</h3> <p style="font-size:14px;color:rgba(255,255,255,.6);margin-bottom:20px">ЧÑо ÑвлÑеÑÑÑ Ð¾Ð±ÑекÑом кÑпли-пÑодажи?</p> <div style="display:flex;flex-direction:column;gap:8px;max-height:320px;overflow-y:auto"> 1750 ${dealCategories.map(c => ` 1751 <div class="card ${state.category === c.id ? 'card-selected' : ''}" onclick="selectCategory('${c.id}')"> <div style="display:flex;align-items:center;gap:12px"> <div style="font-size:24px">${c.icon}</div> <div style="flex:1"> <div style="font-weight:600">${c.name}</div> <div style="font-size:12px;color:rgba(255,255,255,.6)">${c.description}</div> </div> </div> </div>`).join('')} 1752 </div> 1753 1754 ${state.category ? ` 1755 <div class="animate-fade-in" style="margin-top:16px"> <label style="display:block;font-size:14px;font-weight:500;margin-bottom:8px">âï¸ Ð£ÑоÑнение (ÑÑо именно пÑодаÑÑÑÑ/покÑпаеÑÑÑ)</label> <input type="text" id="details-input" class="input" value="${state.details}" 1756 placeholder="ÐапÑимеÑ: iPhone 15 Pro Max, 0.5 BTC, канал @example" 1757 oninput="state.details = this.value; saveState()"> <div style="font-size:12px;margin-top:4px;display:flex;align-items:center;gap:4px;${state.details ? 'color:#30D158' : 'color:rgba(255,255,255,.4)'}"> 1758 ${state.details ? 'â Ðаполнено' : 'ð¡ ÐпиÑиÑе пÑÐµÐ´Ð¼ÐµÑ Ñделки подÑобнее'} 1759 </div> </div>` : ` <div style="margin-top:16px;padding:16px;border-radius:12px;background:rgba(255,255,255,.05);text-align:center;font-size:14px;color:rgba(255,255,255,.4)"> 1760 ð ÐÑбеÑиÑе каÑегоÑÐ¸Ñ Ð²ÑÑе 1761 </div>`} 1762 1763 ${renderNavButtons(true, true)} 1764 </div>`; 1765 1766 if (state.category) { 1767 setTimeout(() => { 1768 const inp = document.getElementById('details-input'); 1769 if (inp) inp.focus(); 1770 }, 200); 1771 } 1772 } 1773} 1774 1775window.selectCategory = function(id) { 1776 state.category = id; 1777 state.details = ''; 1778 saveState(); 1779 renderStep(); 1780}; 1781 1782window.setAgreement = function(f, s) { 1783 state.agreements[f] = s; 1784 if (f === 'category' && s === 'agreed') state.agreements.details = 'agreed'; 1785 if (f === 'category' && s === 'proposed') { 1786 state.agreements.details = 'proposed'; 1787 if (!state.proposals.details) state.proposals.details = state.details; 1788 } 1789 saveState(); 1790 renderStep(); 1791}; 1792 1793window.updateProposal = function(f, v) { 1794 state.proposals[f] = v; 1795 saveState(); 1796}; 1797
1798function renderStep3() { 1799 const cp = state.isCounterparty; 1800 const cd = calculateCommissionData(state.amount, state.currency); 1801 const sym = cd.currency.symbol; 1802 const belowMinimum = cd.amountInUSDT < MIN_DEAL_USDT && state.amount > 0; 1803 1804 if (cp) { 1805 const aA = state.agreements.amount === 'agreed'; 1806 const pA = state.agreements.amount === 'proposed'; 1807 const aC = state.agreements.currency === 'agreed'; 1808 const pC = state.agreements.currency === 'proposed'; const aP = state.agreements.commissionPayer === 'agreed'; 1809 const pP = state.agreements.commissionPayer === 'proposed'; 1810 1811 document.getElementById('quiz-container').innerHTML = ` 1812 <div class="animate-slide-in"> <h3 style="font-size:20px;font-weight:700;margin-bottom:8px">ð¤ СоглаÑование: СÑмма и ÑÑловиÑ</h3> <p style="font-size:14px;color:rgba(255,255,255,.6);margin-bottom:16px">ÐниÑиаÑÐ¾Ñ Ð¿ÑедлагаеÑ:</p> <div class="glass-light" style="padding:12px;margin-bottom:12px;background:rgba(10,132,255,.08);border:1px solid rgba(10,132,255,.2)"> <div style="font-size:12px;color:#0A84FF;margin-bottom:4px">ð° СÑмма:</div> <div style="font-size:18px;font-weight:700">${formatNumber(state.amount)} ${sym}</div> <div style="font-size:12px;color:rgba(255,255,255,.6)">â ${formatNumber(cd.amountInUSDT)} USDT</div> </div> <div class="agree-toggle"> <button class="agree-btn ${aA ? 'agree-btn-agreed' : ''}" onclick="setAgreement('amount', 'agreed')">â СоглаÑен</button>
1812 <button class="agree-btn ${pA ? 'agree-btn-proposed' : ''}" onclick="setAgreement('amount', 'proposed')">â ï¸ ÐÑÐµÐ´Ð»Ð°Ð³Ð°Ñ ÑвоÑ</button> </div> 1813 ${pA ? ` 1814 <div style="margin-top:12px;padding:12px;border-radius:12px;background:rgba(255,159,10,.08);border:1px solid rgba(255,159,10,.2)"> <label style="display:block;font-size:12px;color:#FF9F0A;margin-bottom:4px">ÐаÑа ÑÑмма:</label> <input type="number" class="input" style="font-size:14px" value="${state.proposals.amount || state.amount}" 1815 oninput="updateProposal('amount', parseFloat(this.value) || 0)"> </div>` : ''} 1816 1817 <div class="glass-light" style="padding:12px;margin-top:16px;margin-bottom:12px;background:rgba(10,132,255,.08);border:1px solid rgba(10,132,255,.2)"> <div style="font-size:12px;color:#0A84FF;margin-bottom:4px">ðµ ÐалÑÑа:</div> <div style="font-weight:700">${cd.currency.name} (${state.currency})</div> </div> <div class="agree-toggle"> <button class="agree-btn ${aC ? 'agree-btn-agreed' : ''}" onclick="setAgreement('currency', 'agreed')">â СоглаÑен</button>
1817 <button class="agree-btn ${pC ? 'agree-btn-proposed' : ''}" onclick="setAgreement('currency', 'proposed')">â ï¸ ÐÑÑгÑÑ</button> </div> 1818 ${pC ? ` 1819 <div style="margin-top:12px;padding:12px;border-radius:12px;background:rgba(255,159,10,.08);border:1px solid rgba(255,159,10,.2)"> <label style="display:block;font-size:12px;color:#FF9F0A;margin-bottom:4px">ÐаÑа валÑÑа:</label> <div id="proposal-currency-container"></div> </div>` : ''} 1820 1821 <div class="glass-light" style="padding:12px;margin-top:16px;margin-bottom:12px;background:rgba(10,132,255,.08);border:1px solid rgba(10,132,255,.2)"> <div style="font-size:12px;color:#0A84FF;margin-bottom:4px">ð³ ÐлаÑелÑÑик комиÑÑии:</div> <div style="font-weight:700">${getPayerIcon(state.commissionPayer)} ${getPayerLabel(state.commissionPayer)}</div> </div> <div class="agree-toggle"> <button class="agree-btn ${aP ? 'agree-btn-agreed' : ''}" onclick="setAgreement('commissionPayer', 'agreed')">â СоглаÑен</button>
1821 <button class="agree-btn ${pP ? 'agree-btn-proposed' : ''}" onclick="setAgreement('commissionPayer', 'proposed')">â ï¸ ÐÑÐµÐ´Ð»Ð°Ð³Ð°Ñ Ð¸Ð½Ð°Ñе</button> </div> 1822 ${pP ? ` 1823 <div style="margin-top:12px;padding:12px;border-radius:12px;background:rgba(255,159,10,.08);border:1px solid rgba(255,159,10,.2)"> <label style="display:block;font-size:12px;color:#FF9F0A;margin-bottom:8px">ÐÐ°Ñ Ð²Ð°ÑианÑ:</label> <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:8px"> <button type="button" class="agree-btn ${state.proposals.commissionPayer === 'buyer' ? 'agree-btn-proposed' : ''}" 1824 onclick="updateProposal('commissionPayer', 'buyer');renderStep()"> 1825 ð<br><span style="font-size:11px">ÐокÑпаÑелÑ</span> </button> <button type="button" class="agree-btn ${state.proposals.commissionPayer === 'seller' ? 'agree-btn-proposed' : ''}" 1826 onclick="updateProposal('commissionPayer', 'seller');renderStep()"> 1827 ð¼<br><span style="font-size:11px">ÐÑодавеÑ</span> </button> <button type="button" class="agree-btn ${state.proposals.commissionPayer === 'half' ? 'agree-btn-prop
1827osed' : ''}" 1828 onclick="updateProposal('commissionPayer', 'half');renderStep()"> 1829 ð¤<br><span style="font-size:11px">50/50</span> </button> </div> </div>` : ''} 1830 1831 ${renderNavButtons(true, true)} 1832 </div>`; 1833 1834 if (pC) { 1835 createCurrencySelector('proposal-currency-container', state.proposals.currency || state.currency, code => updateProposal('currency', code)); 1836 } 1837 } else { 1838 document.getElementById('quiz-container').innerHTML = ` 1839 <div class="animate-slide-in"> <h3 style="font-size:20px;font-weight:700;margin-bottom:8px">СÑмма и ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð¾Ð¿Ð»Ð°ÑÑ</h3> <p style="font-size:14px;color:rgba(255,255,255,.6);margin-bottom:12px">УкажиÑе ÑÑммÑ, валÑÑÑ Ð¸ кÑо оплаÑÐ¸Ð²Ð°ÐµÑ ÐºÐ¾Ð¼Ð¸ÑÑÐ¸Ñ Ð³Ð°ÑанÑа</p> 1840 1841 ${belowMinimum ? ` 1842 <div style="background:rgba(255,59,48,.08);border:1px solid rgba(255,59,48,.3);border-radius:12px;padding:12px;margin-bottom:12px"> <div style="font-size:12px;font-weight:600;color:#FF3B30;margin-bottom:4px">â ï¸ ÐинимÑм Ñделки: ${MIN_DEAL_USDT} USDT</div> <p style="font-size:11px;color:rgba(255,255,255,.7)">ТекÑÑÐ°Ñ ÑÑмма (${formatNumber(cd.amountInUSDT)} USDT) ниже минималÑного поÑога. УвелиÑÑÑе ÑÑÐ¼Ð¼Ñ Ð¸Ð»Ð¸ вÑбеÑиÑе дÑÑгÑÑ Ð²Ð°Ð»ÑÑÑ.</p> </div>` : ''} 1843 1844 <div style="display:flex;flex-direction:column;gap:16px"> <div style="display:grid;grid-template-columns:1fr 1fr;gap:12px"> <div> <label style="display:block;font-size:14px;font-weight:500;margin-bottom:8px">СÑмма</label> <input type="number" id="amount-input" class="input" value="${state.amount || ''}" 1845 placeholder="50000" oninput="updateAmount(this.value)"> </div> <div> <label style="display:block;font-size:14px;font-weight:500;margin-bottom:8px">ÐалÑÑа</label> <div id="currency-selector-container"></div> </div> </div> <div> <label style="display:block;font-size:14px;font-weight:500;margin-bottom:8px">ÐÑо оплаÑÐ¸Ð²Ð°ÐµÑ ÐºÐ¾Ð¼Ð¸ÑÑÐ¸Ñ Ð³Ð°ÑанÑа?</label> <div style="display:flex;flex-direction:column;gap:8px;margin-top:8px"> <div class="card ${state.commissionPayer === 'buyer' ? 'card-selected' : ''}" onclick="selectPayer('buyer', event)"> <div style="display:flex;align-items:center;justify-content:space-between"> <div style="display:flex;align-items:center;gap:12px"> <div style="font-size:24px">ð</div> <div> <div style="font-size:14px;font-weight:600">ÐокÑпаÑÐµÐ»Ñ 100%</div> <div style="font-size:12px;color:rgba(255,255,255,.6)">ÐомиÑÑÐ¸Ñ + к ÑÑмме</div> </div> </div> <div style="text-align:right"> <div style="font-size:12px;color:rgba(255,255,255,.6)">ÐаплаÑиÑ:</div> <div style="font-size:14px;font-weight:700;color:#30D158" id="preview-buyer-buyer">â</div> </div> </div> </div> <div class="card ${state.commissionPayer === 'seller' ? 'card-selected' : ''}" onclick="selectPayer('seller', event)"> <div style="display:flex;align-items:center;justify-content:space-between"> <div style="display:flex;align-items:center;gap:12px"> <div style="font-size:24px">ð¼</div> <div> <div style="font-size:14px;font-weight:600">ÐÑÐ¾Ð´Ð°Ð²ÐµÑ 100%</div> <div style="font-size:12px;color:rgba(255,255,255,.6)">ÐомиÑÑÐ¸Ñ - из ÑÑммÑ</div> </div> </div> <div style="text-align:right"> <div style="font-size:12px;color:rgba(255,255,255,.6)">ÐолÑÑиÑ:</div> <div style="font-size:14px;font-weight:700;color:#30D158" id="preview-seller-seller">â</div> </div> </div> </div> <div class="card ${state.commissionPayer === 'half' ? 'card-selected' : ''}" onclick="selectPayer('half', event)"> <div style="display:flex;align-items:center;justify-content:space-between"> <div style="display:flex;align-items:center;gap:12px"> <div style="font-size:24px">ð¤</div> <div> <div style="font-size:14px;font-weight:600">50/50</div> <div style="font-size:12px;color:rgba(255,255,255,.6)">ÐомиÑÑÐ¸Ñ Ð¿Ð¾Ð¿Ð¾Ð»Ð°Ð¼</div> </div> </div> <div style="text-align:right"> <div style="font-size:12px;color:rgba(255,255,255,.6)">ÐаждÑй:</div> <div style="font-size:14px;font-weight:700;color:#30D158" id="preview-half-half">â</div> </div> </div> </div> </div> </div> <div class="glass" style="padding:16px;font-size:14px" id="live-calc"></div> </div> 1846 ${renderNavButtons(true, true)} 1847 </div>`; 1848 1849 createCurrencySelector('currency-selector-container', state.currency, code => { 1850 state.currency = code; 1851 saveState(); 1852 updateAmount(state.amount); 1853 }); 1854 updateAmount(state.amount || 0); 1855 } 1856} 1857 1858window.selectPayer = function(p, e) { 1859 state.commissionPayer = p; 1860 saveState(); 1861 document.querySelectorAll('.card').forEach(c => c.classList.remove('card-selected')); 1862 if (e && e.currentTarget) e.currentTarget.classList.add('card-selected'); 1863 updateAmount(state.amount); 1864}; 1865 1866window.updateAmount = function(v) { 1867 const a = parseFloat(String(v).replace(',', '.')) || 0; 1868 state.amount = Math.max(0, a); 1869 saveState(); 1870 1871 const cd = calculateCommissionData(state.amount, state.currency); 1872 const f = calculateFinalSums(state.amount, cd.commission, state.commissionPayer); 1873 const sym = cd.currency.symbol; 1874 const belowMinimum = cd.amountInUSDT < MIN_DEAL_USDT && state.amount > 0; 1875 1876 const pb = document.getElementById('preview-buyer-buyer'); 1877 const ps = document.getElementById('preview-seller-seller'); 1878 const ph = document.getElementById('preview-half-half'); 1879 1880 if (pb) pb.textContent = `${formatNumber(state.amount + cd.commission)} ${sym}`; 1881 if (ps) ps.textContent = `${formatNumber(state.amount - cd.commission)} ${sym}`; 1882 if (ph) ph.textContent = `${formatNumber(cd.commission / 2)} ${sym}`; 1883 1884 const lc = document.getElementById('live-calc'); 1885 if (lc) { 1886 lc.innerHTML = ` 1887 <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">СÑмма Ñделки:</span> <span style="font-weight:700">${formatNumber(state.amount)} ${sym}</span> </div> <div style="display:flex;justify-content:space-between;font-size:12px;color:rgba(255,255,255,.4);margin-bottom:8px"> <span>ÐквиваленÑ:</span> <span>${formatNumber(cd.amountInUSDT)}
1887 USDT</span> </div> 1888 ${belowMinimum ? ` <div style="background:rgba(255,59,48,.1);border:1px solid rgba(255,59,48,.3);border-radius:8px;padding:8px;margin-bottom:8px;font-size:12px;color:#FF3B30"> 1889 â ï¸ ÐинимÑм: ${MIN_DEAL_USDT} USDT 1890 </div>` : ''} 1891 <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ÐомиÑÑÐ¸Ñ Ð³Ð°ÑанÑа:</span> <span style="font-weight:700;color:#30D158">${formatNumber(cd.commission)} ${sym} (${(cd.commissionRate * 100).toFixed(1)}%)</span> </div> <div style="border-top:1px solid rgba(255,255,255,.1);margin:8px 0"></div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ð³ ÐлаÑелÑÑик:</span> <span style="font-weight:700">${getPayerIcon(state.commissionPayer)} ${getPayerLabel(state.commissionPayer)}</span> </div> <div style="border-top:1px solid rgba(255,255,255,.1);margin:8px 0"></div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ð ÐокÑпаÑÐµÐ»Ñ Ð·Ð°Ð¿Ð»Ð°ÑиÑ:</span> <span style="font-weight:700">${formatNumber(f.buyerPays)} ${sym}</span> </div> <div style="display:flex;justify-content:space-between"> <span style="color:rgba(255,255,255,.6)">ð¼ ÐÑÐ¾Ð´Ð°Ð²ÐµÑ Ð¿Ð¾Ð»ÑÑиÑ:</span> <span style="font-weight:700">${formatNumber(f.sellerGets)} ${sym}</span> </div>`; 1892 } 1893}; 1894
1895function renderStep4() { 1896 const cp = state.isCounterparty; 1897 const ag = state.agreements.deadline === 'agreed'; 1898 const pr = state.agreements.deadline === 'proposed'; 1899 1900 if (cp) { 1901 document.getElementById('quiz-container').innerHTML = ` 1902 <div class="animate-slide-in"> <h3 style="font-size:20px;font-weight:700;margin-bottom:8px">ð¤ СоглаÑование: СÑоки</h3> <p style="font-size:14px;color:rgba(255,255,255,.6);margin-bottom:16px">ÐниÑиаÑÐ¾Ñ Ð¿ÑедлагаеÑ:</p> <div class="glass-light" style="padding:16px;margin-bottom:16px;background:rgba(10,132,255,.08);border:1px solid rgba(10,132,255,.2)"> <div style="font-size:12px;color:#0A84FF;margin-bottom:4px">ⰠСÑок Ñделки:</div> <div style="font-size:18px;font-weight:700">${state.deadline || 'Ðе Ñказан'}</div> </div> <div style="font-size:14px;font-weight:600;margin-bottom:8px">ÐаÑе ÑеÑение:</div> <div class="agree-toggle"> <button class="agree-btn ${ag ? 'agree-btn-agreed' : ''}" onclick="setAgreement('deadline', 'agreed')">â СоглаÑен</button>
1902 <button class="agree-btn ${pr ? 'agree-btn-proposed' : ''}" onclick="setAgreement('deadline', 'proposed')">â ï¸ ÐÑÐµÐ´Ð»Ð°Ð³Ð°Ñ Ñвои</button> </div> 1903 1904 ${pr ? ` 1905 <div style="margin-top:12px;padding:12px;border-radius:12px;background:rgba(255,159,10,.08);border:1px solid rgba(255,159,10,.2)"> <label style="display:block;font-size:12px;color:#FF9F0A;margin-bottom:4px">ÐÐ°Ñ ÑÑок:</label> <input type="text" class="input" style="font-size:14px" value="${state.proposals.deadline || state.deadline}" placeholder="ÐапÑимеÑ: 48 ÑаÑов" oninput="updateProposal('deadline', this.value)"> </div>` : ''} 1906 1907 ${renderNavButtons(true, true)} 1908 </div>`; 1909 } else { 1910 const s = ['1 ÑаÑ', '24 ÑаÑа', '3 днÑ', '7 дней', '14 дней', '30 дней']; 1911 document.getElementById('quiz-container').innerHTML = ` 1912 <div class="animate-slide-in"> <h3 style="font-size:20px;font-weight:700;margin-bottom:8px">СÑоки Ñделки</h3> <p style="font-size:14px;color:rgba(255,255,255,.6);margin-bottom:20px">Ð ÑеÑение какого вÑемени должна завеÑÑиÑÑÑÑ Ñделка?</p> <input type="text" id="deadline-input" class="input" value="${state.deadline}" 1913 placeholder="ÐапÑимеÑ: 24 ÑаÑа" oninput="state.deadline = this.value; saveState()"> <div style="margin-top:16px"> <label style="display:block;font-size:14px;font-weight:500;margin-bottom:8px">â¡ ÐÑÑÑÑÑй вÑбоÑ:</label> <div style="display:flex;flex-wrap:wrap;gap:8px"> 1914 ${s.map(x => ` 1915 <button type="button" style="padding:8px 12px;border-radius:8px;font-size:14px;background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.1);color:#fff;cursor:pointer;transition:all .2s" 1916 onclick="setDeadline('${x}')">${x}</button>`).join('')} 1917 </div> </div> 1918 1919 ${renderNavButtons(true, true)} 1920 </div>`; 1921 } 1922} 1923 1924window.setDeadline = function(v) { 1925 state.deadline = v; 1926 document.getElementById('deadline-input').value = v; 1927 saveState(); 1928}; 1929 1930// ð¯ ÐСÐÐ ÐÐÐÐÐÐ: ШÐÐ 5 â добавлено поле "ÐÐ°Ñ MAX-конÑакÑ" Ð´Ð»Ñ ÐºÐ¾Ð½ÑÑагенÑа
1931function renderStep5() { 1932 if (state.isCounterparty) { 1933 document.getElementById('quiz-container').innerHTML = ` 1934 <div class="animate-slide-in"> <h3 style="font-size:20px;font-weight:700;margin-bottom:8px">ð¤ ÐонÑакÑÑ ÑÑаÑÑников</h3> <p style="font-size:14px;color:rgba(255,255,255,.6);margin-bottom:20px">УкажиÑе MAX-конÑакÑÑ Ð´Ð»Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑии гаÑанÑом</p> <!-- ÐниÑиаÑÐ¾Ñ (readonly) --> <div style="margin-bottom:16px"> <label style="display:block;font-size:14px;font-weight:500;margin-bottom:8px">ð¤ MAX-конÑÐ°ÐºÑ Ð¸Ð½Ð¸ÑиаÑоÑа</label> <input type="text" class="input" value="${state.initiatorUsername}" disabled style="opacity:.7;cursor:not-allowed"> <div style="font-size:11px;color:rgba(255,255,255,.5);margin-top:4px">ÐÑÐ¾Ñ ÐºÐ¾Ð½ÑÐ°ÐºÑ Ñказал иниÑиаÑÐ¾Ñ Ñделки</div> </div> <!-- ÐÐ°Ñ MAX-конÑÐ°ÐºÑ --> <div style="margin-bottom:16px"> <label style="display:block;font-size:14px;font-weight:500;margin-bottom:8px">ð± ÐÐ°Ñ MAX-конÑÐ°ÐºÑ (обÑзаÑелÑно)</label> <input type="text" id="my-max-contact-input" class="input" 1935 value="${state.myMaxContact}" 1936 placeholder="max.ru/u/... или +7 999 123-45-67" 1937 oninput="state.myMaxContact = this.value.trim(); saveState()"> <div style="font-size:11px;color:rgba(255,255,255,.5);margin-top:4px">ÐаÑÐ°Ð½Ñ ÑÐ²Ð¸Ð´Ð¸Ñ ÑÑÐ¾Ñ ÐºÐ¾Ð½ÑÐ°ÐºÑ Ð² ваÑей заÑвке</div> </div> <div class="glass-light" style="padding:16px;background:rgba(255,59,48,.08);border:1px solid rgba(255,59,48,.2)"> <div style="font-size:12px;font-weight:600;color:#FF3B30;margin-bottom:4px">ð¡ Ðак найÑи Ñвой MAX-конÑакÑ:</div> <div style="font-size:11px;color:rgba(255,255,255,.7);margin-bottom:8px"> 1938 1. ÐÑкÑойÑе Ñвой пÑоÑÐ¸Ð»Ñ Ð² MAX<br> 1939 2. ÐажмиÑе на ÑÑи ÑоÑки (â®) ввеÑÑ Ñ<br> 1940 3. ÐÑбеÑиÑе "ÐоделиÑÑÑÑ Ð¿ÑоÑилем" или "СкопиÑоваÑÑ ÑÑÑлкÑ" 1941 </div> <div style="font-size:11px;color:rgba(255,255,255,.7)"> <strong style="color:#FF3B30">Ðли</strong> введиÑе Ð½Ð¾Ð¼ÐµÑ ÑелеÑона, пÑивÑзаннÑй к MAX 1942 </div> </div> 1943 1944 ${renderNavButtons(true, true)} 1945 </div>`; 1946 } else { 1947 document.getElementById('quiz-container').innerHTML = ` 1948 <div class="animate-slide-in"> <h3 style="font-size:20px;font-weight:700;margin-bottom:8px">ÐонÑакÑÑ ÑÑаÑÑников</h3> <p style="font-size:14px;color:rgba(255,255,255,.6);margin-bottom:20px">УкажиÑе MAX-конÑакÑÑ Ð´Ð»Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑии гаÑанÑом</p> <!-- ÐÐ°Ñ MAX-конÑÐ°ÐºÑ --> <div style="margin-bottom:16px"> <label style="display:block;font-size:14px;font-weight:500;margin-bottom:8px">ð± ÐÐ°Ñ MAX-конÑÐ°ÐºÑ (обÑзаÑелÑно)</label> <input type="text" id="my-max-contact-input" class="input" 1949 value="${state.myMaxContact}" 1950 placeholder="max.ru/u/... или +7 999 123-45-67" 1951 oninput="state.myMaxContact = this.value.trim(); saveState()"> <div style="font-size:11px;color:rgba(255,255,255,.5);margin-top:4px">ÐаÑÐ°Ð½Ñ ÑÐ²Ð¸Ð´Ð¸Ñ ÑÑÐ¾Ñ ÐºÐ¾Ð½ÑÐ°ÐºÑ Ð² ваÑей заÑвке</div> </div> <!-- MAX конÑÑагенÑа --> <div style="margin-bottom:16px"> <label style="display:block;font-size:14px;font-weight:500;margin-bottom:8px">ð¥ MAX-конÑÐ°ÐºÑ ÐºÐ¾Ð½ÑÑагенÑа</label> <input type="text" id="counterparty-input" class="input" 1952 value="${state.counterparty}" 1953 placeholder="max.ru/u/... или +7 999 123-45-67" 1954 oninput="validateCounterparty(this.value)"> <div id="counterparty-error" style="font-size:12px;color:#FF3B30;margin-top:4px;display:none"> 1955 ÐведиÑе коÑÑекÑнÑÑ MAX-ÑÑÑÐ»ÐºÑ Ð¸Ð»Ð¸ Ð½Ð¾Ð¼ÐµÑ ÑелеÑона 1956 </div> </div> <div class="glass-light" style="padding:16px;background:rgba(255,59,48,.08);border:1px solid rgba(255,59,48,.2)"> <div style="font-size:12px;font-weight:600;color:#FF3B30;margin-bottom:4px">ð¡ Ðак найÑи MAX-конÑакÑ:</div> <div style="font-size:11px;color:rgba(255,255,255,.7);margin-bottom:8px"> 1957 1. ÐÑкÑойÑе пÑоÑÐ¸Ð»Ñ Ð² MAX<br> 1958 2. ÐажмиÑе на ÑÑи ÑоÑки (â®) ввеÑÑ Ñ<br> 1959 3. ÐÑбеÑиÑе "ÐоделиÑÑÑÑ Ð¿ÑоÑилем" или "СкопиÑоваÑÑ ÑÑÑлкÑ" 1960 </div> <div style="font-size:11px;color:rgba(255,255,255,.7)"> <strong style="color:#FF3B30">Ðли</strong> введиÑе Ð½Ð¾Ð¼ÐµÑ ÑелеÑона, пÑивÑзаннÑй к MAX 1961 </div> </div> 1962 1963 ${renderNavButtons(true, true)} 1964 </div>`; 1965 } 1966} 1967 1968window.validateCounterparty = function(v) { 1969 const c = v.trim(); 1970 state.counterparty = c; 1971 saveState(); 1972 1973 const isValidLink = c.includes('max.ru/') || c.includes('max.ru/u/'); 1974 const isValidPhone = /^[+]?[\d\s\-()]{5,}$/.test(c); 1975 const isValid = isValidLink || isValidPhone || c.length >= 5; 1976 1977 const e = document.getElementById('counterparty-error'); 1978 const i = document.getElementById('counterparty-input'); 1979 1980 if (c.length > 0 && !isValid) { 1981 e.style.display = 'block'; 1982 i.style.borderColor = '#FF3B30'; 1983 } else { 1984 e.style.display = 'none'; 1985 i.style.borderColor = ''; 1986 } 1987}; 1988
1989function renderStep6() { 1990 const cd = calculateCommissionData(state.amount, state.currency); 1991 const f = calculateFinalSums(state.amount, cd.commission, state.commissionPayer); 1992 const sym = cd.currency.symbol; 1993 1994 let ab = ''; 1995 if (state.isCounterparty) { 1996 const s = getAgreementStats(); 1997 ab = ` 1998 <div class="glass-light" style="padding:16px;margin-bottom:16px"> <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:12px"> <div style="font-weight:600">ð СÑаÑÑÑ ÑоглаÑованиÑ:</div> <div style="font-size:14px;font-weight:700;${s.allAgreed ? 'color:#30D158' : 'color:#FF9F0A'}">${s.agreedCount}/${s.totalCount} â </div> </div> 1999 ${renderAgreementRow('category', 'ÐаÑегоÑиÑ')} 2000 ${renderAgreementRow('details', 'ÐеÑали')} 2001 ${renderAgreementRow('amount', 'СÑмма')} 2002 ${renderAgreementRow('currency', 'ÐалÑÑа')} 2003 ${renderAgreementRow('commissionPayer', 'ÐлаÑелÑÑик')} 2004 ${renderAgreementRow('deadline', 'СÑоки')} 2005 </div> <div style="margin-bottom:16px"> <label style="display:block;font-size:14px;font-weight:500;margin-bottom:8px">ð¬ ÐомменÑаÑий Ð´Ð»Ñ Ð³Ð°ÑанÑа (еÑли еÑÑÑ ÑазноглаÑиÑ):</label> <textarea id="comment-input" class="input" style="font-size:14px;min-height:60px;resize:vertical" 2006 placeholder="ÐапÑимеÑ: пÑÐµÐ´Ð»Ð°Ð³Ð°Ñ Ð²ÑÑÑеÑиÑÑÑÑ Ð»Ð¸Ñно Ð´Ð»Ñ Ð¿ÐµÑедаÑи ÑоваÑа" 2007 oninput="state.comment = this.value; saveState()">${state.comment || ''}</textarea> </div>`; 2008 } 2009 2010 document.getElementById('quiz-container').innerHTML = ` 2011 <div class="animate-slide-in"> <h3 style="font-size:20px;font-weight:700;margin-bottom:8px">${state.isCounterparty ? 'ð¤ ÐÑоги ÑоглаÑованиÑ' : 'â ÐодÑвеÑждение ÑÑловий'}</h3> <p style="font-size:14px;color:rgba(255,255,255,.6);margin-bottom:20px"> 2012 ${state.isCounterparty ? 'ÐÑовеÑÑÑе ÑÑаÑÑÑ ÑоглаÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ подÑвеÑдиÑе' : 'ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ñделки Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ подÑвеÑдиÑÑ ÑоглаÑие'} 2013 </p> 2014 2015 ${ab} 2016 2017 <div style="display:flex;flex-direction:column;gap:12px"> 2018 ${renderCheckbox('agreement', state.isCounterparty 2019 ? `Я ознакомилÑÑ(аÑÑ) Ñ ÑÑловиÑми иниÑиаÑоÑа и ÑÑаÑÑÑом ÑоглаÑованиÑ` 2020 : `Я ÑоглаÑовал(а) вÑе ÑÑÐ»Ð¾Ð²Ð¸Ñ Ñ ÐºÐ¾Ð½ÑÑагенÑом: ÑÑÐ¼Ð¼Ñ (${formatNumber(state.amount)} ${sym}), пÑедмеÑ, ÑÑоки`)} 2021 ${renderCheckbox('commission', `Я ознакомилÑÑ(аÑÑ) Ñ ÐºÐ¾Ð¼Ð¸ÑÑией гаÑанÑа (${(cd.commissionRate * 100).toFixed(1)}% = ${formatNumber(cd.commission)} ${sym}) и ваÑианÑом оплаÑÑ: ${getPayerLabel(state.commissionPayer)}`)} 2022 ${renderCheckbox('amounts', `Я Ð¿Ð¾Ð½Ð¸Ð¼Ð°Ñ Ð¸ÑоговÑе ÑÑммÑ: покÑпаÑÐµÐ»Ñ Ð·Ð°Ð¿Ð»Ð°ÑÐ¸Ñ ${formatNumber(f.buyerPays)} ${sym}, пÑÐ¾Ð´Ð°Ð²ÐµÑ Ð¿Ð¾Ð»ÑÑÐ¸Ñ ${formatNumber(f.sellerGets)} ${sym}`)} 2023 ${renderCheckbox('terms', `Я понимаÑ, ÑÑо ÑÑедÑÑва бÑдÑÑ Ð·Ð°Ð±Ð»Ð¾ÐºÐ¸ÑÐ¾Ð²Ð°Ð½Ñ Ð½Ð° ÑÑкÑоÑ-ÑÑеÑе Ñ Ð¼ÑлÑÑиподпиÑÑÑ 2/3 до вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÑÑловий Ñделки`)} 2024 ${renderCheckbox('chat', `Я ÑоглаÑен(на) напиÑаÑÑ Ð³Ð°ÑанÑÑ Ð² MAX Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑаÑа Ñделки${state.isCounterparty ? ` Ñ Ð¸Ð½Ð¸ÑиаÑоÑом` : (state.counterparty ? ` Ñ ÐºÐ¾Ð½ÑÑагенÑом` : '')}`)} 2025 </div> <div class="glass-light" style="padding:16px;margin-top:20px;background:rgba(48,209,88,.08);border:1px solid rgba(48,209,88,.2)"> <div style="font-size:12px;font-weight:600;color:#30D158;margin-bottom:4px">ð¡ï¸ 7-ÑÑÐ¾Ð²Ð½ÐµÐ²Ð°Ñ Ð·Ð°ÑиÑа:</div> <p style="font-size:12px;color:rgba(255,255,255,.7)">AI-KYC â AML/KYT â Smart Contract â MultiSig 2/3 â Atomic Transfer â AI-аÑбиÑÑаж â Lloyd's $45M</p> </div> 2026 2027 ${renderNavButtons(true, true)} 2028 </div>`; 2029} 2030 2031function renderAgreementRow(f, label) { 2032 const s = state.agreements[f];
2032 const ag = s === 'agreed'; 2033 const pr = s === 'proposed'; 2034 const txt = ag ? 'â СоглаÑовано' : (pr ? 'â ï¸ ÐÑÑÑ Ð¿Ñедложение' : 'â³ ÐжидаеÑ'); 2035 2036 let d = ''; 2037 if (pr && state.proposals[f]) { 2038 if (f === 'category') { 2039 const c = dealCategories.find(x => x.id === state.proposals.category); 2040 d = `<div style="font-size:11px;color:#FF9F0A;margin-top:4px">ÐÑедложение: ${c?.name || state.proposals.category}</div>`; 2041 } else if (f === 'amount') { 2042 d = `<div style="font-size:11px;color:#FF9F0A;margin-top:4px">ÐÑедложение: ${formatNumber(state.proposals.amount)} ${state.currency}</div>`; 2043 } else if (f === 'currency') { 2044 d = `<div style="font-size:11px;color:#FF9F0A;margin-top:4px">ÐÑедложение: ${state.proposals.currency}</div>`; 2045 } else if (f === 'commissionPayer') { 2046 d = `<div style="font-size:11px;color:#FF9F0A;margin-top:4px">ÐÑедложение: ${getPayerLabel(state.proposals.commissionPayer)}</div>`; 2047 } else if (f === 'deadline') { 2048 d = `<div style="font-size:11px;color:#FF9F0A;margin-top:4px">ÐÑедложение: ${state.proposals.deadline}</div>`; 2049 } else if (f === 'details') { 2050 d = `<div style="font-size:11px;color:#FF9F0A;margin-top:4px">ÐÑедложение: ${state.proposals.details}</div>`; 2051 } 2052 } 2053 2054 const bgColor = ag ? 'rgba(48,209,88,.15)' : (pr ? 'rgba(255,159,10,.15)' : 'rgba(255,255,255,.05)'); 2055 const textColor = ag ? '#30D158' : (pr ? '#FF9F0A' : 'rgba(255,255,255,.4)'); 2056 2057 return `<div style="display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid rgba(255,255,255,.1)"> <div style="flex:1"> <div style="font-size:14px">${label}</div> 2058 ${d} 2059 </div> <div style="font-size:11px;padding:4px 8px;border-radius:6px;font-weight:600;background:${bgColor};color:${textColor};white-space:nowrap">${txt}</div> </div>`; 2060} 2061 2062function getAgreementStats() { 2063 const fs = ['category', 'details', 'amount', 'currency', 'commissionPayer', 'deadline']; 2064 let c = 0; 2065 fs.forEach(f => { if (state.agreements[f] === 'agreed') c++; }); 2066 return {agreedCount: c, totalCount: fs.length, allAgreed: c === fs.length}; 2067} 2068 2069function renderCheckbox(k, l) { 2070 const c = state.confirmations[k]; 2071 return ` 2072 <div class="glass-light" style="padding:16px;cursor:pointer;transition:all .2s" onclick="toggleConfirmation('${k}')"> <div style="display:flex;align-items:flex-start;gap:12px"> <div style="width:20px;height:20px;border:2px solid rgba(255,255,255,.2);border-radius:6px;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .2s;${c ? 'background:#30D158;border-color:#30D158' : ''}"> 2073 ${c ? '<svg width="12" height="12" fill="none" stroke="#000" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="3" d="M5 13l4 4L19 7"/></svg>' : ''} 2074 </div> <label style="font-size:14px;cursor:pointer;flex:1;line-height:1.4">${l}</label> </div> </div>`; 2075} 2076 2077window.toggleConfirmation = function(k) { 2078 state.confirmations[k] = !state.confirmations[k]; 2079 saveState(); 2080 renderStep(); 2081}; 2082
2083function renderStep7() { 2084 const cd = calculateCommissionData(state.amount, state.currency); 2085 const f = calculateFinalSums(state.amount, cd.commission, state.commissionPayer); 2086 const cat = dealCategories.find(c => c.id === state.category) || dealCategories[0]; 2087 const sym = cd.currency.symbol; 2088 2089 let as = ''; 2090 if (state.isCounterparty) { 2091 const s = getAgreementStats(); 2092 as = ` 2093 <div class="glass-light" style="padding:20px;margin-bottom:16px"> <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:12px"> <div style="font-weight:700;color:#30D158">ð СÑаÑÑÑ ÑоглаÑованиÑ</div> <div style="font-size:14px;font-weight:700;${s.allAgreed ? 'color:#30D158' : 'color:#FF9F0A'}">${s.agreedCount}/${s.totalCount} пÑнкÑов</div> </div> 2094 ${renderAgreementRow('category', 'ÐаÑегоÑиÑ')} 2095 ${renderAgreementRow('details', 'ÐеÑали')} 2096 ${renderAgreementRow('amount', 'СÑмма')} 2097 ${renderAgreementRow('currency', 'ÐалÑÑа')} 2098 ${renderAgreementRow('commissionPayer', 'ÐлаÑелÑÑик')} 2099 ${renderAgreementRow('deadline', 'СÑоки')} 2100 ${state.comment ? ` 2101 <div style="margin-top:12px;padding-top:12px;border-top:1px solid rgba(255,255,255,.1)"> <div style="font-size:12px;color:rgba(255,255,255,.6);margin-bottom:4px">ð¬ ÐÐ°Ñ ÐºÐ¾Ð¼Ð¼ÐµÐ½ÑаÑий:</div> <div style="font-size:14px">${state.comment}</div> </div>` : ''} 2102 </div>`; 2103 } 2104 2105 document.getElementById('quiz-container').innerHTML = ` 2106 <div class="animate-slide-in"> <h3 style="font-size:20px;font-weight:700;margin-bottom:8px">ÐÑÐ¾Ð³Ð¾Ð²Ð°Ñ Ñводка</h3> <p style="font-size:14px;color:rgba(255,255,255,.6);margin-bottom:20px"> 2107 ${state.isCounterparty ? 'ÐÑовеÑÑÑе и напиÑиÑе гаÑанÑÑ Ð² MAX' : 'ÐÑовеÑÑÑе даннÑе пеÑед оÑпÑавкой гаÑанÑÑ'} 2108 </p> 2109 2110 ${state.isCounterparty ? ` 2111 <div class="glass-light" style="padding:16px;margin-bottom:16px;background:rgba(10,132,255,.08);border:1px solid rgba(10,132,255,.2)"> <div style="display:flex;align-items:center;gap:12px"> <div style="font-size:24px">ð¤</div> <div style="flex:1"> <div style="font-size:14px;font-weight:600;color:#0A84FF">ÐÑиглаÑение Ð¾Ñ Ð¸Ð½Ð¸ÑиаÑоÑа</div> <div style="font-size:12px;color:rgba(255,255,255,.6)">ÐÑ Ð·Ð°Ð²ÐµÑÑили ÑоглаÑование ÑÑловий</div> </div> </div> </div>` : ''} 2112 2113 ${as} 2114 2115 <div class="glass-light" style="padding:20px;margin-bottom:16px;font-size:14px"> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ÐаÑа ÑолÑ:</span> <span style="font-weight:700">${state.role === 'buyer' ? 'ð ÐокÑпаÑелÑ' : 'ð¼ ÐÑодавеÑ'}</span> </div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ÐаÑегоÑиÑ:</span> <span style="font-weight:700">${cat.icon} ${cat.name}</span> </div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ÐеÑали:</span> <span style="font-weight:700;text-align:right;max-width:60%;word-wrap:break-word">${state.details || '-'}</span> </div> <div style="border-top:1px solid rgba(255,255,255,.1);margin:8px 0"></div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">СÑмма Ñделки:</span> <span style="font-weight:700;font-size:16px">${formatNumber(state.amount)} ${sym}</span> </div> <div style="display:flex;justify-content:space-between;font-size:12px;color:rgba(255,255,255,.4);margin-bottom:8px"> <span>ÐквиваленÑ:</span> <span>${formatNumber(cd.amountInUSDT)} USDT</span> </div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ÐомиÑÑÐ¸Ñ Ð³Ð°ÑанÑа:</span> <span style="font-weight:700;color:#30D158">${formatNumber(cd.commission)} ${sym} (${(cd.commissionRate * 100).toFixed(1)}%)</span> </div> <div class="glass-light" style="padding:12px;margin:8px 0"> <div style="font-size:12px;color:rgba(255,255,255,.6);margin-bottom:4px">ð³ ÐлаÑелÑÑик комиÑÑии:</div> <div style="font-weight:700;color:#30D158">${getPayerIcon(state.commissionPayer)} ${getPayerLabel(state.commissionPayer)}</div> </div> <div style="border-top:1px solid rgba(255,255,255,.1);margin:8px 0"></div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ð ÐокÑпаÑÐµÐ»Ñ Ð·Ð°Ð¿Ð»Ð°ÑиÑ:</span> <span style="font-weight:700">${formatNumber(f.buyerPays)} ${sym}</span> </div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ð¼ ÐÑÐ¾Ð´Ð°Ð²ÐµÑ Ð¿Ð¾Ð»ÑÑиÑ:</span> <span style="font-weight:700">${formatNumber(f.sellerGets)} ${sym}</span> </div> <div style="border-top:1px solid rgba(255,255,255,.1);margin:8px 0"></div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">СÑоки:</span> <span style="font-weight:700">${state.deadline || '-'}</span> </div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ð± ÐÐ°Ñ MAX-конÑакÑ:</span> <span style="font-weight:700;color:#30D158">${state.myMaxContact || '-'}</span> </div> <div style="display:flex;justify-content:space-between"> <span style="color:rgba(255,255,255,.6)">${state.isCounterparty ? 'ð¤ ÐниÑиаÑоÑ:' : 'ð¥ ÐонÑÑагенÑ:'}</span> <span style="font-weight:700;color:#30D158">${state.isCounterparty ? state.initiatorUsername : (state.counterparty || '-')}</span> </div> </div> <div class="glass-light" style="padding:16px;margin-bottom:16px;background:rgba(48,209,88,.08);border:1px solid rgba(48,209,88,.2)"> <div style="font-size:12px;font-weight:600;color:#30D158;margin-bottom:4px">â ÐоÑово к оÑпÑавке</div> <p style="font-size:12px;color:rgba(255,255,255,.7)"> 2116 ${state.isCounterparty 2117 ? 'ÐажмиÑе «ÐапиÑаÑÑ Ð³Ð°ÑанÑÑ» â оÑкÑоеÑÑÑ MAX Ñо ÑкопиÑованнÑми даннÑми Ñделки.' 2118 : 'ÐажмиÑе «ÐавеÑÑиÑÑ Ð¸ напиÑаÑÑ Ð³Ð°ÑанÑÑ» â ÑможеÑе пÑиглаÑиÑÑ ÐºÐ¾Ð½ÑÑагенÑа или ÑÑÐ°Ð·Ñ Ð½Ð°Ð¿Ð¸ÑаÑÑ Ð³Ð°ÑанÑÑ Ð² MAX.'} 2119 </p> </div> <div style="display:flex;flex-direction:column;gap:12px"> <button onclick="finalizeDeal()" class="btn-max animate-glow"> 2120 ð¨ ${state.isCounterparty ? 'ÐапиÑаÑÑ Ð³Ð°ÑанÑÑ Ð² MAX' : 'ÐавеÑÑиÑÑ Ð¸ напиÑаÑÑ Ð³Ð°ÑанÑÑ'} 2121 </button> <button onclick="prevStep()" class="btn btn-secondary">â ÐеÑнÑÑÑÑÑ Ðº ÑедакÑиÑованиÑ</button> </div> </div>`; 2122} 2123 2124window.nextStep = function() { 2125 if (!validateCurrentStep()) return; 2126 saveFieldValues(); 2127 if (currentStep < totalSteps) { 2128 currentStep++; 2129 renderStep(); 2130 } 2131}; 2132 2133window.prevStep = function() { 2134 saveFieldValues(); 2135 if (currentStep > 1) { 2136 currentStep--; 2137 renderStep(); 2138 } else { 2139 document.getElementById('quiz-container').classList.add('hidden'); 2140 document.getElementById('progress-container').classList.add('hidden'); 2141 document.getElementById('start-screen').classList.remove('hidden'); 2142 document.getElementById('counterparty-banner').classList.add('hidden'); currentStep = 0; 2143 } 2144}; 2145 2146function saveFieldValues() { 2147 const d = document.getElementById('details-input'); 2148 if (d && !d.readOnly) state.details = d.value.trim(); 2149 const dl = document.getElementById('deadline-input'); 2150 if (dl && !dl.readOnly) state.deadline = dl.value.trim(); 2151 const c = document.getElementById('counterparty-input'); 2152 if (c) state.counterparty = c.value.trim(); 2153 const m = document.getElementById('my-max-contact-input'); 2154 if (m) state.myMaxContact = m.value.trim(); 2155 const cm = document.getElementById('comment-input'); 2156 if (cm) state.comment = cm.value.trim(); 2157 saveState(); 2158} 2159 2160// ð¯ ÐСÐÐ ÐÐÐÐÐÐ: validateCurrentStep case 5 â пÑовеÑка myMaxContact Ð´Ð»Ñ Ð¾Ð±Ð¾Ð¸Ñ 2161function validateCurrentStep() { 2162 switch(currentStep) { 2163 case 1: 2164 if (!state.role) { showToast('ÐÑбеÑиÑе ÑолÑ'); return false; } 2165 return true; 2166 case 2: 2167 if (state.isCounterparty) { 2168 if (state.agreements.category === 'pending') { 2169 showToast('ÐÑбеÑиÑе: ÑоглаÑен или пÑедложиÑе ÑвоÑ'); 2170 return false;
2171 } 2172 if (state.agreements.category === 'agreed') state.agreements.details = 'agreed'; 2173 if (state.agreements.category === 'proposed') { 2174 if (!state.proposals.category) state.proposals.category = state.category; 2175 const d = document.querySelector('#proposal-details'); 2176 if (d) state.proposals.details = d.value.trim(); 2177 if (!state.proposals.details) { 2178 showToast('УкажиÑе деÑали в ваÑем пÑедложении'); 2179 return false; 2180 } 2181 } 2182 } else { 2183 if (!state.category) { showToast('ÐÑбеÑиÑе каÑегоÑиÑ'); return false; } 2184 const d = document.getElementById('details-input')?.value.trim(); 2185 if (!d) { showToast('УÑоÑниÑе пÑÐµÐ´Ð¼ÐµÑ Ñделки'); return false; } 2186 state.details = d; 2187 } 2188 return true; 2189 case 3: 2190 if (state.isCounterparty) { 2191 if (state.agreements.amount === 'pending') { showToast('СоглаÑÑйÑе ÑÑммÑ'); return false; } if (state.agreements.currency === 'pending') { showToast('СоглаÑÑйÑе валÑÑÑ'); return false; } 2192 if (state.agreements.commissionPayer === 'pending') { showToast('СоглаÑÑйÑе плаÑелÑÑика комиÑÑии'); return false; } 2193 if (state.agreements.amount === 'proposed' && !state.proposals.amount) { showToast('УкажиÑе ÑÐ²Ð¾Ñ ÑÑммÑ'); return false; } 2194 if (state.agreements.currency === 'proposed' && !state.proposals.currency) { showToast('ÐÑбеÑиÑе ÑÐ²Ð¾Ñ Ð²Ð°Ð»ÑÑÑ'); return false; } 2195 if (state.agreements.commissionPayer === 'proposed' && !state.proposals.commissionPayer) { showToast('ÐÑбеÑиÑе Ñвой ваÑÐ¸Ð°Ð½Ñ Ð¿Ð»Ð°ÑелÑÑика'); return false; } 2196 } else { 2197 const i = document.getElementById('amount-input'); 2198 const a = parseFloat((i?.value || '0').replace(',', '.')) || 0; 2199 if (a <= 0) { showToast('УкажиÑе коÑÑекÑнÑÑ ÑÑммÑ'); return false; } 2200 if (a > 1e12) { showToast('СлиÑком болÑÑÐ°Ñ ÑÑмма'); return false; } 2201 state.amount = a; 2202 2203 const cd = calculateCommissionData(state.amount, state.currency); 2204 if (cd.amountInUSDT < MIN_DEAL_USDT) { 2205 showToast(`ÐинимÑм Ñделки: ${MIN_DEAL_USDT} USDT`); 2206 return false; 2207 } 2208 2209 if (!state.commissionPayer) { showToast('ÐÑбеÑиÑе плаÑелÑÑика комиÑÑии'); return false; } 2210 } 2211 return true; 2212 case 4: 2213 if (state.isCounterparty) { 2214 if (state.agreements.deadline === 'pending') { showToast('СоглаÑÑйÑе ÑÑоки'); return false; } 2215 if (state.agreements.deadline === 'proposed' && !state.proposals.deadline) { showToast('УкажиÑе Ñвои ÑÑоки'); return false; } 2216 } else { 2217 const d = document.getElementById('deadline-input')?.value.trim(); 2218 if (!d) { showToast('УкажиÑе ÑÑоки'); return false; } 2219 state.deadline = d; 2220 } 2221 return true; 2222 case 5: 2223 // ð¯ ÐÐ»Ñ Ð¾Ð±Ð¾Ð¸Ñ Ð¿ÑовеÑÑем myMaxContact 2224 const myContact = document.getElementById('my-max-contact-input')?.value.trim(); 2225 if (!myContact) { 2226 showToast('УкажиÑе Ñвой MAX-конÑÐ°ÐºÑ Ð´Ð»Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑии гаÑанÑом'); 2227 return false; 2228 } 2229 state.myMaxContact = myContact; 2230 2231 if (!state.isCounterparty) { 2232 const c = document.getElementById('counterparty-input')?.value.trim(); 2233 2234 const isValidLink = c && (c.includes('max.ru/') || c.includes('max.ru/u/')); 2235 const isValidPhone = c && /^[+]?[\d\s\-()]{5,}$/.test(c); 2236 const isValid = isValidLink || isValidPhone || (c && c.length >= 5); 2237 if (c && !isValid) { 2238 showToast('ÐекоÑÑекÑÐ½Ð°Ñ MAX-ÑÑÑлка или Ð½Ð¾Ð¼ÐµÑ ÐºÐ¾Ð½ÑÑагенÑа'); 2239 return false; 2240 } state.counterparty = c || ''; 2241 } 2242 return true; 2243 case 6: 2244 const all = Object.values(state.confirmations).every(v => v); 2245 if (!all) { showToast('ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ подÑвеÑдиÑÑ Ð²Ñе ÑÑловиÑ'); return false; } 2246 return true; 2247 default: 2248 return true; 2249 } 2250} 2251 2252// ð¯ ÐСÐÐ ÐÐÐÐÐÐ: finalizeDeal â показÑÐ²Ð°ÐµÑ MAX-конÑÐ°ÐºÑ Ð´Ð»Ñ Ð¾Ð±Ð¾Ð¸Ñ 2253window.finalizeDeal = function() { 2254 const cd = calculateCommissionData(state.amount, state.currency); 2255 const f = calculateFinalSums(state.amount, cd.commission, state.commissionPayer); 2256 const cat = dealCategories.find(c => c.id === state.category) || dealCategories[0]; 2257 const sym = cd.currency.symbol; 2258 2259 document.getElementById('modal-summary').innerHTML = ` 2260 <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">РолÑ:</span> <span style="font-weight:700">${state.role === 'buyer' ? 'ð ÐокÑпаÑелÑ' : 'ð¼ ÐÑодавеÑ'}</span> </div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ÐаÑегоÑиÑ:</span> <span style="font-weight:700">${cat.icon} ${cat.name}</span> </div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">СÑмма:</span> <span style="font-weight:700">${formatNumber(state.amount)} ${sym}</span> </div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ÐомиÑÑиÑ:</span> <span style="font-weight:700;color:#30D158">${formatNumber(cd.commission)} ${sym} (${(cd.commissionRate * 100).toFixed(1)}%)</span> </div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ÐлаÑелÑÑик:</span> <span style="font-weight:700">${getPayerLabel(state.commissionPayer)}</span> </div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">ð± ÐÐ°Ñ MAX:</span> <span style="font-weight:700;color:#30D158">${state.myMaxContact || '-'}</span> </div> <div style="display:flex;justify-content:space-between;margin-bottom:8px"> <span style="color:rgba(255,255,255,.6)">${state.isCounterparty ? 'ð¤ ÐниÑиаÑоÑ:' : 'ð¥ ÐонÑÑагенÑ:'}</span> <span style="font-weight:700;color:#30D158">${state.isCounterparty ? state.initiatorUsername : (state.counterparty || '-')}</span> </div> <div style="display:flex;justify-content:space-between"> <span style="color:rgba(255,255,255,.6)">СÑоки:</span> <span style="font-weight:700">${state.deadline}</span> </div>`; 2261
2262 if (state.isCounterparty) { 2263 document.getElementById('btn-max').classList.remove('hidden'); 2264 document.getElementById('btn-invite').classList.add('hidden'); 2265 document.getElementById('btn-invite-hint').classList.add('hidden'); 2266 2267 document.getElementById('final-modal-subtitle').textContent = 'ÐапиÑиÑе гаÑанÑÑ Ð² MAX Ñо Ñводкой ÑоглаÑованиÑ'; 2268 document.getElementById('final-hint-text').innerHTML = 2269 '1. ÐажмиÑе "ÐÑкÑÑÑÑ MAX" вÑÑе<br>' + 2270 '2. ÐаннÑе Ñделки ÑкопиÑÐ¾Ð²Ð°Ð½Ñ Ð² бÑÑеÑ<br>' + 2271 '3. ÐÑÑавÑÑе в ÑÐ°Ñ Ñ Ð³Ð°ÑанÑом<br>' + 2272 '4. ÐниÑиаÑÐ¾Ñ Ñже оÑпÑавил ÑÐ²Ð¾Ñ Ð·Ð°ÑвкÑ<br>' + 2273 '5. ÐаÑÐ°Ð½Ñ ÑоздаÑÑ Ð¾Ð±Ñий ÑÐ°Ñ Ñделки'; 2274 2275 const s = getAgreementStats(); 2276 document.getElementById('agreement-summary-block').classList.remove('hidden'); 2277 document.getElementById('agreement-summary-block').innerHTML = ` 2278 <div class="glass-light" style="padding:16px;margin-bottom:16px"> <div style="display:flex;justify-content:space-between;align-items:center;margin-bottom:8px"> <div style="font-size:14px;font-weight:700">ð Сводка ÑоглаÑованиÑ:</div> <div style="font-size:14px;font-weight:700;${s.allAgreed ? 'color:#30D158' : 'color:#FF9F0A'}"> 2279 ${s.allAgreed ? 'â ÐÑÑ ÑоглаÑовано' : `â ï¸ ${s.agreedCount}/${s.totalCount} пÑнкÑов`} 2280 </div> </div> <div style="font-size:12px;color:rgba(255,255,255,.6)"> 2281 ${s.allAgreed 2282 ? 'ÐÑе ÑÑÐ»Ð¾Ð²Ð¸Ñ Ð¿ÑинÑÑÑ. ÐаÑÐ°Ð½Ñ Ð¿Ð¾Ð»ÑÑÐ¸Ñ Ð¿Ð¾Ð´ÑвеÑждение.' 2283 : 'ÐÑÑÑ ÑазноглаÑиÑ. ÐаÑÐ°Ð½Ñ Ð¿Ð¾Ð¼Ð¾Ð¶ÐµÑ Ð¸Ñ ÑÑегÑлиÑоваÑÑ Ð² MAX.'} 2284 </div> </div>`; 2285 } else { 2286 document.getElementById('btn-max').classList.remove('hidden'); 2287 document.getElementById('btn-invite').classList.remove('hidden'); 2288 document.getElementById('btn-invite-hint').classList.remove('hidden'); 2289 2290 document.getElementById('final-modal-subtitle').textContent = 'ÐÑиглаÑиÑе конÑÑагенÑа или напиÑиÑе гаÑанÑÑ'; 2291 document.getElementById('final-hint-text').innerHTML = 2292 '1. ÐÑпÑавÑÑе ÑÑÑÐ»ÐºÑ ÐºÐ¾Ð½ÑÑагенÑÑ ÑеÑез MAX<br>' + 2293 '2. ÐонÑÑÐ°Ð³ÐµÐ½Ñ ÑоглаÑÑÐµÑ ÑÑловиÑ<br>' + 2294 '3. Ðба пиÑеÑе гаÑанÑÑ Ð² MAX<br>' + 2295 '4. ÐаÑÐ°Ð½Ñ ÑоздаÑÑ Ð¾Ð±Ñий ÑÐ°Ñ Ñделки'; 2296 2297 document.getElementById('agreement-summary-block').classList.add('hidden'); 2298 } 2299 2300 document.getElementById('final-modal').classList.remove('hidden'); 2301}; 2302window.closeFinalModal = function() { 2303 document.getElementById('final-modal').classList.add('hidden'); 2304}; 2305 2306// ð¯ ÐСÐÐ ÐÐÐÐÐÐ: buildDealMessage â добавлен MAX-конÑÐ°ÐºÑ Ð´Ð»Ñ ÐºÐ¾Ð½ÑÑагенÑа 2307function buildDealMessage(isInitiatorSending = false) { 2308 const cd = calculateCommissionData(state.amount, state.currency); 2309 const f = calculateFinalSums(state.amount, cd.commission, state.commissionPayer); 2310 const cat = dealCategories.find(c => c.id === state.category) || dealCategories[0]; 2311 const r = state.role === 'buyer' ? 'ÐокÑпаÑелÑ' : 'ÐÑодавеÑ'; 2312 const sym = cd.currency.symbol; 2313 2314 let m = `ð¡ï¸ ÐÐЯÐÐÐ ÐÐ ÐÐÐÐÐÐСÐУЮ СÐÐÐÐУ\n\n`; 2315 2316 if (state.isCounterparty) { 2317 m += `ð¨ ÐТ: ÐонÑÑÐ°Ð³ÐµÐ½Ñ (${r})\n`; 2318 m += `ð± Ðой MAX-конÑакÑ: ${state.myMaxContact || 'не Ñказан'}\n`; 2319 m += `ð¤ ÐниÑиаÑоÑ: ${state.initiatorUsername}\n\n`; 2320 m += `âââââââââââââââââââââââââââ\n`; 2321 m += `ð¤ Я â конÑÑагенÑ, ÑоглаÑовÑÐ²Ð°Ñ ÑÑÐ»Ð¾Ð²Ð¸Ñ Ñделки\n`; 2322 m += `âââââââââââââââââââââââââââ\n\n`; 2323 } else { 2324 m += `ð¨ ÐТ: ÐниÑиаÑÐ¾Ñ (${r})\n`; 2325 m += `ð± Ðой MAX-конÑакÑ: ${state.myMaxContact || 'не Ñказан'}\n\n`; 2326 m += `âââââââââââââââââââââââââââ\n`; 2327 m += `ð¤ Я â иниÑиаÑÐ¾Ñ Ñделки, ÑÑÐ»Ð¾Ð²Ð¸Ñ ÑледÑÑÑие\n`; 2328 m += `âââââââââââââââââââââââââââ\n\n`; 2329 } 2330 2331 m += `${cat.icon} ÐаÑегоÑиÑ: ${cat.name}\n`; 2332 m += `ð¦ ÐÑедмеÑ: ${state.details}\n\n`; 2333 m += `ð° СÑмма: ${formatNumber(state.amount)} ${sym}\n`; 2334 m += `ðµ ÐквиваленÑ: ${formatNumber(cd.amountInUSDT)} USDT\n`; 2335 m += `ð ÐомиÑÑиÑ: ${formatNumber(cd.commission)} ${sym} (${(cd.commissionRate * 100).toFixed(1)}%)\n`; 2336 m += `ð³ ÐлаÑелÑÑик комиÑÑии: ${getPayerLabel(state.commissionPayer)}\n\n`; 2337 m += `ð ÐокÑпаÑÐµÐ»Ñ Ð·Ð°Ð¿Ð»Ð°ÑиÑ: ${formatNumber(f.buyerPays)} ${sym}\n`; 2338 m += `ð¼ ÐÑÐ¾Ð´Ð°Ð²ÐµÑ Ð¿Ð¾Ð»ÑÑиÑ: ${formatNumber(f.sellerGets)} ${sym}\n\n`; 2339 m += `ⰠСÑоки: ${state.deadline}\n`; 2340 2341 if (!state.isCounterparty && state.counterparty) { 2342 m += `ð¥ ÐонÑÑагенÑ: ${state.counterparty}\n`; 2343 if (isInitiatorSending) { 2344 m += `ð¨ СÑÑлка-пÑиглаÑение оÑпÑавлена конÑÑагенÑÑ\n`; 2345 m += `â³ ÐÐ¶Ð¸Ð´Ð°Ñ Ð²ÑÑÑеÑнÑÑ Ð·Ð°ÑÐ²ÐºÑ Ð¾Ñ ÐºÐ¾Ð½ÑÑагенÑа\n`; 2346 } 2347 } 2348 2349 if (state.isCounterparty) { 2350 const s = getAgreementStats(); 2351 m += `\nâââââââââââââââââââââââââââ\n`; m += `ð СТÐТУС СÐÐÐÐСÐÐÐÐÐЯ (${s.agreedCount}/${s.totalCount}):\n`; 2352 m += `âââââââââââââââââââââââââââ\n`; 2353 const fs = [ 2354 {k: 'category', l: 'ÐаÑегоÑиÑ'}, 2355 {k: 'details', l: 'ÐеÑали'}, 2356 {k: 'amount', l: 'СÑмма'}, 2357 {k: 'currency', l: 'ÐалÑÑа'}, 2358 {k: 'commissionPayer', l: 'ÐлаÑелÑÑик комиÑÑии'}, 2359 {k: 'deadline', l: 'СÑоки'} 2360 ];
2361 fs.forEach(x => { 2362 const st = state.agreements[x.k]; 2363 if (st === 'agreed') { 2364 m += `â ${x.l}: ÑоглаÑовано\n`; 2365 } else if (st === 'proposed') { 2366 let pt = ''; 2367 if (x.k === 'category') { 2368 const c = dealCategories.find(y => y.id === state.proposals.category); 2369 pt = c?.name || state.proposals.category; 2370 } else if (x.k === 'amount') { 2371 pt = `${formatNumber(state.proposals.amount)} ${state.currency}`; 2372 } else if (x.k === 'currency') { 2373 pt = state.proposals.currency; 2374 } else if (x.k === 'commissionPayer') { 2375 pt = getPayerLabel(state.proposals.commissionPayer); 2376 } else if (x.k === 'deadline') { 2377 pt = state.proposals.deadline; 2378 } else if (x.k === 'details') { 2379 pt = state.proposals.details; 2380 } 2381 m += `â ï¸ ${x.l}: иниÑиаÑÐ¾Ñ Ð¿Ñедложил ÑвоÑ, конÑÑÐ°Ð³ÐµÐ½Ñ Ð¿ÑедлагаеÑ: ${pt}\n`; 2382 } else { 2383 m += `â³ ${x.l}: Ð¾Ð¶Ð¸Ð´Ð°ÐµÑ ÑеÑениÑ\n`; 2384 } 2385 }); 2386 2387 if (state.comment) { 2388 m += `\nð¬ ÐомменÑаÑий конÑÑагенÑа: ${state.comment}\n`; 2389 } 2390 2391 m += `\nâââââââââââââââââââââââââââ\n`; 2392 m += `â ÐÑе ÑекбокÑÑ Ð¿Ð¾Ð´ÑвеÑÐ¶Ð´ÐµÐ½Ð¸Ñ Ð¾ÑмеÑенÑ\n`; 2393 m += `ð¤ ÐÑоÑÑ ÑоздаÑÑ Ð¾Ð±Ñий ÑÐ°Ñ Ñделки в MAX\n`; 2394 m += `âââââââââââââââââââââââââââ\n`; 2395 } else { 2396 if (!state.counterparty) { 2397 m += `\nâ ï¸ ÐонÑÑÐ°Ð³ÐµÐ½Ñ Ð½Ðµ Ñказан â ÑÑÑÐ½Ð°Ñ Ð´Ð¾Ð³Ð¾Ð²Ð¾ÑÑнноÑÑÑ\n`; 2398 } 2399 m += `\nâââââââââââââââââââââââââââ\n`; 2400 m += `â ÐÑе ÑÑÐ»Ð¾Ð²Ð¸Ñ ÑоглаÑÐ¾Ð²Ð°Ð½Ñ Ñ ÐºÐ¾Ð½ÑÑагенÑом\n`; m += `ð¤ ÐÑоÑÑ ÑоздаÑÑ Ð¾Ð±Ñий ÑÐ°Ñ Ñделки в MAX\n`; 2401 m += `âââââââââââââââââââââââââââ\n`; 2402 } 2403 2404 return m; 2405} 2406 2407function buildSharePayload() { 2408 const p = { 2409 r: state.role, 2410 c: state.category, 2411 d: state.details, 2412 a: state.amount, 2413 cur: state.currency, 2414 cp: state.commissionPayer, 2415 dl: state.deadline, 2416 cpUser: state.counterparty, 2417 initiatorContact: state.myMaxContact || 'полÑзоваÑелÑ', 2418 ag: state.agreements, 2419 pr: state.proposals, 2420 ts: Date.now() 2421 }; 2422 try { 2423 const j = JSON.stringify(p); 2424 const b = new TextEncoder().encode(j); 2425 const s = String.fromCharCode(...b); 2426 return btoa(s); 2427 } catch(e) { 2428 return encodeURIComponent(JSON.stringify(p)); 2429 } 2430} 2431 2432window.contactMax = async function() { 2433 const message = buildDealMessage(); 2434 2435 const success = await copyToClipboard(message); 2436 2437 if (success) { 2438 showToast('â ÐаннÑе ÑкопиÑованÑ! ÐÑкÑÑÐ²Ð°Ñ MAX...'); 2439 } else { 2440 showToast('â ï¸ Ð¡ÐºÐ¾Ð¿Ð¸ÑÑйÑе даннÑе вÑÑÑнÑÑ. ÐÑкÑÑÐ²Ð°Ñ MAX...'); 2441 } 2442 2443 setTimeout(() => { 2444 window.open(MAX_URL, '_blank'); 2445 }, 1000); 2446 2447 setTimeout(() => { 2448 closeFinalModal(); 2449 }, 1500);}; 2450 2451window.inviteCounterparty = function() { 2452 if (!state.counterparty) { 2453 showToast('â ï¸ Ð£ÐºÐ°Ð¶Ð¸Ñе MAX-конÑÐ°ÐºÑ ÐºÐ¾Ð½ÑÑагенÑа на Ñаге 5'); 2454 return; 2455 } 2456 2457 const payload = buildSharePayload(); 2458 const baseUrl = window.location.origin + window.location.pathname; 2459 const inviteUrl = `${baseUrl}?deal=${payload}`; 2460 window.currentInviteLink = inviteUrl; 2461 2462 document.getElementById('invite-link-display').textContent = inviteUrl; 2463 document.getElementById('final-modal').classList.add('hidden'); 2464 document.getElementById('invite-modal').classList.remove('hidden'); 2465}; 2466 2467window.closeInviteModal = function() { 2468 document.getElementById('invite-modal').classList.add('hidden'); 2469 document.getElementById('final-modal').classList.remove('hidden'); 2470}; 2471 2472window.shareInviteLink = function() { 2473 const link = window.currentInviteLink; 2474 2475 if (navigator.share) { 2476 navigator.share({ 2477 title: 'ÐÑиглаÑение в ÑÐ´ÐµÐ»ÐºÑ ÑеÑез ÐÐÐ ÐÐТ СÐÐÐÐÐ â1', 2478 text: 'ð¤ ÐÑиглаÑение в безопаÑнÑÑ ÑÐ´ÐµÐ»ÐºÑ ÑеÑез MAX', 2479 url: link 2480 }).catch(err => { 2481 console.log('Share failed:', err); 2482 copyInviteLink(); 2483 }); 2484 } else { 2485 copyInviteLink(); 2486 } 2487}; 2488 2489window.copyInviteLink = async function() { 2490 const link = window.currentInviteLink; 2491 const success = await copyToClipboard(link); 2492 2493 if (success) { 2494 showToast('â СÑÑлка ÑкопиÑована!'); 2495 } else { 2496 showToast('â Ðе ÑдалоÑÑ ÑкопиÑоваÑÑ'); 2497 } 2498}; 2499window.copyDealData = async function() { 2500 const message = buildDealMessage(); 2501 const success = await copyToClipboard(message); 2502 2503 if (success) { 2504 showToast('â ÐаннÑе ÑкопиÑованÑ!'); 2505 } else { 2506 showToast('â Ðе ÑдалоÑÑ ÑкопиÑоваÑÑ'); 2507 } 2508}; 2509 2510async function copyToClipboard(text) { 2511 if (navigator.clipboard && navigator.clipboard.writeText) { 2512 try { 2513 await navigator.clipboard.writeText(text); 2514 return true; 2515 } catch(e) { 2516 console.warn('Clipboard API failed:', e); 2517 } 2518 } 2519 2520 try { 2521 const textarea = document.createElement('textarea'); 2522 textarea.value = text; 2523 textarea.style.position = 'fixed'; 2524 textarea.style.opacity = '0'; 2525 textarea.style.top = '0'; 2526 textarea.style.left = '0'; 2527 document.body.appendChild(textarea); 2528 textarea.focus(); 2529 textarea.select(); 2530 textarea.setSelectionRange(0, 99999); 2531 2532 const success = document.execCommand('copy'); 2533 document.body.removeChild(textarea); 2534 return success; 2535 } catch(e) { 2536 console.warn('Fallback copy failed:', e); 2537 return false;
2538 } 2539} 2540 2541function showToast(message) { 2542 const existing = document.querySelector('.toast'); 2543 if (existing) existing.remove(); 2544 2545 const toast = document.createElement('div'); 2546 toast.className = 'toast'; 2547 toast.textContent = message; document.body.appendChild(toast); 2548 2549 setTimeout(() => toast.remove(), 2500); 2550} 2551 2552const dealIds = ["P-41063", "E-12386", "T-89234", "S-45671", "C-78912", "D-23456", "X-99812", "A-11223", "B-44556", "F-77889"]; 2553const dealAmounts = [7101.16, 1789.06, 2450.50, 890.25, 3456.78, 5234.90, 1234.56, 6789.12, 15234.99, 9876.54]; 2554 2555let liveDeals = [ 2556 {id: "P-41063", amount: 7101.16, status: "ÐаÑиÑена", time: "ÑолÑко ÑÑо"}, 2557 {id: "E-12386", amount: 1789.06, status: "ÐаÑиÑена", time: "2 мин назад"}, 2558 {id: "T-89234", amount: 2450.50, status: "ÐаÑиÑена", time: "5 мин назад"} 2559]; 2560 2561function updateLiveTicker() { 2562 const newDeal = { 2563 id: dealIds[Math.floor(Math.random() * dealIds.length)], 2564 amount: dealAmounts[Math.floor(Math.random() * dealAmounts.length)], 2565 status: "ÐаÑиÑена", 2566 time: "ÑолÑко ÑÑо" 2567 }; 2568 liveDeals.unshift(newDeal); 2569 if (liveDeals.length > 10) liveDeals.pop(); 2570 2571 const ticker = document.getElementById('live-ticker'); 2572 if (ticker) { 2573 ticker.innerHTML = liveDeals.map(d => ` 2574 <div class="ticker-item"> <span style="font-size:12px">ð</span> <span style="font-size:12px;font-weight:600;color:#30D158">Сделка #${d.id}</span> <span style="font-size:12px;color:rgba(255,255,255,.6)">${formatNumber(d.amount)} USDT</span> <span style="font-size:12px;color:#30D158">â ${d.status}</span> </div>`).join(''); 2575 } 2576} 2577 2578function updateLiveStats() { 2579 const dealsEl = document.getElementById('stat-deals'); 2580 const amountEl = document.getElementById('stat-amount'); 2581 2582 if (dealsEl) { 2583 const currentDeals = parseInt(dealsEl.textContent.replace(/,/g, '')) || 10247; 2584 dealsEl.textContent = (currentDeals + Math.floor(Math.random() * 3) + 1).toLocaleString(); 2585 } 2586 if (amountEl) { 2587 const amounts = ['$12.4M', '$12.5M', '$12.6M', '$12.7M']; 2588 amountEl.textContent = amounts[Math.floor(Math.random() * amounts.length)]; 2589 } 2590} 2591handleUrlParams(); 2592fetchLiveRates(); 2593setInterval(fetchLiveRates, 5 * 60 * 1000); 2594setInterval(updateLiveTicker, 5000); 2595setInterval(updateLiveStats, 10000); 2596 2597let lastTouchEnd = 0; 2598document.addEventListener('touchend', e => { 2599 const now = Date.now(); 2600 if (now - lastTouchEnd <= 300) e.preventDefault(); 2601 lastTouchEnd = now; 2602}, false); 2603 2604console.log('ð¡ï¸ ÐÐÐ ÐÐТ СÐÐÐÐÐ MAX v4 â ÑиналÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ Ñ MAX-конÑакÑами Ð´Ð»Ñ Ð¾Ð±Ð¾Ð¸Ñ '); 2605console.log('ð± MAX-ÑÑÑлка гаÑанÑа:', MAX_URL); 2606console.log('ð ТелеÑон гаÑанÑа:', MAX_PHONE_FORMATTED); 2607console.log('ð° ÐинимÑм Ñделки:', MIN_DEAL_USDT, 'USDT'); 2608console.log('â ÐÑпÑавлено: поле MAX-конÑакÑа Ð´Ð»Ñ ÐºÐ¾Ð½ÑÑагенÑа + валидаÑÐ¸Ñ + ÑообÑение гаÑанÑÑ'); 2609})(); 2610</script>
2610 <!-- nominify end --> </div> </div> </div> </div> <div id="rec2371180541" class="r t-rec" style=" " data-animationappear="off" data-record-type="131"> <!-- T123 --> <div class="t123"> <div class="t-container_100 "> <div class="t-width t-width_100 "> <!-- nominify begin -->
2610<script src="https://public.bnbstatic.com/unpkg/growth-widget/[email protected]" ></script>
2610<div class="binance-widget-marquee" data-cmc-ids="1,1027,52,5426,3408,74,2010,20947,5994,13502,24478,35336" data-theme="dark" data-transparent="false" data-locale="en" data-fiat="USD" data-powered-by="Powered by" data-disclaimer="Disclaimer" ></div> <!-- nominify end --> </div> </div> </div> </div> </div> <!--/allrecords--> <!-- Stat --> <!-- Yandex.Metrika counter 96668743 -->
2610<script type="text/javascript" data-tilda-cookie-type="analytics">setTimeout(function(){(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})(window,document,"script","https://mc.yandex.ru/metrika/tag.js","ym");window.mainMetrikaId='96668743';ym(window.mainMetrikaId,"init",{clickmap:true,trackLinks:true,accurateTrackBounce:true,webvisor:false});},2000);</script>
2610 <noscript><div><img src="https://mc.yandex.ru/watch/96668743" style="position:absolute; left:-9999px;" alt="" /></div></noscript> <!-- /Yandex.Metrika counter -->
2610<script type="text/javascript">if(!window.mainTracker) {window.mainTracker='tilda';} 2611window.tildastatcookie='no';window.tildastatscroll='yes';setTimeout(function(){(function(d,w,k,o,g) {var n=d.getElementsByTagName(o)[0],s=d.createElement(o),f=function(){n.parentNode.insertBefore(s,n);};s.type="text/javascript";s.async=true;s.key=k;s.id="tildastatscript";s.src=g;if(w.opera=="[object Opera]") {d.addEventListener("DOMContentLoaded",f,false);} else {f();}})(document,window,'f31f3f37a992862b73e6d239d17af48c','script','https://static.tildacdn.com/js/tilda-stat-1.0.min.js');},2000);</script>
2611 </body> </html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.