1 2<!DOCTYPE html> 3<html lang="ru"> 4<head> 5 <meta charset="UTF-8"/> 6 <title>ÐÑ Ð¾Ð´ на ÑÐ°Ð¹Ñ | GDZ-raketa</title> 7 8 <meta name="theme-color" content="#1F1F1F"/> 9 <meta name="viewport" content="width=device-width, initial-scale=1"/> 10 <meta name="description" content="ÐойдиÑе на ÑайÑ, ÑÑÐ¾Ð±Ñ Ð²Ð¾ÑполÑзоваÑÑÑÑ Ð²Ñеми возможноÑÑÑми ÑайÑа и пÑиложениÑ."/><meta name="og:image" content="/image/imagehome.png"/> <link rel="stylesheet" href="/css/app.css?v=1.26"><link rel="stylesheet" href="/login/styles.css?v=1.26"><link rel="canonical" href="https://gdz-raketa.ru/login/" /> 11<link href="/favicon.svg" rel="shortcut icon" type="image/x-icon"> 12 13 14
14<script async src='https://yandex.ru/ads/system/header-bidding.js'></script>
vendor: 1 bytes, line 14
14
15<script> 16var adfoxBiddersMap = { 17 "adriver": "3337610" 18}; 19 20var adUnits = [ 21 { 22 "code": "adfox_174789492501676785", 23 "sizes": [ 24 [ 25 300, 26 300 27 ], 28 [ 29 300, 30 250 31 ] 32 ], 33 "bids": [ 34 { 35 "bidder": "adriver", 36 "params": { 37 "placementId": "177:gdz-raketa_300x250_banner_category_top", 38 "additional": { 39 "ext": {"query" : "cid="+localStorage.getItem('adrcid')} 40 } 41 } 42 } 43 ] 44 } 45]; 46 47var userTimeout = 500; 48 49window.YaHeaderBiddingSettings = { 50 biddersMap: adfoxBiddersMap, 51 adUnits: adUnits, 52 timeout: userTimeout, 53}; 54</script>
54 55 56
57<script>window.yaContextCb = window.yaContextCb || []</script>
vendor: 1 bytes, line 57
57
58<script src='https://yandex.ru/ads/system/context.js' async></script>
58 59 60 61 62 63 64 65
66<script src="https://content.adriver.ru/AdRiverFPS.js"></script>
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88<!-- Google Tag Manager -->
89<script>
vendor: 327 bytes, lines 89-93
89(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 90new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 91j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 92'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 93})(window,document,'script','dataLayer','
93GTM-ML2V4X5
vendor: 3 bytes, line 93
93');
93</script>
93 94<!-- End Google Tag Manager --> 95 96 97 98
99<script> 100 if (window.innerWidth < 461) { 101 let script = document.createElement('script'); 102 script.src = "https://ru.viadata.store/v2/comm_min.js?sid=104314"; 103 script.async = true; 104 document.head.appendChild(script); 105 } 106 </script>
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122</head> 123 124<body class=""> 125 126 127 128 129 130 131 132<!-- Google Tag Manager (noscript) -->
vendor: 68 bytes, lines 132-133
132 133<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
133GTM-ML2V4X5
vendor: 83 bytes, lines 133-134
133" 134height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
135<!-- End Google Tag Manager (noscript) --> 136 137 138 139<header class="header"> 140 <div class="header__container container"> 141 142 <a href="/" class="header__logo"> 143 <img src="/images/logo.png" srcset="/images/logo.png 1x, /images/logo-2x.png 2x" alt="GDZ-raketa" 144 class="img-responsive"/> 145 </a> 146 147 148 <a href="/login/" class="header__user-link user-link user-auth"> 149 150 <div class="user-link__avatar avatar"> 151 <svg role="img" class="avatar__icon"> 152 <use href="/images/icons/sprite.svg#user"/> 153 </svg> 154 </div> 155 <div class="user-link__username">ÐÑ Ð¾Ð´</div> 156 157 158 </a> 159 160 161 <a class="tg-mobile" href="https://t.me/gdzraketa/" target="_blank"><i class="fab fa-telegram-plane"></i></a> 162 163 164 165 <button class="header__hamburger hamburger" type="button"> 166 <svg role="img" class="hamburger__open"> 167 <use href="/images/icons/sprite.svg#hamburger"/> 168 </svg> 169 <svg role="img" class="hamburger__close"> 170 <use href="/images/icons/sprite.svg#hamburger-close"/> 171 </svg> 172 </button> 173 174 175 </div> 176</header> 177 178<nav class="mobile-menu"> 179 <div class="container"> 180 <div class="mobile-menu__user user"> 181 <a href="#" class="user__avatar"> 182 <img src="/images/rocket.png" alt="alt" class="user__avatar-img img-responsive"/> 183 </a> 184 <a href="#" class="user__body"> 185 <div class="user__title">ÐÐ¼Ñ Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ</div> 186 <div class="user__text"></div> 187 </a> 188 <!-- <div class="user__btns"> 189 <a href="#" class="user__register btn btn--accent">РегиÑÑÑаÑиÑ</a> 190 <a href="#" class="user__login btn btn--ghost">ÐÑ Ð¾Ð´</a> 191 </div> --> 192 <a href="/login/logout.php" class="user__logout-btn logout-btn"> 193 <svg role="img" class="logout-btn__icon"> 194 <use href="/images/icons/sprite.svg#exit"></use> 195 </svg> 196 </a> 197 </div> 198 <ul class="mobile-menu__list list-unstyled"> 199 <li><a href="/lk/">ÐиÑнÑй кабинеÑ</a></li> 200 <!-- <li><a href="/blog/">Ðлог</a></li> --> 201 <!-- <li><a href="/reviews/">ÐÑзÑвÑ</a></li> --> 202 <!-- <li><a href="/mobile-app/">ÐобилÑное пÑиложение</a></li> --> 203 <li><a href="/contacts/">ÐонÑакÑÑ</a></li> 204 <li><a href="/premium/">ÐÑемиÑм подпиÑка</a></li> 205 </ul> 206 </div> 207</nav> 208
209<script src="/dist/jquery/jquery.min.js"></script>
209 210 211<div class="page"> 212 <div class="container"> 213 <div class="cabinet"> 214 215 <div class="page-centered"> 216 <div class="container"> 217 <form class="form-auth s-auth"> 218 <h1 class="form-auth__title">ÐойдиÑе в лиÑнÑй кабинеÑ</h1> 219 220 <p>ÐойÑи ÑеÑез ÑоÑÑеÑÑ:</p> 221 222 <div class="auth-methods-container" style="position: relative;"> 223 <div class="auth-blocker-overlay" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 10; cursor: pointer;"></div> 224 <div id="vk-auth-container" style="margin:32px 0;"> 225 </div> 226 </div> 227 <div class="VkSpiner" style="text-align: center;display: none"> 228 <span class="loader"></span> 229 </div> 230
230<script src="https://unpkg.com/@vkid/sdk@<3.0.0/dist-sdk/umd/index.js"></script>
230 231
231<script type="text/javascript"> 232 if ('VKIDSDK' in window) { 233 const VKID = window.VKIDSDK; 234 235 // ÐниÑиализаÑÐ¸Ñ ÐºÐ¾Ð½ÑигÑÑаÑии VK ID SDK 236 VKID.Config.init({ 237 app: 51942002, 238 redirectUrl: 'https://gdz-raketa.ru', 239 responseMode: VKID.ConfigResponseMode.Callback, 240 source: VKID.ConfigSource.LOWCODE, 241 scope: 'email' 242 }); 243 244 // СоздаÑм и ÑендеÑим ÑпиÑок ваÑианÑов авÑоÑизаÑии 245 const oAuth = new VKID.OAuthList(); 246 oAuth.render({ 247 container: document.getElementById('vk-auth-container'), 248 oauthList: ['vkid'] 249 }) 250 .on(VKID.WidgetEvents.ERROR, vkidOnError) 251 .on(VKID.OAuthListInternalEvents.LOGIN_SUCCESS, function (payload) { 252 const checkbox = document.querySelector('.s-auth input[type="checkbox"]'); 253 if (checkbox && !checkbox.checked) { 254 alert('ÐожалÑйÑÑа, дайÑе ÑоглаÑие на обÑабоÑÐºÑ Ð¿ÐµÑÑоналÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ , ÑÑÐ¾Ð±Ñ Ð¿ÑодолжиÑÑ.'); 255 checkbox.focus(); 256 return; 257 } 258 const code = payload.code; 259 const deviceId = payload.device_id; 260 261 // Ðбмен авÑоÑизаÑионного кода на ÑÐ¾ÐºÐµÐ½Ñ 262 VKID.Auth.exchangeCode(code, deviceId) 263 .then(function (tokenData) { 264 console.log('Ð¢Ð¾ÐºÐµÐ½Ñ Ð¸ даннÑе поÑле обмена:', tokenData); 265 266 // ÐолÑÑаем инÑоÑмаÑÐ¸Ñ Ð¾ полÑзоваÑеле Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Access token 267 VKID.Auth.userInfo(tokenData.access_token) 268 .then(function (userData) { 269 console.log('ÐаннÑе полÑзоваÑÐµÐ»Ñ ÑеÑез userInfo:', userData); 270 271 // ФоÑмиÑÑем обÑÐµÐºÑ Ð´Ð»Ñ Ð¾ÑпÑавки на ÑеÑÐ²ÐµÑ 272 const requestData = { 273 silent_token: tokenData.access_token, 274 uuid: tokenData.state || tokenData.uuid, 275 app_token: 'pebMomu3SGKpze06u4Je', 276 user_id: userData.user.user_id || userData.id, 277 first_name: userData.user.first_name || '', 278 last_name: userData.user.last_name || '', 279 email: userData.user.email || '' 280 }; 281 282 console.log('ÐÑпÑавлÑем даннÑе на ÑеÑвеÑ:', requestData); 283 284 // ÐÑпÑавлÑем даннÑе на ÑеÑÐ²ÐµÑ ÑеÑез POST-запÑÐ¾Ñ 285 fetch('https://adm.gdz-raketa.ru/app/auth/vk-auth/', { 286 method: 'POST', 287 headers: { 288 'Content-Type': 'application/json' 289 }, 290 body: JSON.stringify(requestData) 291 }) 292 .then(response => { 293 if (!response.ok) { 294 throw new Error(`HTTP error! СÑаÑÑÑ: ${response.status}`); 295 } 296 return response.json(); 297 }) 298 .then(result => { 299 if (result.success) { 300 console.log('ÐвÑоÑизаÑÐ¸Ñ ÑÑпеÑна:', result); 301 // ÐеÑенапÑавлÑем полÑзоваÑÐµÐ»Ñ 302 window.location.href = `${result.redirect_url}?${result.params}`; 303 } else { 304 console.error('ÐÑибка авÑоÑизаÑии на ÑеÑвеÑе:', result); 305 } 306 }) 307 .catch(error => { 308 console.error('ÐÑибка fetch-запÑоÑа:', error); 309 }); 310 }) 311 .catch(function (err) { 312 console.error('ÐÑибка в меÑоде VKID.Auth.userInfo:', err); 313 }); 314 }) 315 .catch(vkidOnError); 316 }); 317 318 // ФÑнкÑÐ¸Ñ Ð¾Ð±ÑабоÑки оÑибок авÑоÑизаÑии 319 function vkidOnError(error) { 320 console.error('ÐÑибка авÑоÑизаÑии ÑеÑез VK:', error); 321 } 322 } else { 323 console.error('VKIDSDK не найден в обÑекÑе window'); 324 } 325 </script>
325 326 <style> 327 .loader { 328 width: 48px; 329 height: 48px; 330 border: 5px solid #EFF2F7; 331 border-bottom-color: #eb1c4e; 332 border-radius: 50%; 333 display: inline-block; 334 box-sizing: border-box; 335 animation: rotation 1s linear infinite; 336 } 337 338 @keyframes rotation { 339 0% { 340 transform: rotate(0deg); 341 } 342 100% { 343 transform: rotate(360deg); 344 } 345 } 346 .VkIdSdk_oauth_link_text { 347 display: none !important; 348 } 349 </style> 350 351 <style> 352 .yandex-log{ 353 background: #ffcc00; 354 border-radius: 50px; 355 padding: 10px; 356 } 357 .yandex-log img{ 358 height: 28px; 359 margin-right: 12px; 360 } 361 .yandex-log span{ 362 display: inline-block; 363 height: 28px; 364 } 365 </style> 366 <div class="auth-methods-container" style="position: relative;"> 367 <div class="auth-blocker-overlay" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 10; cursor: pointer;"></div> 368 <!-- 369 <div style="margin-bottom: 20px;"> 370
370<script async="" src="https://telegram.org/js/telegram-widget.js?22" data-telegram-login="GdzRaketaBot" data-size="large" data-auth-url="https://adm.gdz-raketa.ru/app/auth/auth/telegram/callback/" data-request-access="write"></script>
370 371 </div> 372 --> 373 <div style="margin-bottom: 20px; background-color: #f5f5f5; color: #888; font-size: 13px; cursor: default; text-align: center; padding: 12px; line-height: 1.3; border: 1px solid #ddd; border-radius: 50px;"> 374 ÐвÑоÑизаÑÐ¸Ñ ÑеÑез Telegram оÑклÑÑена, обÑаÑиÑеÑÑ Ðº админиÑÑÑаÑоÑÑ 375 </div> 376 <a href="https://adm.gdz-raketa.ru/app/auth/auth/yandex/" class="yandex-auth-link" style="color: #fff; text-decoration: none"><div class="yandex-log"> 377 <img src="/images/icons/yalogo.svg" alt=""> <span>ÐойÑи ÑеÑез ЯндекÑ</span> 378 </div></a> 379 </div> 380 381<!-- <p class="push-btn">ÐÑи Ð²Ñ Ð¾Ð´Ðµ Ð²Ñ Ð¿ÑинимаеÑе <a href="/soglashenie/">ÑоглаÑие на обÑабоÑкÑ--> 382<!-- пеÑÑоналÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ </a> в ÑооÑвеÑÑÑвии Ñ ÐолиÑикой в оÑноÑении обÑабоÑки пеÑÑоналÑнÑÑ --> 383<!-- даннÑÑ </p>--> 384 <p class="push-btn" 385 style="font-size: 16px; color: #888; margin-top: 20px; text-align: center; line-height: 1.4;"> 386 <label> 387 <input type="checkbox" required> 388 Я Ð´Ð°Ñ ÑоглаÑие на <a href="/soglasie-na-obrabotku/" target="_blank">обÑабоÑÐºÑ Ð¿ÐµÑÑоналÑнÑÑ 389 даннÑÑ </a> 390 </label> 391 </p> 392
392<script> 393 document.addEventListener('DOMContentLoaded', function() { 394 const checkbox = document.querySelector('.s-auth input[type="checkbox"]'); 395 const blockers = document.querySelectorAll('.s-auth .auth-blocker-overlay'); 396 const yandexLink = document.querySelector('.s-auth .yandex-auth-link'); 397 398 if (yandexLink) { 399 yandexLink.addEventListener('click', function(e) { 400 if (checkbox && !checkbox.checked) { 401 e.preventDefault(); 402 alert('ÐожалÑйÑÑа, дайÑе ÑоглаÑие на обÑабоÑÐºÑ Ð¿ÐµÑÑоналÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ , ÑÑÐ¾Ð±Ñ Ð¿ÑодолжиÑÑ.'); 403 checkbox.focus(); 404 } 405 }); 406 } 407 408 const updateBlocker = function() { 409 blockers.forEach(blocker => { 410 if (checkbox && checkbox.checked) { 411 blocker.style.display = 'none'; 412 } else { 413 blocker.style.display = 'block'; 414 } 415 }); 416 }; 417 if (checkbox) { 418 checkbox.addEventListener('change', updateBlocker); 419 blockers.forEach(blocker => { 420 blocker.addEventListener('click', function(e) { 421 e.stopPropagation(); 422 alert('ÐожалÑйÑÑа, дайÑе ÑоглаÑие на обÑабоÑÐºÑ Ð¿ÐµÑÑоналÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ , ÑÑÐ¾Ð±Ñ Ð¿ÑодолжиÑÑ.'); 423 checkbox.focus(); 424 }); 425 }); 426 updateBlocker(); 427 } 428 }); 429 </script>
429 430 431 432 433 </form> 434 <div> 435 436 </div> 437 <form class="form-auth s-edit"> 438 <h1 class="form-auth__title">РегиÑÑÑаÑиÑ</h1> 439 <div class="form-auth__controls"> 440 <div class="form-auth__group group-control"> 441 <div class="group-control__header"> 442 <label for="firstname" class="group-control__label">ÐаÑе имÑ</label> 443 </div> 444 <div class="group-control__wrap"> 445 <input type="text" class="group-control__control control" id="firstname" 446 placeholder="forexample"/> 447 </div> 448 </div> 449 <div class="form-auth__group group-control"> 450 <div class="group-control__header"> 451 <label for="email" class="group-control__label">ÐÐ°Ñ e-mail</label> 452 </div> 453 <div class="group-control__wrap"> 454 <input type="email" class="group-control__control control" id="email" 455 placeholder="[email protected]"/> 456 </div> 457 </div> 458 </div> 459 <div class="form-auth__btns"> 460 <button class="form-auth__submit btn btn--accent" type="submit">РегиÑÑÑаÑиÑ</button> 461 </div> 462 </form> 463 </div> 464 </div> 465 466 467 </div> 468 </div> 469</div> 470 471 472<!-- prettier-ignore --> 473 474 475 476 477 478 479 480 481 482 483 484 485 486<div>
487<script> 488 window.yaContextCb.push(() => { 489 setTimeout(() => { 490 Ya.Context.AdvManager.render({ 491 "blockId": "R-A-1836312-2", 492 "type": "fullscreen", 493 "platform": "touch" 494 }); 495 496 setInterval(() => { 497 Ya.Context.AdvManager.render({ 498 "blockId": "R-A-1836312-2", 499 "type": "fullscreen", 500 "platform": "touch" 501 }); 502 }, 5 * 60 * 1000); 503 504 }, 40 * 1000); 505}); 506</script>
506 507</div> 508 509 510 511 512 513 514 515 516<div class="stick-desktop">
517<script> 518 window.yaContextCb.push(() => { 519 setTimeout(() => { 520 if (!window.isLentaVisible) { 521 Ya.Context.AdvManager.render({ 522 "blockId": "R-A-1836312-129", 523 "type": "floorAd", 524 "platform": "desktop" 525 }); 526 } 527 528 setInterval(() => { 529 if (!window.isLentaVisible) { 530 Ya.Context.AdvManager.render({ 531 "blockId": "R-A-1836312-129", 532 "type": "floorAd", 533 "platform": "desktop" 534 }); 535 } 536 }, 45 * 1000); 537 538 }, 10 * 1000); 539}); 540</script>
540 541</div> 542 543 544 545 546 547<div>
548<script> 549 window.yaContextCb.push(() => { 550 setTimeout(() => { 551 Ya.Context.AdvManager.render({ 552 "blockId": "R-A-1836312-128", 553 "type": "fullscreen", 554 "platform": "desktop" 555 }); 556 557 setInterval(() => { 558 Ya.Context.AdvManager.render({ 559 "blockId": "R-A-1836312-128", 560 "type": "fullscreen", 561 "platform": "desktop" 562 }); 563 }, 5 * 60 * 1000); 564 565 }, 40 * 1000); 566}); 567</script>
567 568</div> 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583<!-- <div>
584<script> 585setTimeout(() => { 586window.yaContextCb.push(() => { 587 Ya.Context.AdvManager.render({ 588 "blockId": "R-A-1836312-129", 589 "type": "floorAd", 590 "platform": "desktop" 591 }) 592}) 593}, 7000); 594</script>
594 595</div> 596 597 598 599 600 601 602<div>
603<script> 604setTimeout(() => { 605window.yaContextCb.push(() => { 606 Ya.Context.AdvManager.render({ 607 "blockId": "R-A-1836312-1", 608 "type": "floorAd", 609 "platform": "touch" 610 }) 611}) 612}, 7000); 613</script>
613 614</div> --> 615 616 617 <!-- ÐÑо Ð´Ð»Ñ ÑлайдеÑа в блоке ÑекомендаÑÐ¸Ñ START--> 618 619
619<script> 620 const sliderContainer = document.getElementById('sliderContainer'); 621 let isDragging = false; 622 let startX; 623 let startScrollLeft; 624 let moved = false; 625 let link = null; 626 627 const handleMouseDown = (e) => { 628 moved = false; 629 isDragging = true; 630 startX = e.pageX - sliderContainer.offsetLeft; 631 startScrollLeft = sliderContainer.scrollLeft; 632 sliderContainer.style.cursor = 'grabbing'; 633 sliderContainer.style.scrollBehavior = 'auto'; 634 635 // Ðапоминаем ÑÑÑÐ»ÐºÑ Ð¸ вÑеменно оÑклÑÑаем ÐµÑ 636 link = e.target.closest('a'); 637 if(link) { 638 link.style.pointerEvents = 'none'; 639 } 640 }; 641 642 const handleMouseMove = (e) => { 643 if (!isDragging) return; 644 645 if(!moved && Math.abs(e.pageX - startX) > 3) { 646 moved = true; 647 } 648 649 if(moved) { 650 e.preventDefault(); 651 const x = e.pageX - sliderContainer.offsetLeft; 652 const walk = (x - startX) * 1; 653 sliderContainer.scrollLeft = startScrollLeft - walk; 654 } 655 }; 656 657 const handleMouseUp = (e) => { 658 isDragging = false; 659 sliderContainer.style.cursor = 'grab'; 660 sliderContainer.style.scrollBehavior = 'smooth'; 661 662 if(link) { 663 // ÐоÑÑÑанавливаем ÑÑÑÐ»ÐºÑ Ð¸ пÑовеÑÑем бÑл ли дÑаг 664 link.style.pointerEvents = 'auto'; 665 666 if(!moved) { 667 window.location.href = link.href; 668 } 669 670 link = null; 671 } 672 }; 673 674 sliderContainer.addEventListener('mousedown', handleMouseDown); 675 document.addEventListener('mousemove', handleMouseMove); 676 document.addEventListener('mouseup', handleMouseUp); 677 </script>
677 678 679 680<!-- ÐÑо Ð´Ð»Ñ ÑлайдеÑа в блоке ÑекомендаÑÐ¸Ñ --> 681 682 683 684<style> 685/* ===== ÐÐÐЫРФУТÐÐ ===== */ 686 687.site-footer { 688 margin-top: 60px; 689 padding: 50px 0 30px; 690 background: linear-gradient(180deg, #f8fafc 0%, #e8f0ff 100%); 691 border-top: 1px solid #dbeafe; 692 position: relative; 693 overflow: hidden; 694 font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Arial, sans-serif; 695} 696 697/* мÑгкое ÑвеÑение */ 698.site-footer::before { 699 content: ""; 700 position: absolute; 701 top: -100px; 702 left: 50%; 703 transform: translateX(-50%); 704 width: 600px; 705 height: 260px; 706 background: radial-gradient(circle, rgba(37,99,235,0.12), transparent 70%); 707 filter: blur(60px); 708 pointer-events: none; 709} 710 711/* конÑÐµÐ¹Ð½ÐµÑ */ 712.site-footer-container { 713 max-width: 816px; 714 margin: 0 auto; 715 padding: 0 20px; 716 position: relative; 717 box-sizing: border-box; 718} 719 720/* веÑÑ */ 721.site-footer-top { 722 display: flex; 723 justify-content: space-between; 724 align-items: flex-start; 725 gap: 20px; 726 margin-bottom: 20px; 727} 728 729/* бÑенд */ 730.site-footer-brand { 731 max-width: none; 732 width: 100%; 733} 734 735.site-footer-logo { 736 width: 150px; 737} 738 739.site-footer-slogan { 740 font-size: 14px; 741 color: #64748b; 742 margin-top: 0; 743 max-width: 260px; 744 margin-bottom: 15px; 745} 746 747/* ÑÐ¾Ñ */ 748.site-footer-socials { 749 display: flex; 750 gap: 6px; 751 margin-top: 10px; 752} 753 754.site-footer-social { 755 width: 40px; 756 height: 40px; 757 background: #f1f5f9; 758 border-radius: 6px; 759 display: flex; 760 align-items: center; 761 justify-content: center; 762 transition: all 0.2s ease; 763 text-decoration: none; 764} 765 766.site-footer-social img { 767 width: 32px; 768 transition: transform 0.2s ease; 769 border-radius: 8px; 770} 771 772.site-footer-social:hover { 773 background: #dbeafe; 774 transform: translateY(-2px); 775} 776 777.site-footer-social:hover img { 778 transform: scale(1.1); 779} 780 781/* кнопка оÑибки */ 782.site-footer-error { 783 background: linear-gradient(135deg, #EB1C4E 0%, #ff4d6d 100%); 784 color: white; 785 border: none; 786 border-radius: 10px; 787 padding: 10px 25px; 788 font-size: 14px; 789 font-weight: 700; 790 cursor: pointer; 791 transition: all 0.25s ease; 792 margin-top: 7px; 793 margin-left: 40px; 794} 795 796.site-footer-error:hover { 797 transform: translateY(-3px); 798 box-shadow: 799 0 10px 25px rgba(235,28,78,0.35), 800 0 0 12px rgba(235,28,78,0.25); 801} 802 803.site-footer-social-row { 804 display: flex; 805 align-items: center; 806 width: 100%; 807} 808 809/* ÑÑÑлки */ 810.site-footer-links { 811 display: grid; 812 grid-template-columns: repeat(3, 1fr); 813 gap: 10px 40px; 814 margin-bottom: 20px; 815} 816 817.site-footer-links a { 818 font-size: 15px; 819 color: #475569; 820 text-decoration: none; 821} 822 823.site-footer-links a:hover { 824 color: #2563eb; 825} 826 827/* ÑÑ */ 828.site-footer-legal { 829 font-size: 14px; 830 color: #94a3b8; 831 margin-bottom: 25px; 832} 833 834.site-footer-legal a { 835 margin-right: 14px; 836 color: inherit; 837 text-decoration: none; 838} 839 840.site-footer-legal a:hover { 841 color: #2563eb; 842} 843 844/* низ */ 845.site-footer-bottom { 846 border-top: 1px solid #e5e7eb; 847 padding-top: 15px; 848 display: flex; 849 align-items: center; 850 gap: 20px; 851 flex-wrap: wrap; 852} 853 854/* плаÑежки */ 855.site-footer-payments { 856 display: flex; 857 gap: 12px; 858 flex-wrap: wrap; 859 align-items: center; 860} 861 862.site-footer-pay img { 863 height: 18px; 864} 865 866.site-footer-pay.tbank img { 867 height: 19px; 868} 869 870.site-footer-copy { 871 font-size: 12px; 872 color: #94a3b8; 873} 874 875/* адапÑив */ 876@media (max-width: 640px) { 877 .site-footer-top { 878 flex-direction: column; 879 align-items: flex-start; 880 } 881 882 .site-footer-error { 883 margin-left: 0; 884 margin-top: 12px; 885 } 886 887 .site-footer-links { 888 grid-template-columns: 1fr; 889 } 890} 891</style> 892 893<footer class="site-footer"> 894 <div class="site-footer-container"> 895 896 <!-- веÑÑ --> 897 <div class="site-footer-top"> 898 899 <div class="site-footer-brand"> 900 <img src="/images/logo.png" class="site-footer-logo" alt="GDZ" onerror="this.src='/images/logo-white.png'"> 901 902 <p class="site-footer-slogan"> 903 Твой лÑÑÑий помоÑник в ÑеÑении домаÑÐ½Ð¸Ñ Ð·Ð°Ð´Ð°Ð½Ð¸Ð¹ 904 </p> 905 906 <div class="site-footer-social-row"> 907 908 <div class="site-footer-socials"> 909 <a href="https://vk.com/gdzraketa/" class="site-footer-social"> 910 <img src="/images/icons/vk.svg" alt="ÐÐонÑакÑе"> 911 </a> 912 <a href="https://t.me/gdzraketa/" class="site-footer-social"> 913 <img src="/images/icons/tg.svg" alt="Telegram"> 914 </a> 915 <a href="#" class="site-footer-social"> 916 <img src="/images/icons/rutube.svg" alt="Rutube"> 917 </a> 918 <a href="#" class="site-footer-social"> 919 <img src="/images/icons/max.png" alt="MAX"> 920 </a> 921 </div> 922 923 <button class="site-footer-error" onclick="window.location.href='#ModalWindow'"> 924 ÐаÑли оÑибкÑ? 925 </button> 926 927 </div> 928 929 </div> 930 931 </div> 932 933 <!-- ÑÑÑлки --> 934 <div class="site-footer-links"> 935 <a href="/about-us/">РнаÑ</a> 936 <a href="/blog/">Ðлог</a> 937 <!-- <a href="/ai/">AI-помоÑник</a> --> 938 <a href="/reviews/">ÐÑзÑвÑ</a> 939 <a href="/sitemap/">ÐаÑÑа ÑайÑа</a> 940 <a href="/lk/">ÐиÑнÑй кабинеÑ</a> 941 <a href="/contacts/">ÐонÑакÑÑ</a> 942 <a href="/reklama/">ÐÐ»Ñ ÑекламодаÑелей</a> 943 <a href="/premium/">ÐÑемиÑм подпиÑка</a> 944 <a href="/pravoobladateljam/">ÐÑавообладаÑелÑм</a> 945 <!-- <a href="/predlozhit-uluchshenie/">ÐÑедложиÑÑ ÑлÑÑÑение</a> --> 946 <!-- <a href="/mobile-app/">ÐобилÑное пÑиложение</a> --> 947 </div> 948 949 <!-- ÑÑидиÑеÑкие --> 950 <div class="site-footer-legal"> 951 <a href="/oferta/">
951ÐÑблиÑÐ½Ð°Ñ Ð¾ÑеÑÑа</a> 952 <a href="/polzovatelskoe-soglashenie/">ÐолÑзоваÑелÑÑкое ÑоглаÑение</a> 953 <a href="/soglashenie/">СоглаÑие на обÑабоÑÐºÑ Ð¿ÐµÑÑоналÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ </a> 954 </div> 955 956 <!-- низ --> 957 <div class="site-footer-bottom"> 958 <div class="site-footer-payments"> 959 <div class="site-footer-pay"><img src="/images/payments/visa.svg" alt="Visa"></div> 960 <div class="site-footer-pay"><img src="/images/payments/mastercard.svg" alt="Mastercard"></div> 961 <div class="site-footer-pay"><img src="/images/payments/mir.svg" alt="ÐÐÐ "></div> 962 <div class="site-footer-pay tbank"><img src="/images/payments/tbank.png" alt="Т-Ðанк"></div> 963 </div> 964 965 <div class="site-footer-copy"> 966 © 2026 GDZ-raketa.ru â ÐÑе пÑава заÑиÑÐµÐ½Ñ 967 </div> 968 </div> 969 970 </div> 971</footer> 972 973 974 975<div id="ModalWindow" class="Modal"> 976 <div class="Modal_Body"> 977 <!-- begin --> 978 <form id="form-contact" method="POST" class="contact-form" autocomplete="off" enctype="multipart/form-data"> 979 980 <p class="contact-form__title">ÐаполниÑе ÑоÑмÑ</p> 981 982 <div class="preloader"></div> 983 984 985 <!-- Ðоле Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ --> 986 <div class="contact-form__input-wrapper contact-form__input-wrapper_name hidden"> 987 <input name="name" type="hidden" class="contact-form__input contact-form__input_name" 988 value="https://gdz-raketa.ru/login/"> 989 </div> 990 991 992 <fieldset class="updateform"> 993 <legend>ÐÑбеÑиÑе Ñип оÑибки:</legend> 994 995 <div class="contact-form__input-wrapper"> 996 <input type="radio" id="huey" name="error" value="ÐÑлиÑаеÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ" 997 class="contact-form__input contact-form__input_theme radio" required=""> 998 <label for="huey">ÐÑлиÑаеÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ</label> 999 </div> 1000 1001 <div class="contact-form__input-wrapper"> 1002 <input type="radio" id="louie" name="error" value="Рзадании еÑÑÑ Ð¾Ñибка" 1003 class="contact-form__input contact-form__input_theme radio" required=""> 1004 <label for="louie">Рзадании еÑÑÑ Ð¾Ñибка</label> 1005 </div> 1006 1007 <div class="contact-form__input-wrapper"> 1008 <input type="radio" id="dewey" name="error" value="ÐеполнÑй оÑвеÑ" 1009 class="contact-form__input contact-form__input_theme radio" required=""> 1010 <label for="dewey">ÐеполнÑй оÑвеÑ</label> 1011 </div> 1012 </fieldset> 1013 1014 1015 <!-- Ðоле Ñ ÑелеÑоном --> 1016 <!-- <div class="contact-form__input-wrapper contact-form__input-wrapper_email"> 1017 <input name="email" type="email" class="contact-form__input contact-form__input_email" 1018 placeholder="ÐведиÑе Ð²Ð°Ñ email"> 1019 </div> --> 1020 1021 <div class="contact-form__input-wrapper contact-form__input-wrapper_textarea"> 1022 <span class="comment">ÐомменÑаÑий:</span> 1023 <textarea name="textarea" class="contact-form__input contact-form__input_textarea" 1024 placeholder="СообÑиÑе в каком номеÑе пÑоблема.."></textarea> 1025 </div> 1026 1027 1028 <!--Ðоле Ñ Ñемой в пиÑÑме--> 1029 <input name="theme" type="hidden" class="contact-form__input contact-form__input_theme" 1030 value="СообÑение Ñ ÑайÑа gdz-raketa.ru"> 1031 1032 <!-- <input name="error1" type="hidden" class="contact-form__input contact-form__input_theme" 1033 value="ÐÑлиÑаеÑÑÑ Ð·Ð°Ð´Ð°Ð½Ð¸Ðµ"> 1034 1035 <input name="error2" type="hidden" class="contact-form__input contact-form__input_theme" 1036 value="Рзадании еÑÑÑ Ð¾Ñибка"> 1037 1038 <input name="error3" type="hidden" class="contact-form__input contact-form__input_theme" 1039 value="ÐеполнÑй оÑвеÑ"> --> 1040 1041 1042 <!--Ðнопка оÑпÑавки ÑоÑмÑ--> 1043 <!-- <p class="push-btn">ÐÐ°Ð¶Ð¸Ð¼Ð°Ñ Â«ÐÑпÑавиÑÑ», Ð²Ñ Ð¿ÑедоÑÑавлÑеÑе <a href="/soglashenie/">СоглаÑие на обÑабоÑÐºÑ Ð¿ÐµÑÑоналÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ </a> в ÑооÑвеÑÑÑвии Ñ ÐолиÑикой в оÑноÑении обÑабоÑки пеÑÑоналÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ </p> --> 1044 <button type="submit" class="contact-form__button">ÐÑпÑавиÑÑ</button> 1045 1046 </form> 1047 <div class="contact-form__image" style="display:none;text-align: center;"> 1048 <img src="/images/knowledge_x1.png" 1049 srcset="/images/knowledge_x1.png 1x, /images/knowledge_x2.png 2x" alt="" 1050 class="img-responsive" style="display: inline;"/> 1051 <img src="/images/stars-lg.png" srcset="/images/stars-lg.png 1x,/images/stars-lg-2x.png 2x" 1052 alt="" class="gift-img-item__stars" /> 1053 <img src="/images/stars-lg.png" srcset="/images/stars-lg.png 1x,/images/stars-lg-2x.png 2x" 1054 alt="" class="gift-img-item__stars" /> 1055 <img src="/images/cloud.png" alt="" class="gift-img-item__cloud" /> 1056 <img src="/images/cloud.png" alt="" class="gift-img-item__cloud" /> 1057 </div> 1058 1059 <p class="contact-form__message"></p> 1060 <!-- end --> 1061 <a href="#ModalWindowClose" id="clos" class="close-form">+</a> 1062 </div> 1063</div> 1064 1065 1066 1067 1068<div id="ModalWindow2" class="Modal"> 1069 <div class="Modal_Body"> 1070 <!-- begin --> 1071 <div class="footer__rocket"> 1072 <img src="/images/liftoff-footer.png" 1073 srcset="/images/liftoff-footer.png 1x, /images/liftoff-footer-2x.png 2x" alt="alt" 1074 class="img-responsive" loading="lazy" data-aos="fade-up" data-aos-delay="350" 1075 data-aos-duration="1000"/> 1076 </div> 1077 <img src="/images/stars-lg.png" srcset="/images/stars-lg.png 1x,/images/stars-lg-2x.png 2x" 1078 alt="alt" class="gift-img-item__stars" loading="lazy" data-aos="fade" data-aos-delay="50" 1079 data-aos-duration="1000"/> 1080 <img src="/images/stars-lg.png" srcset="/images/stars-lg.png 1x,/images/stars-lg-2x.png 2x" 1081 alt="alt" class="gift-img-item__stars" loading="lazy" data-aos="fade" data-aos-delay="50" 1082 data-aos-duration="1000"/> 1083 <img src="/images/cloud.png" alt="alt" class="gift-img-item__cloud" loading="lazy" 1084 data-aos="fade-left" data-aos-delay="50" data-aos-duration="1500"/> 1085 <img src="/images/cloud.png" alt="alt" class="gift-img-item__cloud" loading="lazy" 1086 data-aos="fade-left" data-aos-delay="50" data-aos-duration="1500"/> 1087 <p> 1088 ÐÐ»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ð²Ð¾Ð¹Ð´Ð¸Ñе на ÑÐ°Ð¹Ñ 1089 </p> 1090 <a href="/login/" class="space-item__btn btn btn--accent">ÐойÑи</a> 1091 <!-- end --> 1092 <a href="#ModalWindow2Close" id="clos" class="close-form">+</a> 1093 </div> 1094</div> 1095 1096 1097 1098<div id="ModalWindow3" class="Modal"> 1099 <div class="Modal_Body"> 1100 <!-- begin --> 1101 <div class="gift-box"> 1102 <img src="/images/gift-box.png" 1103 srcset="/images/gift-box.png 1x, /images/gift-box-x2.png 2x" alt="alt" 1104 class="img-responsive"/> 1105 </div> 1106 <p class="gift-title"> 1107 ÐÑемиÑм подпиÑка в подаÑок! 1108 </p> 1109 <p class="gift-desc"> 1110 СпеÑиалÑно Ð´Ð»Ñ Ð½Ð¾Ð²ÑÑ Ð¿Ð¾Ð»ÑзоваÑелей даÑим пÑемиÑм подпиÑÐºÑ Ð½Ð° 7 дней в подаÑок, ÑÑÐ¾Ð±Ñ Ð²Ñ Ñмогли оÑениÑÑ Ð²Ñе 1111 пÑеимÑÑеÑÑва пÑиложениÑ. 1112 </p> 1113 <a href="/premium/get-trial.php" class="space-item__btn btn btn--accent">ÐолÑÑиÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑкÑ</a> 1114 <p class="gift-subdesc">ÐоÑле нажаÑÐ¸Ñ Ð½Ð° ÐºÐ½Ð¾Ð¿ÐºÑ "ÐолÑÑиÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑкÑ", пÑемиÑм подпиÑка наÑнÑÑ Ð´ÐµÐ¹ÑÑвоваÑÑ Ñовно 7 дней а 1115 заÑем авÑомаÑиÑеÑки оÑклÑÑиÑÑÑ.</p> 1116 <!-- end --> 1117 <a href="#ModalWindow3Close" id="clos" class="close-form">+</a> 1118 </div> 1119</div> 1120 1121 1122 1123 1124 1125
1126<script src="/js/app.js"></script>
1126<script src="/dist/jquery/jquery.mask.min.js"></script>
1126<script src="/login/scripts.js?v=1.01"></script>
1126
1126<script> 1127 $(document).ready(function () { 1128 // РаÑÑÑиÑÑваем вÑÑоÑÑ Ð¸ колиÑеÑÑво блоков 1129 var documentHeight = $(document).height(); 1130 var viewportHeight = Math.round((documentHeight - 785) / 1500); 1131 if ($('.comments-block').length) { 1132 viewportHeight++; 1133 } 1134 // УбедимÑÑ, ÑÑо viewportHeight не менÑÑе 1 1135 viewportHeight = Math.max(1, viewportHeight); 1136 1137 // ÐÑовеÑка, ÑÑо вÑÑоÑа коÑÑекÑна Ð´Ð»Ñ ÑаÑÑеÑа 1138 if (viewportHeight <= 0) { 1139 console.error("ÐÑибка: viewportHeight <= 0, невозможно ÑаÑÑÑиÑаÑÑ kolRek."); 1140 return; // ÐÑекÑаÑаем вÑполнение 1141 } 1142 1143 var kolRek = 100 / viewportHeight; 1144 kolRek = kolRek + "%"; // ÐÑÑоÑа каждого блока в пÑоÑенÑÐ°Ñ 1145 1146 $('body').addClass('with-sidebar'); 1147 1148 // 1. СнаÑала загÑÑжаем оÑновной конÑÐµÐ¹Ð½ÐµÑ ÑайдбаÑа 1149 $.get('/parts/right-sidebar.php') 1150 .done(function (sidebarData) { 1151 // ÐобавлÑем конÑÐµÐ¹Ð½ÐµÑ ÑайдбаÑа в body 1152 $('body').append(sidebarData); 1153 const container = $('.right-sidebar'); // ÐÐ°Ñ Ð¾Ð´Ð¸Ð¼ конÑÐµÐ¹Ð½ÐµÑ Ð¿Ð¾Ñле Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ 1154 1155 // ÐÑли конÑÐµÐ¹Ð½ÐµÑ Ð½Ðµ найден, вÑÑ Ð¾Ð´Ð¸Ð¼ 1156 if (!container.length) { 1157 console.error("ÐÑиÑиÑеÑÐºÐ°Ñ Ð¾Ñибка: ÐÐ»ÐµÐ¼ÐµÐ½Ñ .right-sidebar ÐÐ ÐÐÐÐÐРв DOM поÑле добавлениÑ!"); 1158 return; 1159 } 1160 1161 // 2. Создаем маÑÑив Ð´Ð»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¿ÑомиÑов 1162 var adPromises = []; 1163 1164 // ÐинамиÑеÑки полÑÑаем колиÑеÑÑво ÑекламнÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² из PHP 1165 const maxAdBlocks = 4; 1166 const blocksToLoad = Math.min(viewportHeight, maxAdBlocks); 1167 1168 // ФоÑмиÑÑем пÑомиÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ блока 1169 for (let i = 1; i <= blocksToLoad; i++) { 1170 let path = '/parts/right-ad/' + i + '.php'; 1171 // ÐÑполÑзÑем .then() Ð´Ð»Ñ Ð¾Ð±ÑабоÑки ÑÑÐ¿ÐµÑ Ð° и оÑибки 1172 let promise = $.get(path) 1173 .then( 1174 // ФÑнкÑÐ¸Ñ Ð£Ð¡ÐÐÐ¥Ð: пÑоÑÑо возвÑаÑаем даннÑе 1175 function(data) { 1176 return data; // ÐозвÑаÑаем даннÑе Ð´Ð»Ñ $.when 1177 }, 1178 // ФÑнкÑÐ¸Ñ ÐШÐÐÐÐ: логиÑÑем и возвÑаÑаем null 1179 function(jqXHR, textStatus, errorThrown) { 1180 console.warn("Ðе ÑдалоÑÑ Ð·Ð°Ð³ÑÑзиÑÑ Ð±Ð»Ð¾Ðº:", path, "СÑаÑÑÑ:", textStatus, "ÐÑибка:", errorThrown); 1181 // ÐозвÑаÑаем null, ÑÑÐ¾Ð±Ñ $.when не пÑеÑвалÑÑ. 1182 return null; 1183 } 1184 ); 1185 adPromises.push(promise); // ÐобавлÑем пÑомиÑ, возвÑаÑеннÑй .then() 1186 } 1187 1188 // ÐÑли Ð½ÐµÑ Ð¿ÑомиÑов, вÑÑ Ð¾Ð´Ð¸Ð¼ 1189 if (adPromises.length === 0) { 1190 return; 1191 } 1192 1193 // 3. ÐÑполÑзÑем $.when Ð´Ð»Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑазÑеÑÐµÐ½Ð¸Ñ ÐСÐÐ¥ пÑомиÑов 1194 $.when.apply($, adPromises) 1195 .done(function () { 1196 // 'arguments' ÑодеÑÐ¶Ð¸Ñ ÐРЯÐЫРÑезÑлÑÑаÑÑ: data или null 1197 let addedBlocksCount = 0; 1198 const results = adPromises.length === 1 ? [arguments[0]] : Array.from(arguments); 1199 1200 // ÐеÑебиÑаем ÑезÑлÑÑаÑÑ Ð¸ добавлÑем ÑÑпеÑнÑе блоки 1201 for (let i = 0; i < results.length; i++) { 1202 let resultData = results[i]; // РезÑлÑÑÐ°Ñ - ÑÑо data или null 1203 if (resultData !== null) { 1204 try { 1205 container.append(resultData); 1206 addedBlocksCount++; 1207 } catch (e) { 1208 // ÐогиÑÑем оÑибкÑ, еÑли не ÑдалоÑÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñе даннÑе 1209 console.error("ÐШÐÐÐРпÑи добавлении блока #" + i + " в конÑейнеÑ:", e); 1210 console.error("ÐаннÑе блока, вÑзвавÑие оÑибкÑ:", resultData); 1211 } 1212 } 1213 } 1214 1215 // 4. УÑÑанавливаем вÑÑоÑÑ Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½ÑÑ Ð±Ð»Ð¾ÐºÐ¾Ð² 1216 if (addedBlocksCount > 0) { 1217 container.children('div').css('height', kolRek); 1218 } 1219 }) 1220 .fail(function () { 1221 // ÐÑа веÑка .fail() ÑепеÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑно должна бÑÑÑ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ð¾Ð¹ 1222 console.error("ÐÑиÑиÑеÑÐºÐ°Ñ Ð¾Ñибка: $.when ÐÐ ÐÐÐÐРШÐÐСЯ ÑÑпеÑно. ÐÑо ÐЧÐÐЬ неожиданно."); 1223 console.error("ÐÑгÑменÑÑ Ð² .fail():", arguments); 1224 }); 1225 }) 1226 .fail(function (jqXHR, textStatus, errorThrown) { 1227 // ÐбÑабоÑка оÑибки, еÑли не ÑдалоÑÑ Ð·Ð°Ð³ÑÑзиÑÑ Ð¾Ñновной ÑÐ°Ð¹Ð´Ð±Ð°Ñ 1228 console.error("Ðе ÑдалоÑÑ Ð·Ð°Ð³ÑÑзиÑÑ Ð¾Ñновной ÑÐ°Ð¹Ð´Ð±Ð°Ñ /parts/right-sidebar.php. СÑаÑÑÑ:", textStatus, "ÐÑибка:", errorThrown); 1229 }); 1230 }); 1231 </script>
1231 1232 1233 <!-- ÐгÑаниÑение Ñекламного липкого блока ÑпÑава и блока в ÑÑÑеÑе --> 1234 <style> 1235 .addSticky > div { 1236 max-height: calc(100vh - 190px); 1237 overflow: hidden; 1238 } 1239 .addSticky > .vidget + div { 1240 max-height: calc(100vh - 365px); 1241 } 1242 1243 1244 .addSticky { 1245 transition: opacity 0.2s ease, clip-path 0.2s ease; 1246 } 1247 1248 .is-hidden-by-footer { 1249 opacity: 0 !important; 1250 /* ÐбÑезаем 100% конÑенÑа (ÑвеÑÑ Ñ, ÑпÑава, ÑнизÑ, Ñлева) */ 1251 clip-path: inset(100% 100% 100% 100%) !important; 1252 } 1253 1254 </style> 1255<!--
1255<script src="/dist/jquery/jquery.min.js"></script>
1255--> 1256
1256<script> 1257 $(document).ready(function() { 1258 // ÐпаÑÐ½Ð°Ñ Ð·Ð¾Ð½Ð°: вÑÑоÑа окна минÑÑ 126px (Ñ Ð·Ð°Ð¿Ð°Ñом Ð´Ð»Ñ Ð½Ð¸Ð¶Ð½ÐµÐ³Ð¾ блока 125px). ÐзнаÑалÑно бÑал 140, но не вÑе ÑекламнÑе блоки вмеÑалиÑÑ 1259 let bottomThreshold = $(window).height() - 126; 1260 1261 // ÐбновлÑем поÑог пÑи ÑеÑайзе окна, ÑÑÐ¾Ð±Ñ Ð½Ð° ÑазнÑÑ Ð¼Ð¾Ð½Ð¸ÑоÑÐ°Ñ Ð²ÑÑ ÑабоÑало ÑеÑко 1262 $(window).on('resize', function() { 1263 bottomThreshold = $(window).height() - 126; 1264 }); 1265 1266 $(window).on('scroll', function() { 1267 $('.addSticky').each(function() { 1268 let $block = $(this); 1269 let rect = this.getBoundingClientRect(); 1270 1271 // ÐÑли нижний кÑай липкого блока залез в опаÑнÑÑ Ð·Ð¾Ð½Ñ 1272 if (rect.bottom > bottomThreshold) { 1273 // ÐÑÑÑем и оÑклÑÑаем клики 1274 $block.addClass('is-hidden-by-footer'); 1275 } else { 1276 // ÐозвÑаÑаем видимоÑÑÑ Ð¸ кликабелÑноÑÑÑ 1277 $block.removeClass('is-hidden-by-footer'); 1278 } 1279 }); 1280 }); 1281 1282 // ÐапÑÑк пÑи загÑÑзке 1283 $(window).trigger('scroll'); 1284 }); 1285 </script>
1285 1286 1287 <!-- END ÐгÑаниÑение Ñекламного липкого блока ÑпÑава и блока в ÑÑÑеÑе END --> 1288 1289 1290 <!-- Ðопап авÑоÑизаÑии --> 1291 <style> 1292 .auth-popup-content a:hover{ 1293 text-decoration: none; 1294 } 1295 .auth-popup-overlay { 1296 position: fixed; 1297 top: 0; 1298 left: 0; 1299 width: 100%; 1300 height: 100%; 1301 background: rgba(0, 0, 0, 0.5); 1302 z-index: 9999; 1303 display: flex; 1304 justify-content: center; 1305 align-items: center; 1306 } 1307 .auth-popup-content { 1308 background: #fff; 1309 padding: 30px; 1310 border-radius: 16px; 1311 width: 90%; 1312 max-width: 400px; 1313 position: relative; 1314 box-shadow: 0 10px 25px rgba(0,0,0,0.2); 1315 } 1316 .auth-popup-close { 1317 position: absolute; 1318 top: 15px; 1319 right: 15px; 1320 font-size: 28px; 1321 line-height: 1; 1322 cursor: pointer; 1323 color: #999; 1324 } 1325 .auth-popup-close:hover { 1326 color: #333; 1327 } 1328 .auth-popup-title { 1329 text-align: center; 1330 margin-top: 0; 1331 margin-bottom: 10px; 1332 font-size: 20px; 1333 font-weight: 700; 1334 color: #333; 1335 } 1336 .auth-popup-subtitle { 1337 display: flex; 1338 align-items: center; 1339 justify-content: center; 1340 margin-bottom: 24px; 1341 color: #27AE60; 1342 font-weight: 500; 1343 font-size: 14px; 1344 } 1345 .auth-buttons { 1346 display: flex; 1347 flex-direction: column; 1348 gap: 12px; 1349 } 1350 .auth-btn { 1351 display: flex; 1352 align-items: center; 1353 justify-content: center; 1354 padding: 12px 20px; 1355 border-radius: 10px; 1356 text-decoration: none; 1357 font-weight: 500; 1358 font-size: 16px; 1359 transition: opacity 0.2s; 1360 color: #fff !important; 1361 border: none; 1362 cursor: pointer; 1363 } 1364 .auth-btn:hover { 1365 opacity: 0.9; 1366 } 1367 .auth-btn img { 1368 width: 24px; 1369 height: 24px; 1370 margin-right: 10px; 1371 } 1372 .auth-btn--yandex { background-color: #eb1c4e; } 1373 .auth-btn--vk { background-color: #0077FF; } 1374 .auth-btn--tg { background-color: #2481CC; } 1375 </style> 1376 <div id="auth-popup-overlay" class="auth-popup-overlay" style="display: none;"> 1377 <div class="auth-popup-content"> 1378 <span class="auth-popup-close">×</span> 1379 1380 <h2 class="auth-popup-title">ÐойдиÑе ÑдобнÑм ÑпоÑобом</h2> 1381 1382 <div class="auth-popup-subtitle"> 1383 <!-- Ðконка ÑиÑа --> 1384 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" style="margin-right: 8px;"> 1385 <path d="M12 2L4 5V11C4 16.55 7.4 21.74 12 23C16.6 21.74 20 16.55 20 11V5L12 2Z" fill="#27AE60"/> 1386 <path d="M9 12L11 14L15 10" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 1387 </svg> 1388 <span>ÐаÑи даннÑе в безопаÑноÑÑи</span> 1389 </div> 1390 1391 <div class="tel-auth-block"> 1392 <div class="auth-buttons" style="position: relative;"> 1393 <div class="auth-blocker-overlay" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 10; cursor: pointer;"></div> 1394 <!-- 1. Ð¯Ð½Ð´ÐµÐºÑ (OAuth) --> 1395 <a href="https://adm.gdz-raketa.ru/app/auth/auth/yandex/" class="auth-btn auth-btn--yandex auth-link-save-url"> 1396 <img src="/images/icons/yalogo.svg" alt="Yandex"> 1397 <span>ÐойÑи ÑеÑез ЯндекÑ</span> 1398 </a> 1399 1400 <!-- 2. ÐÐонÑакÑе (OAuth) --> 1401 <a href="#" id="vk-login-btn" class="auth-btn auth-btn--vk"> 1402 <img src="/images/icons/vklogo.svg" alt="VK">
1403 <span>ÐойÑи ÑеÑез VK ID</span> 1404 </a> 1405 1406 <!-- 3. Telegram (СÑÑлка на пÑомежÑÑоÑнÑÑ ÑÑÑаниÑÑ) --> 1407 <!-- 1408 <a href="/login/auth/tg/" class="auth-btn auth-btn--tg auth-link-save-url"> 1409 <img src="/images/icons/tglogo.svg" alt="Telegram"> 1410 <span>ÐойÑи ÑеÑез Telegram</span> 1411 </a> 1412 --> 1413 <div class="auth-btn" style="background-color: #f5f5f5; color: #888 !important; font-size: 13px; cursor: default; text-align: center; padding: 10px; line-height: 1.3; border: 1px solid #ddd; border-radius: 10px; font-weight: normal;"> 1414 ÐвÑоÑизаÑÐ¸Ñ ÑеÑез Telegram оÑклÑÑена, обÑаÑиÑеÑÑ Ðº админиÑÑÑаÑоÑÑ 1415 </div> 1416 </div> 1417 </div> 1418 1419<!-- <p class="push-btn" style="font-size: 12px; color: #888; margin-top: 20px; text-align: center; line-height: 1.4;">--> 1420<!-- ÐÑи Ð²Ñ Ð¾Ð´Ðµ Ð²Ñ Ð¿ÑинимаеÑе <a href="/soglashenie/" style="color: #888; text-decoration: underline;">ÑоглаÑие на обÑабоÑÐºÑ Ð¿ÐµÑÑоналÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ </a> в ÑооÑвеÑÑÑвии Ñ ÐолиÑикой в оÑноÑении обÑабоÑки пеÑÑоналÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ --> 1421<!-- </p>--> 1422 <p class="push-btn" 1423 style="font-size: 16px; color: #888; margin-top: 20px; text-align: center; line-height: 1.4;"> 1424 <label> 1425 <input type="checkbox" required> 1426 Я Ð´Ð°Ñ ÑоглаÑие на <a href="/soglasie-na-obrabotku/" target="_blank">обÑабоÑÐºÑ Ð¿ÐµÑÑоналÑнÑÑ 1427 даннÑÑ </a> 1428 </label> 1429 </p> 1430 </div> 1431 </div> 1432 1433 1434 1435 1436
1436<script src="https://unpkg.com/@vkid/sdk@<3.0.0/dist-sdk/umd/index.js"></script>
1436 1437
1437<script> 1438 // Ðогика попапа 1439 $(document).ready(function() { 1440 $('.header__user-link.user-auth').click(function(e) { 1441 e.preventDefault(); 1442 $('#auth-popup-overlay').fadeIn(200); 1443 }); 1444 1445 $('.auth-popup-close').click(function() { 1446 $('#auth-popup-overlay').fadeOut(200); 1447 }); 1448 1449 $('#auth-popup-overlay').click(function(e) { 1450 if (e.target === this) { 1451 $(this).fadeOut(200); 1452 } 1453 }); 1454 1455 const $popupCheckbox = $('#auth-popup-overlay input[type="checkbox"]'); 1456 const $popupBlocker = $('#auth-popup-overlay .auth-blocker-overlay'); 1457 const updatePopupBlocker = function() { 1458 if ($popupCheckbox.is(':checked')) { 1459 $popupBlocker.hide(); 1460 } else { 1461 $popupBlocker.show(); 1462 } 1463 }; 1464 $popupCheckbox.on('change', updatePopupBlocker); 1465 $popupBlocker.click(function(e) { 1466 e.stopPropagation(); 1467 alert('ÐожалÑйÑÑа, дайÑе ÑоглаÑие на обÑабоÑÐºÑ Ð¿ÐµÑÑоналÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ , ÑÑÐ¾Ð±Ñ Ð¿ÑодолжиÑÑ.'); 1468 $popupCheckbox.focus(); 1469 }); 1470 updatePopupBlocker(); 1471 1472 // Ð¡Ð¾Ñ Ñанение URL пеÑед пеÑÐµÑ Ð¾Ð´Ð¾Ð¼ (Ð´Ð»Ñ Ð¯Ð½Ð´ÐµÐºÑ Ð¸ Telegram) 1473 $('.auth-link-save-url').click(function(e) { 1474 const $checkbox = $(this).closest('.auth-popup-content').find('input[type="checkbox"]'); 1475 if ($checkbox.length && !$checkbox.is(':checked')) { 1476 e.preventDefault(); 1477 alert('ÐожалÑйÑÑа, дайÑе ÑоглаÑие на обÑабоÑÐºÑ Ð¿ÐµÑÑоналÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ , ÑÑÐ¾Ð±Ñ Ð¿ÑодолжиÑÑ.'); 1478 $checkbox.focus(); 1479 return false; 1480 } 1481 e.preventDefault(); 1482 const href = $(this).attr('href'); 1483 const currentUrl = window.location.href; // ÐеÑем ÑекÑÑий URL ÑÑÑаниÑÑ 1484 1485 $.post('/login/save-url.php', { url: currentUrl }, function() { 1486 window.location.href = href; 1487 }); 1488 }); 1489 }); 1490 1491 // Ðогика VK ID 1492 document.getElementById('vk-login-btn').addEventListener('click', function(e) { 1493 const checkbox = this.closest('.auth-popup-content').querySelector('input[type="checkbox"]'); 1494 if (checkbox && !checkbox.checked) { 1495 e.preventDefault(); 1496 alert('ÐожалÑйÑÑа, дайÑе ÑоглаÑие на обÑабоÑÐºÑ Ð¿ÐµÑÑоналÑнÑÑ Ð´Ð°Ð½Ð½ÑÑ , ÑÑÐ¾Ð±Ñ Ð¿ÑодолжиÑÑ.'); 1497 checkbox.focus(); 1498 return false; 1499 } 1500 e.preventDefault(); 1501 1502 // Ð¡Ð¾Ñ ÑанÑем URL пеÑед запÑÑком VK SDK 1503 const currentUrl = window.location.href; // ÐеÑем ÑекÑÑий URL ÑÑÑаниÑÑ 1504 $.post('/login/save-url.php', { url: currentUrl }); 1505 1506 if (typeof VKIDSDK === 'undefined') { 1507 const script = document.createElement('script'); 1508 script.src = 'https://unpkg.com/@vkid/sdk@latest/dist-sdk/umd/index.js'; 1509 script.onload = initVkLogin; 1510 document.body.appendChild(script); 1511 } else { 1512 initVkLogin(); 1513 } 1514 }); 1515 1516 function initVkLogin() { 1517 const VKID = window.VKIDSDK; 1518 1519 VKID.Config.init({ 1520 app: 51942002, 1521 redirectUrl: 'https://gdz-raketa.ru', 1522 responseMode: VKID.ConfigResponseMode.Callback, 1523 source: VKID.ConfigSource.LOWCODE, 1524 scope: 'email' 1525 }); 1526 1527 VKID.Auth.login() 1528 .then(function (data) { 1529 const code = data.code; 1530 const deviceId = data.device_id; 1531 1532 if (!code) { 1533 console.error('Ðе полÑÑен код авÑоÑизаÑии', data); 1534 return; 1535 } 1536 1537 VKID.Auth.exchangeCode(code, deviceId) 1538 .then(function (tokenData) { 1539 console.log('Ð¢Ð¾ÐºÐµÐ½Ñ Ð¿Ð¾Ð»ÑÑенÑ:', tokenData); 1540 1541 VKID.Auth.userInfo(tokenData.access_token) 1542 .then(function (userData) { 1543 console.log('ÐаннÑе полÑзоваÑелÑ:', userData); 1544 1545 const requestData = { 1546 silent_token: tokenData.access_token, 1547 uuid: tokenData.state || tokenData.uuid || 'no-uuid', 1548 app_token: 'pebMomu3SGKpze06u4Je', 1549 user_id: userData.user.user_id, 1550 first_name: userData.user.first_name, 1551 last_name: userData.user.last_name, 1552 email: userData.user.email || '' 1553 }; 1554 1555 fetch('https://adm.gdz-raketa.ru/app/auth/vk-auth/', { 1556 method: 'POST', 1557 headers: { 'Content-Type': 'application/json' }, 1558 body: JSON.stringify(requestData) 1559 }) 1560 .then(response => response.json()) 1561 .then(result => { 1562 if (result.success) { 1563 window.location.href = `${result.redirect_url}?${result.params}`; 1564 } else { 1565 alert('ÐÑибка авÑоÑизаÑии на ÑеÑвеÑе.'); 1566 console.error(result); 1567 } 1568 }) 1569 .catch(err => console.error('ÐÑибка fetch:', err)); 1570 }); 1571 }) 1572 .catch(err => console.error('ÐÑибка exchangeCode:', err)); 1573 }) 1574 .catch(function(error) { 1575 console.error('ÐÑибка VKID.Auth.login:', error); 1576 }); 1577 } 1578 </script>
vendor: 1 bytes, line 1578
1578
1579<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
1579 1580 1581</body> 1582 1583</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.