Loading...
Loading...
{
"latency": 32,
"ipAddresses": [
"75.2.70.75",
"99.83.190.102"
],
"dns": {
"NS": [
"harley.ns.cloudflare.com.",
"sandra.ns.cloudflare.com."
],
"A": [
"75.2.70.75",
"99.83.190.102"
],
"TXT": [
"cryptomus=dbfd9f4f",
"google-site-verification=Oow1y1a-xamdG4cxEuhZrP2JUSEgTFA_DH7khi-apKc",
"google-site-verification=XR3FA7xeQeaUVsS715g-5TuzeYvFV2VCc_J3Gk9MEkE",
"v=spf1 a mx ip4:34.132.146.171 ip6:2600:1900:4000:e094:0:b:0:0 include:_spf.mlsend.com include:_spf.google.com include:trustpilotservice.com -all"
]
}
}
[
{
"url": "https://webhostmost.com",
"technologies": [
{
"slug": "open-graph",
"name": "Open Graph",
"versions": [],
"trafficRank": 10,
"confirmedAt": 1723712605,
"icon": "Open Graph.svg",
"categories": [
{
"id": 19,
"slug": "miscellaneous",
"name": "Miscellaneous"
}
]
},
{
"slug": "post-affiliate-pro",
"name": "Post Affiliate Pro",
"versions": [],
"trafficRank": 10,
"confirmedAt": 1723712605,
"icon": "Post Affiliate Pro.svg",
"categories": [
{
"id": 71,
"slug": "affiliate-programs",
"name": "Affiliate programs"
}
]
},
{
"slug": "http-3",
"name": "HTTP/3",
"versions": [],
"trafficRank": 10,
"confirmedAt": 1723712605,
"icon": "HTTP3.svg",
"categories": [
{
"id": 19,
"slug": "miscellaneous",
"name": "Miscellaneous"
}
]
},
{
"slug": "core-js",
"name": "core-js",
"versions": [
"3.6.5"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "core-js.png",
"categories": [
{
"id": 59,
"slug": "javascript-libraries",
"name": "JavaScript libraries"
}
]
},
{
"slug": "selectize",
"name": "Selectize",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Selectize.svg",
"categories": [
{
"id": 59,
"slug": "javascript-libraries",
"name": "JavaScript libraries"
}
]
},
{
"slug": "jquery-ui",
"name": "jQuery UI",
"cpe": "cpe:2.3:a:jquery:jquery_ui:1.12.1:*:*:*:*:*:*:*",
"versions": [
"1.12.1"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "jQuery UI.svg",
"categories": [
{
"id": 59,
"slug": "javascript-libraries",
"name": "JavaScript libraries"
}
]
},
{
"slug": "lightbox",
"name": "Lightbox",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Lightbox.svg",
"categories": [
{
"id": 59,
"slug": "javascript-libraries",
"name": "JavaScript libraries"
}
]
},
{
"slug": "google-tag-manager",
"name": "Google Tag Manager",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Google Tag Manager.svg",
"categories": [
{
"id": 42,
"slug": "tag-managers",
"name": "Tag managers"
}
]
},
{
"slug": "bootstrap",
"name": "Bootstrap",
"cpe": "cpe:2.3:a:getbootstrap:bootstrap:4.5.3:*:*:*:*:*:*:*",
"versions": [
"4.5.3"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Bootstrap.svg",
"categories": [
{
"id": 66,
"slug": "ui-frameworks",
"name": "UI frameworks"
}
]
},
{
"slug": "gravatar",
"name": "Gravatar",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Gravatar.svg",
"categories": [
{
"id": 19,
"slug": "miscellaneous",
"name": "Miscellaneous"
}
]
},
{
"slug": "microsoft-clarity",
"name": "Microsoft Clarity",
"versions": [
"0.7.41"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Microsoft Clarity.svg",
"categories": [
{
"id": 10,
"slug": "analytics",
"name": "Analytics"
}
]
},
{
"slug": "datatables",
"name": "DataTables",
"cpe": "cpe:2.3:a:datatables:datatables.net:1.10.12:*:*:*:*:*:*:*",
"versions": [
"1.10.12"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "DataTables.png",
"categories": [
{
"id": 59,
"slug": "javascript-libraries",
"name": "JavaScript libraries"
}
]
},
{
"slug": "recaptcha",
"name": "reCAPTCHA",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "reCAPTCHA.svg",
"categories": [
{
"id": 16,
"slug": "security",
"name": "Security"
}
]
},
{
"slug": "moment-js",
"name": "Moment.js",
"cpe": "cpe:2.3:a:momentjs:moment:2.30.1:*:*:*:*:*:*:*",
"versions": [
"2.30.1"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Moment.js.svg",
"categories": [
{
"id": 59,
"slug": "javascript-libraries",
"name": "JavaScript libraries"
}
]
},
{
"slug": "metricscube",
"name": "MetricsCube",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "MetricsCube.svg",
"categories": [
{
"id": 10,
"slug": "analytics",
"name": "Analytics"
}
]
},
{
"slug": "whmcs",
"name": "WHMCS",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "WHMCS.svg",
"categories": [
{
"id": 1,
"slug": "cms",
"name": "CMS"
}
]
},
{
"slug": "php",
"name": "PHP",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "PHP.svg",
"categories": [
{
"id": 27,
"slug": "programming-languages",
"name": "Programming languages"
}
]
},
{
"slug": "axios",
"name": "Axios",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712606,
"icon": "Axios.svg",
"categories": [
{
"id": 59,
"slug": "javascript-libraries",
"name": "JavaScript libraries"
}
]
},
{
"slug": "swiper",
"name": "Swiper",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Swiper.svg",
"categories": [
{
"id": 59,
"slug": "javascript-libraries",
"name": "JavaScript libraries"
}
]
},
{
"slug": "hsts",
"name": "HSTS",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "default.svg",
"categories": [
{
"id": 16,
"slug": "security",
"name": "Security"
}
]
},
{
"slug": "google-analytics",
"name": "Google Analytics",
"versions": [
"GA4"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Google Analytics.svg",
"categories": [
{
"id": 10,
"slug": "analytics",
"name": "Analytics"
}
]
},
{
"slug": "vuex",
"name": "Vuex",
"versions": [
"3.1.0"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "vue.svg",
"categories": [
{
"id": 59,
"slug": "javascript-libraries",
"name": "JavaScript libraries"
}
]
},
{
"slug": "vue-js",
"name": "Vue.js",
"versions": [
"2.6.10"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "vue.svg",
"categories": [
{
"id": 12,
"slug": "javascript-frameworks",
"name": "JavaScript frameworks"
}
]
},
{
"slug": "lottiefiles",
"name": "LottieFiles",
"versions": [
"5.7.13"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "LottieFiles.svg",
"categories": [
{
"id": 19,
"slug": "miscellaneous",
"name": "Miscellaneous"
}
]
},
{
"slug": "cart-functionality",
"name": "Cart Functionality",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Cart-generic.svg",
"categories": [
{
"id": 6,
"slug": "ecommerce",
"name": "Ecommerce"
}
]
},
{
"slug": "google-sign-in",
"name": "Google Sign-in",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Google.svg",
"categories": [
{
"id": 69,
"slug": "authentication",
"name": "Authentication"
}
]
},
{
"slug": "jquery",
"name": "jQuery",
"cpe": "cpe:2.3:a:jquery:jquery:1.12.4:*:*:*:*:*:*:*",
"versions": [
"1.12.4"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "jQuery.svg",
"categories": [
{
"id": 59,
"slug": "javascript-libraries",
"name": "JavaScript libraries"
}
]
},
{
"slug": "lazysizes",
"name": "LazySizes",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "default.svg",
"categories": [
{
"id": 59,
"slug": "javascript-libraries",
"name": "JavaScript libraries"
},
{
"id": 92,
"slug": "performance",
"name": "Performance"
}
]
},
{
"slug": "webpack",
"name": "Webpack",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Webpack.svg",
"categories": [
{
"id": 19,
"slug": "miscellaneous",
"name": "Miscellaneous"
}
]
},
{
"slug": "hammer-js",
"name": "Hammer.js",
"versions": [
"2.0.7"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Hammer.js.svg",
"categories": [
{
"id": 59,
"slug": "javascript-libraries",
"name": "JavaScript libraries"
}
]
},
{
"slug": "litespeed",
"name": "LiteSpeed",
"versions": [],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "LiteSpeed.svg",
"categories": [
{
"id": 22,
"slug": "web-servers",
"name": "Web servers"
}
]
},
{
"slug": "stripe",
"name": "Stripe",
"versions": [
"3"
],
"trafficRank": 18,
"confirmedAt": 1723712605,
"icon": "Stripe.svg",
"categories": [
{
"id": 41,
"slug": "payment-processors",
"name": "Payment processors"
}
]
}
]
}
]
<!DOCTYPE html><!-- This site was created in Webflow. https://webflow.com --><!-- Last Published: Fri Jan 31 2025 13:56:46 GMT+0000 (Coordinated Universal Time) --><html data-wf-domain="%%PUBLISH_URL_REPLACEMENT%%" data-wf-page="673c56a6885417cb82f390ac" data-wf-site="673c56a6885417cb82f38f71" lang="en" data-wf-locale="en"><head><meta charset="utf-8"/><base href="https://www.webhostmost.com/"/><title>Error 404 - Page Not Found</title><link rel="alternate" hrefLang="x-default" href="https://%%PUBLISH_URL_REPLACEMENT%%/404"/><link rel="alternate" hrefLang="en" href="https://%%PUBLISH_URL_REPLACEMENT%%/404"/><link rel="alternate" hrefLang="ro" href="https://%%PUBLISH_URL_REPLACEMENT%%/ro/404"/><link rel="alternate" hrefLang="ru" href="https://%%PUBLISH_URL_REPLACEMENT%%/ru/404"/><meta content="Error 404 has occurred. The page can't be found." name="description"/><meta content="Error 404 - Page Not Found" property="og:title"/><meta content="Error 404 has occurred. The page can't be found." property="og:description"/><meta content="Error 404 - Page Not Found" property="twitter:title"/><meta content="Error 404 has occurred. The page can't be found." property="twitter:description"/><meta property="og:type" content="website"/><meta content="summary_large_image" name="twitter:card"/><meta content="width=device-width, initial-scale=1" name="viewport"/><meta content="Webflow" name="generator"/><link href="https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/css/webhostmost.webflow.db08d94b9.css" rel="stylesheet" type="text/css"/><link href="https://fonts.googleapis.com" rel="preconnect"/><link href="https://fonts.gstatic.com" rel="preconnect" crossorigin="anonymous"/><script src="https://ajax.googleapis.com/ajax/libs/webfont/1.6.26/webfont.js" type="text/javascript"></script><script type="text/javascript">WebFont.load({ google: { families: ["Roboto:300,regular,500,700"] }});</script><script type="text/javascript">!function(o,c){var n=c.documentElement,t=" w-mod-";n.className+=t+"js",("ontouchstart"in o||o.DocumentTouch&&c instanceof DocumentTouch)&&(n.className+=t+"touch")}(window,document);</script><link href="https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/676aacc4ec7908e84e3f4c91_whm-website-favico.svg" rel="shortcut icon" type="image/x-icon"/><link href="https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/6787e1aaf159dd2a4d3a4681_whm-website-webclip.png" rel="apple-touch-icon"/><script async="" src="https://www.googletagmanager.com/gtag/js?id=G-6ENK8CMGGN"></script><script type="text/javascript">window.dataLayer = window.dataLayer || [];function gtag(){dataLayer.push(arguments);}gtag('js', new Date());gtag('set', 'developer_id.dZGVlNj', true);gtag('config', 'G-6ENK8CMGGN');</script> <link rel="preconnect" href="//privacy-proxy.usercentrics.eu">
<link rel="preload" href="//privacy-proxy.usercentrics.eu/latest/uc-block.bundle.js" as="script">
<script type="application/javascript" src="https://privacy-proxy.usercentrics.eu/latest/uc-block.bundle.js"></script>
<script id="usercentrics-cmp" src="https://app.usercentrics.eu/browser-ui/latest/loader.js" data-settings-id="s0910YeQOo8AG4" async></script>
<script>uc.setCustomTranslations('https://termageddon.ams3.cdn.digitaloceanspaces.com/translations/');</script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.css"/>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lib/p5.min.js"></script>
<script src="sketch.js"></script>
<script>
document.addEventListener("DOMContentLoaded", function() {
const banner = document.getElementById("dealsBanner");
const closeBtn = document.querySelector(".deals-banner-close-button");
// Проверяем куки "bannerClosed"
if (getCookie("bannerClosed") === "true") {
// Если баннер уже был закрыт, прячем баннер целиком
// banner.style.display = "none";
} else {
// Иначе показываем баннер и кнопку
banner.style.display = "block";
closeBtn.style.display = "inline-block";
}
// При клике на кнопку закрытия
closeBtn.addEventListener("click", function() {
banner.style.display = "none";
setCookie("bannerClosed", "true", 7); // Запоминаем на 7 дней
});
});
/**
* Устанавливает куки
* @param {string} name - Название куки
* @param {string} value - Значение куки
* @param {number} days - Срок жизни куки в днях
*/
function setCookie(name, value, days) {
let expires = "";
if (days) {
const date = new Date();
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
expires = "; expires=" + date.toUTCString();
}
document.cookie = name + "=" + (value || "") + expires + "; path=/";
}
/**
* Возвращает значение куки по имени
* @param {string} name - Название куки
* @returns {string|null}
*/
function getCookie(name) {
const nameEQ = name + "=";
const ca = document.cookie.split(";");
for (let i = 0; i < ca.length; i++) {
let c = ca[i].trim();
if (c.indexOf(nameEQ) === 0) {
return c.substring(nameEQ.length);
}
}
return null;
}
</script><script src="https://cdn.prod.website-files.com/673c56a6885417cb82f38f71%2F66ba5a08efe71070f98dd10a%2F6781661e74e8f620df2424b1%2Fkf9lpd2-1.1.1.js" type="text/javascript"></script></head><body><div class="utility-page-wrap"><div class="utility-page-content"><img alt="" src="https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/673c56a6885417cb82f390e2_404.svg" class="icon---xx-huge centered-element"/><div class="spacer-4---small"></div><h1 class="heading-x-small text-align---center">Page Not Found</h1><div class="spacer-4---small"></div><div class="text-size---x-small text-align---center">The page you are looking for doesn't exist or has been moved. Try again Later.</div></div></div><script src="https://d3e54v103j8qbb.cloudfront.net/js/jquery-3.5.1.min.dc5e7f18c8.js?site=673c56a6885417cb82f38f71" type="text/javascript" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous"></script><script src="https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/js/webflow.31952f74.0064c7c3665e556b.js" type="text/javascript"></script><script type="text/javascript" id="pap_x2s6df8d" src="https://affiliate.webhostmost.com/scripts/m4vg9mx9j"></script>
<script type="text/javascript">
PostAffTracker.setAccountId('default1');
try {
PostAffTracker.track();
} catch (err) { }
</script>
<script>
// Базовые цены в USD для каждого плана
const basePrices = {
'_1st-plan-wrapper': {
monthly: 5,
yearly: 5 * 12 * 0.7,
triennially: 5 * 12 * 3 * 0.5
},
'_2nd-plan-wrapper': {
monthly: 10,
yearly: 10 * 12 * 0.7,
triennially: 10 * 12 * 3 * 0.5
},
'_3rd-plan-wrapper': {
monthly: 35,
yearly: 35 * 12 * 0.7,
triennially: 35 * 12 * 3 * 0.5
}
};
// Символы валют
const currencySymbols = {
USD: "$",
EUR: "€",
INR: "₹"
};
// Переводы для кнопки "Back to Dashboard"
const dashboardTranslations = {
english: "Back to Dashboard",
russian: "Назад к панели",
romanian: "Înapoi la Panou"
};
// Получение значения куки
function getCookieValue(cookieName) {
const value = document.cookie
.split('; ')
.find(row => row.startsWith(`${cookieName}=`))
?.split('=')[1];
return value;
}
// Получение курсов валют из HTML структуры
function fetchCurrencyRatesFromHTML() {
const rates = Array.from(document.querySelectorAll('.currency-rate')).map(element => ({
code: element.dataset.currency,
rate: parseFloat(element.dataset.rate)
}));
return rates;
}
// Получение текущего выбранного интервала
function getSelectedInterval() {
const activeTab = document.querySelector('.pricing-tab-link[aria-selected="true"]');
if (activeTab) {
const tabId = activeTab.getAttribute('data-w-tab');
if (tabId === 'Tab 1') return 'triennially';
if (tabId === 'Tab 2') return 'yearly';
if (tabId === 'Tab 3') return 'monthly';
}
return 'triennially'; // Значение по умолчанию
}
// Проверка, находится ли пользователь на странице /partners/emit-reviews
function isEmitReviewsPage() {
return window.location.pathname.includes('/partners/emit-reviews');
}
// Обновление кнопок ссылок
function updatePlanButtons(selectedCurrency) {
const currencyParams = {
USD: "¤cy=1",
EUR: "¤cy=2",
INR: "¤cy=6"
};
const currencyParam = currencyParams[selectedCurrency] || "¤cy=1";
const isLoggedIn = getCookieValue('isLoggedIn') === 'true';
const currentPath = window.location.pathname;
let languageParam = "";
if (!isLoggedIn) {
languageParam = "language=english"; // Default to English
if (currentPath.includes('/ro')) {
languageParam = "language=romanian";
} else if (currentPath.includes('/ru')) {
languageParam = "language=russian";
}
}
const updateButtons = (tabDataWTab, billingCycle) => {
const tab = document.querySelector(`.pricing-tab-link[data-w-tab="${tabDataWTab}"]`);
if (tab) {
const planButtons = document.querySelectorAll(`.w-tab-content [data-w-tab="${tabDataWTab}"] .plan-button`);
planButtons.forEach(button => {
const wrapper = button.closest('._1st-plan-wrapper, ._2nd-plan-wrapper, ._3rd-plan-wrapper');
let baseUrl = "https://client.webhostmost.com/store/shared-web-hosting/holiday-micro"; // Default URL
if (wrapper) {
if (wrapper.classList.contains('_2nd-plan-wrapper')) {
baseUrl = "https://client.webhostmost.com/store/shared-web-hosting/holiday-pro";
} else if (wrapper.classList.contains('_3rd-plan-wrapper')) {
baseUrl = "https://client.webhostmost.com/store/shared-web-hosting/holiday-ultra";
}
}
const billingCycleParam = `&billingcycle=${billingCycle}`;
// Собираем параметры
const paramsArray = [];
if (languageParam) {
paramsArray.push(languageParam);
}
paramsArray.push(currencyParam.substring(1)); // Убираем первый символ '&'
paramsArray.push(billingCycleParam.substring(1)); // Убираем первый символ '&'
let fullUrl = `${baseUrl}?${paramsArray.join('&')}`;
// Если на странице /partners/emit-reviews, добавляем промокод
if (isEmitReviewsPage()) {
const url = new URL(fullUrl);
url.searchParams.set('promocode', 'EMITREVIEWS');
fullUrl = url.toString();
}
button.setAttribute('href', fullUrl);
});
}
};
updateButtons('Tab 1', 'triennially');
updateButtons('Tab 2', 'annually');
updateButtons('Tab 3', 'monthly');
}
// Обновление текста и ссылок кнопки входа
function updateLoginButton() {
const isLoggedIn = getCookieValue('isLoggedIn') === 'true';
const loginDashElement = document.getElementById('login-dash');
const loginDashLink = loginDashElement?.closest('a');
if (isLoggedIn && loginDashElement && loginDashLink) {
// Определение языка страницы
let selectedLanguage = 'english'; // Default
const currentPath = window.location.pathname;
if (currentPath.includes('/ro')) {
selectedLanguage = 'romanian';
} else if (currentPath.includes('/ru')) {
selectedLanguage = 'russian';
}
// Установка перевода для кнопки
loginDashElement.textContent = dashboardTranslations[selectedLanguage] || dashboardTranslations['english'];
// Обновление ссылки
loginDashLink.setAttribute('href', 'https://client.webhostmost.com/clientarea.php');
}
}
// Функция для обновления ссылок домена и корзины
function updateDomainLinks(selectedCurrency) {
const currencyValues = {
USD: "1",
EUR: "2",
INR: "6"
};
const currencyParam = currencyValues[selectedCurrency] || "1";
const isLoggedIn = getCookieValue('isLoggedIn') === 'true';
let selectedLanguage = 'english';
const currentPath = window.location.pathname;
if (!isLoggedIn) {
if (currentPath.includes('/ro')) {
selectedLanguage = 'romanian';
} else if (currentPath.includes('/ru')) {
selectedLanguage = 'russian';
}
}
// Функция для добавления промокода, если на странице /partners/emit-reviews
const addPromocode = (url) => {
if (isEmitReviewsPage()) {
url.searchParams.set('promocode', 'EMITREVIEWS');
}
};
// Для первых двух ссылок добавляем &language=...¤cy=...
const firstTwoLinks = document.querySelectorAll(
'a[href*="cart.php?a=add"][href*="domain=register"], a[href*="cart.php?a=add"][href*="domain=transfer"]'
);
firstTwoLinks.forEach(link => {
let href = link.getAttribute('href');
const url = new URL(href, window.location.origin);
// Удаляем существующие параметры
url.searchParams.delete('language');
url.searchParams.delete('currency');
// Добавляем новые параметры
if (!isLoggedIn) {
url.searchParams.append('language', selectedLanguage);
}
url.searchParams.append('currency', currencyParam);
// Добавляем промокод, если необходимо
addPromocode(url);
link.setAttribute('href', url.toString());
});
// Для последних двух ссылок добавляем ?language=...¤cy=...
const lastTwoLinks = document.querySelectorAll(
'a[href*="domain-names"], a[href*="domain-transfer"]'
);
lastTwoLinks.forEach(link => {
let href = link.getAttribute('href');
const url = new URL(href, window.location.origin);
// Удаляем существующие параметры
url.searchParams.delete('language');
url.searchParams.delete('currency');
// Добавляем новые параметры
if (!isLoggedIn) {
url.searchParams.append('language', selectedLanguage);
}
url.searchParams.append('currency', currencyParam);
// Добавляем промокод, если необходимо
addPromocode(url);
link.setAttribute('href', url.toString());
});
// Добавляем логику для ссылки на корзину
const cartLink = document.querySelector('a[href*="cart.php?a=checkout"]');
if (cartLink) {
let href = cartLink.getAttribute('href');
const url = new URL(href, window.location.origin);
// Удаляем существующие параметры
url.searchParams.delete('language');
url.searchParams.delete('currency');
// Добавляем новые параметры
if (!isLoggedIn) {
url.searchParams.append('language', selectedLanguage);
}
url.searchParams.append('currency', currencyParam);
// Добавляем промокод, если необходимо
addPromocode(url);
cartLink.setAttribute('href', url.toString());
}
const freeStartButton = document.querySelector('a[href*="cart.php?a=add&pid=61"]');
if (freeStartButton) {
const url = new URL(freeStartButton.getAttribute('href'), window.location.origin);
url.searchParams.delete('language');
url.searchParams.delete('currency');
if (!isLoggedIn) {
url.searchParams.append('language', selectedLanguage);
}
url.searchParams.append('currency', currencyParam);
// Добавляем промокод, если необходимо
addPromocode(url);
freeStartButton.setAttribute('href', url.toString());
}
}
// Обновление цен и валют
async function updatePrices(selectedCurrency) {
const rates = fetchCurrencyRatesFromHTML();
const rateData = rates.find(rate => rate.code === selectedCurrency);
if (!rateData) {
return;
}
const rate = rateData.rate;
const symbol = currencySymbols[selectedCurrency] || "$";
const selectedInterval = getSelectedInterval();
document.querySelectorAll('.plan-wrapper').forEach(plan => {
const planClass = [...plan.classList].find(cls => basePrices[cls]);
if (!planClass) {
return;
}
const prices = basePrices[planClass];
const basePrice = prices[selectedInterval];
const divisor = selectedInterval === 'triennially' ? 36 : selectedInterval === 'yearly' ? 12 : 1;
// Обновление текущей цены
const priceElement = plan.querySelector('.plan-current-price');
if (priceElement) {
const monthlyPrice = (basePrice / divisor * rate).toFixed(2);
priceElement.textContent = monthlyPrice;
}
const symbolElement = plan.querySelector('.plan-current-price-symbol');
if (symbolElement) {
symbolElement.textContent = symbol;
}
// Обновление годовой/трёхгодовой цены
const yearlyPriceElement = plan.querySelector('.plan-current-yearly-price');
if (yearlyPriceElement) {
const yearlyPrice = (basePrice * rate).toFixed(2);
yearlyPriceElement.textContent = yearlyPrice;
}
const yearlySymbolElement = plan.querySelector('.plan-current-yearly-price-symbol');
if (yearlySymbolElement) {
yearlySymbolElement.textContent = symbol;
}
// Обновление старой цены
const oldPriceElement = plan.querySelector('.plan-old-price');
if (oldPriceElement) {
const oldPrice = (prices.monthly * rate).toFixed(2);
oldPriceElement.textContent = oldPrice;
}
const oldSymbolElement = plan.querySelector('.plan-old-price-symbol');
if (oldSymbolElement) {
oldSymbolElement.textContent = symbol;
}
const currencyElement = plan.querySelector('.plan-currency');
if (currencyElement) {
currencyElement.textContent = selectedCurrency;
}
});
// Обновление для .starting-at-price
const startingPriceElement = document.querySelector('.starting-at-price');
if (startingPriceElement) {
const defaultPriceInUSD = 2.5; // Базовая цена в долларах
let convertedPrice = defaultPriceInUSD * rate;
// Если на странице /partners/emit-reviews, снизить цену на 10%
if (isEmitReviewsPage()) {
convertedPrice = convertedPrice * 0.9;
}
convertedPrice = convertedPrice.toFixed(2);
startingPriceElement.textContent = `${symbol}${convertedPrice}`;
}
// Добавляем плавное появление
document.querySelectorAll('.price-opacity').forEach(element => {
element.classList.add('price-visible');
});
updatePlanButtons(selectedCurrency);
updateDomainLinks(selectedCurrency); // Обновляем ссылки
}
// Инициализация селектора валют
function setupCurrencySelector() {
const currencySelector = document.getElementById('Currency');
const allowedCurrencies = ['USD', 'EUR', 'INR'];
const cookieCurrency = getCookieValue('currencyCode');
const isLoggedIn = getCookieValue('isLoggedIn') === 'true';
// Получение выбранной валюты из localStorage
let savedCurrency = localStorage.getItem('selectedCurrency') || 'USD';
// Если в куках установлена валюта и она отличается от сохраненной, обновляем localStorage
if (allowedCurrencies.includes(cookieCurrency) && cookieCurrency !== savedCurrency) {
localStorage.setItem('selectedCurrency', cookieCurrency);
savedCurrency = cookieCurrency; // Обновляем переменную
}
// Установка значения селектора валют
currencySelector.value = savedCurrency;
// Если пользователь залогинен, скрываем селектор валют
if (isLoggedIn) {
currencySelector.style.display = 'none';
}
// Обновление цен и ссылок при инициализации
updatePrices(savedCurrency);
updateDomainLinks(savedCurrency);
// Обработчик события изменения валюты
currencySelector.addEventListener('change', () => {
const selectedCurrency = currencySelector.value;
localStorage.setItem('selectedCurrency', selectedCurrency);
// Обновление цен и ссылок при изменении валюты
updatePrices(selectedCurrency);
updateDomainLinks(selectedCurrency);
});
// Обработчики событий для вкладок прайсинга
const pricingTabs = document.querySelectorAll('.pricing-tab-link');
if (pricingTabs.length > 0) {
pricingTabs.forEach(tab => {
tab.addEventListener('click', () => {
// Обновление после смены вкладки
setTimeout(() => {
updatePrices(currencySelector.value);
}, 100);
});
});
}
updateLoginButton(); // Проверка и обновление кнопки входа
}
// Инициализация
setupCurrencySelector();
</script>
<script src="https://cdn.jsdelivr.net/npm/swiper@8/swiper-bundle.min.js"></script>
<script>
$(".slider-reviews").each(function (index) {
let loopMode = true;
if ($(this).attr("loop-mode") === "true") {
loopMode = true;
}
let sliderDuration = 300;
if ($(this).attr("slider-duration") !== undefined) {
sliderDuration = +$(this).attr("slider-duration");
}
const swiper = new Swiper($(this).find(".swiper")[0], {
speed: sliderDuration,
loop: loopMode,
autoHeight: false,
centeredSlides: loopMode,
followFinger: true,
freeMode: false,
slideToClickedSlide: false,
slidesPerView: 1,
spaceBetween: "4%",
rewind: false,
mousewheel: {
forceToAxis: true
},
keyboard: {
enabled: true,
onlyInViewport: true
},
breakpoints: {
// mobile landscape
480: {
slidesPerView: 1,
spaceBetween: "4%"
},
// tablet
960: {
slidesPerView: 2,
spaceBetween: "2%"
},
// desktop
1300: {
slidesPerView: 3,
spaceBetween: "2%"
}
},
pagination: {
el: $(this).find(".swiper-bullet-wrapper")[0],
bulletActiveClass: "is-active",
bulletClass: "swiper-bullet",
bulletElement: "button",
clickable: true
},
navigation: {
nextEl: $(this).find(".swiper-next")[0],
prevEl: $(this).find(".swiper-prev")[0],
disabledClass: "is-disabled"
},
scrollbar: {
el: $(this).find(".swiper-drag-wrapper")[0],
draggable: true,
dragClass: "swiper-drag",
snapOnRelease: true
},
slideActiveClass: "is-active",
slideDuplicateActiveClass: "is-active"
});
});
</script>
<script>
// ------------------------------------------------------------
// 1) The big config object with per-element, per-breakpoint params
// ------------------------------------------------------------
const SNOW_CONFIG = {
// 1. dealsBanner
dealsBanner: {
desktop: { vertFactor: 8, horizFactor: 20, flakeScale: 0.75, flakeCount: 300 },
tablet: { vertFactor: 10, horizFactor: 15, flakeScale: 0.625, flakeCount: 200 },
mobileLandscape: { vertFactor: 3, horizFactor: 3, flakeScale: 0.5, flakeCount: 150 },
mobilePortrait: { vertFactor: 4, horizFactor: 3, flakeScale: 0.5, flakeCount: 100 }
// No alphaKeys => uses original fade logic
},
// 2. primaryBtn
primaryBtn: {
desktop: { vertFactor: 8, horizFactor: 3, flakeScale: 0.75, flakeCount: 75 },
tablet: { vertFactor: 10, horizFactor: 4, flakeScale: 0.625, flakeCount: 60 },
mobileLandscape: { vertFactor: 5, horizFactor: 2.5, flakeScale: 0.5, flakeCount: 60 },
mobilePortrait: { vertFactor: 4, horizFactor: 2, flakeScale: 0.5, flakeCount: 60 }
// No alphaKeys => uses original fade logic
},
// 3. lastCta
lastCta: {
desktop: { vertFactor: 6, horizFactor: 16, flakeScale: 0.75, flakeCount: 600 },
tablet: { vertFactor: 8, horizFactor: 14, flakeScale: 0.625, flakeCount: 350 },
mobileLandscape: { vertFactor: 2, horizFactor: 2, flakeScale: 0.5, flakeCount: 350 },
mobilePortrait: { vertFactor: 2, horizFactor: 1.5, flakeScale: 0.5, flakeCount: 350 }
// No alphaKeys => uses original fade logic
},
// 4. planVariant - has alphaKeys
// (for elements: .plan-item-content.w-variant-be87cadf-9e98-78b4-e325-55dc95335b39)
planVariant: {
desktop: { vertFactor: 5, horizFactor: 8, flakeScale: 0.75, flakeCount: 200 },
tablet: { vertFactor: 6, horizFactor: 6, flakeScale: 0.75, flakeCount: 150 },
mobileLandscape: { vertFactor: 3, horizFactor: 3, flakeScale: 0.5, flakeCount: 120 },
mobilePortrait: { vertFactor: 3, horizFactor: 2, flakeScale: 0.5, flakeCount: 80 },
// alphaKeys -> uses a "keyframe" style fade
alphaKeys: [
{ position: 0.0, alpha: 200 }, // top => 100%
{ position: 0.25, alpha: 150 }, // 25% => ~75%
{ position: 0.50, alpha: 100 }, // 50% => 50%
{ position: 0.75, alpha: 64 }, // 75% => 25%
{ position: 1.0, alpha: 0 } // bottom => 0%
]
}
};
/*
------------------------------------------------------------------------------
2) BREAKPOINT DETECTION: Return 'desktop' / 'tablet' / 'mobileLandscape' / 'mobilePortrait'
------------------------------------------------------------------------------
*/
function getBreakpointName() {
const w = window.innerWidth;
if (w < 480) {
return 'mobilePortrait';
} else if (w < 768) {
return 'mobileLandscape';
} else if (w < 992) {
return 'tablet';
} else {
return 'desktop';
}
}
/*
------------------------------------------------------------------------------
3) GET ELEMENT PARAMS: retrieve from SNOW_CONFIG based on elementKey + breakpoint
------------------------------------------------------------------------------
*/
function getElementParams(elementKey) {
const bp = getBreakpointName();
const elementConfig = SNOW_CONFIG[elementKey] || {};
const bpConfig = elementConfig[bp] || {};
const vertFactor = bpConfig.vertFactor ?? 2;
const horizFactor = bpConfig.horizFactor ?? 3;
const flakeScale = bpConfig.flakeScale ?? 1.0;
const flakeCount = bpConfig.flakeCount ?? 100;
// If alphaKeys exist for that element, pass them; otherwise undefined => simpler fade
const alphaKeys = elementConfig.alphaKeys;
return { vertFactor, horizFactor, flakeScale, flakeCount, alphaKeys };
}
/*
------------------------------------------------------------------------------
4) MEASURE HIDDEN ELEMENT: force it visible offscreen to get real size, then revert
+ поддержка план-вариантов (используем общий размер для planVariant).
------------------------------------------------------------------------------
*/
function measureHiddenElement(el, isPlanVariant = false) {
// Если это "planVariant" и уже есть сохранённый глобальный размер,
// сразу возвращаем его (чтобы все канвасы имели одинаковый размер).
if (isPlanVariant && window.__planVariantCanvasSize) {
return window.__planVariantCanvasSize;
}
let w = el.offsetWidth;
let h = el.offsetHeight;
// Если элемент уже имеет ненулевые размеры – можно использовать сразу
if (w > 0 && h > 0) {
if (isPlanVariant && !window.__planVariantCanvasSize) {
window.__planVariantCanvasSize = { width: w, height: h };
}
return { width: w, height: h };
}
// Иначе элемент скрыт: временно показываем "за кулисами"
const oldStyle = el.getAttribute('style') || '';
el.style.setProperty('display', 'block', 'important');
el.style.setProperty('position', 'absolute', 'important');
el.style.setProperty('visibility', 'hidden', 'important');
el.style.setProperty('left', '-9999px', 'important');
el.style.setProperty('top', '0', 'important');
w = el.offsetWidth;
h = el.offsetHeight;
if (w === 0 || h === 0) {
w = 300;
h = 200;
}
// Восстанавливаем стиль
el.setAttribute('style', oldStyle);
// Если это план-вариант и ещё не было глобального размера – сохраняем
if (isPlanVariant && !window.__planVariantCanvasSize) {
window.__planVariantCanvasSize = { width: w, height: h };
}
return { width: w, height: h };
}
/*
------------------------------------------------------------------------------
5) CREATE SNOW SKETCH: p5 instance-mode
- Uses measureHiddenElement() to handle hidden tab content
- Fades flakes differently if alphaKeys exist (planVariant) vs. simpler fade
- Добавлен флаг isPlanVariant чтобы брать общий размер из window.__planVariantCanvasSize
------------------------------------------------------------------------------
*/
function createSnowSketch(
container,
vertFactor,
horizFactor,
flakeScale,
flakeCount,
alphaKeys,
behind = true,
isPlanVariant = false
) {
return (p) => {
let snowflakes = [];
p.setup = function () {
// ensure container is position: relative
if (!container.style.position || container.style.position === 'static') {
container.style.position = 'relative';
}
// measure even if hidden + учитываем план-вариант
const { width: w, height: h } = measureHiddenElement(container, isPlanVariant);
const canvas = p.createCanvas(w, h);
canvas.parent(container);
canvas.style('position', 'absolute');
canvas.style('top', '0');
canvas.style('left', '0');
canvas.style('pointer-events', 'none');
// behind or not? (можно менять z-index по необходимости)
canvas.style('z-index', behind ? '1' : '1');
p.angleMode(p.DEGREES);
// create snowflakes
for (let i = 0; i < flakeCount; i++) {
snowflakes.push(new Snowflake());
}
};
p.draw = function () {
p.clear();
const currentTime = p.frameCount / 60;
for (let flake of snowflakes) {
flake.update(currentTime);
flake.display();
}
};
// On browser resize or orientation change
p.windowResized = function () {
// Если это план-вариант и у нас уже есть глобальный размер, используем его.
// Иначе, измеряем заново.
if (isPlanVariant && window.__planVariantCanvasSize) {
p.resizeCanvas(
window.__planVariantCanvasSize.width,
window.__planVariantCanvasSize.height
);
} else {
const { width: w, height: h } = measureHiddenElement(container, isPlanVariant);
p.resizeCanvas(w, h);
}
};
// if alphaKeys exist, do piecewise fade
function getAlphaAtY(yPos, heightVal, alphaKeysArray) {
if (!alphaKeysArray || heightVal <= 0) return 255;
const ratio = yPos / heightVal;
alphaKeysArray.sort((a, b) => a.position - b.position);
if (ratio <= alphaKeysArray[0].position) {
return alphaKeysArray[0].alpha;
}
if (ratio >= alphaKeysArray[alphaKeysArray.length - 1].position) {
return alphaKeysArray[alphaKeysArray.length - 1].alpha;
}
for (let i = 0; i < alphaKeysArray.length - 1; i++) {
const k1 = alphaKeysArray[i];
const k2 = alphaKeysArray[i + 1];
if (ratio >= k1.position && ratio <= k2.position) {
const span = k2.position - k1.position;
const t = (ratio - k1.position) / span;
return k1.alpha + t * (k2.alpha - k1.alpha);
}
}
return 255;
}
// The Snowflake class
function Snowflake() {
this.posX = 0;
this.posY = p.random(-p.height, 0);
this.initialAngle = p.random(0, 360);
this.size = p.random(2, 5) * flakeScale;
this.radius = p.sqrt(p.random(p.pow(p.width / 2, 2)));
this.flakeColor = p.color(
p.random(200, 256),
p.random(200, 256),
p.random(200, 256)
);
this.update = function (time) {
const angularSpeed = 35 / horizFactor;
const angle = this.initialAngle + angularSpeed * time;
this.posX = p.width / 2 + this.radius * p.sin(angle);
// Скорость падения
const fallSpeed = (8 / vertFactor) / (this.size / flakeScale);
this.posY += fallSpeed;
if (this.posY > p.height) {
this.posY = -50;
}
};
this.display = function () {
// Если alphaKeys => planVariant fade
if (alphaKeys) {
const a = getAlphaAtY(this.posY, p.height, alphaKeys);
this.flakeColor.setAlpha(a);
}
// Иначе => оригинальное затухание (top->middle->bottom)
else {
let a;
if (this.posY <= p.height / 2) {
a = p.map(this.posY, 0, p.height / 2, 255, 191);
} else {
a = p.map(this.posY, p.height / 2, p.height, 191, 0);
}
this.flakeColor.setAlpha(a);
}
p.fill(this.flakeColor);
p.noStroke();
p.ellipse(this.posX, this.posY, this.size);
};
}
};
}
/*
------------------------------------------------------------------------------
6) DOMContentLoaded: Query elements & apply snow
------------------------------------------------------------------------------
*/
document.addEventListener('DOMContentLoaded', function () {
// 1) #dealsBanner
const dealsBanner = document.getElementById('dealsBanner');
if (dealsBanner) {
const { vertFactor, horizFactor, flakeScale, flakeCount, alphaKeys } =
getElementParams('dealsBanner');
new p5(
createSnowSketch(
dealsBanner,
vertFactor,
horizFactor,
flakeScale,
flakeCount,
alphaKeys,
true // behind
)
);
}
// 2) data-wf--primary-button--variant="primary"
const primaryElems = document.querySelectorAll('[data-wf--primary-button--variant="primary"]');
primaryElems.forEach((elem) => {
const { vertFactor, horizFactor, flakeScale, flakeCount, alphaKeys } =
getElementParams('primaryBtn');
new p5(
createSnowSketch(
elem,
vertFactor,
horizFactor,
flakeScale,
flakeCount,
alphaKeys,
true // behind
)
);
});
// 3) .section---last-cta
const lastCtas = document.querySelectorAll('.section---last-cta');
lastCtas.forEach((elem) => {
const { vertFactor, horizFactor, flakeScale, flakeCount, alphaKeys } =
getElementParams('lastCta');
new p5(
createSnowSketch(
elem,
vertFactor,
horizFactor,
flakeScale,
flakeCount,
alphaKeys,
true // behind
)
);
});
// 4) .plan-item-content.w-variant-be87cadf-9e98-78b4-e325-55dc95335b39 (with alphaKeys)
// Это внутри Webflow tabs; теперь все берут общий размер (первый замерит, остальные – нет)
const planVariants = document.querySelectorAll('.plan-item-content.w-variant-be87cadf-9e98-78b4-e325-55dc95335b39');
planVariants.forEach((elem) => {
const { vertFactor, horizFactor, flakeScale, flakeCount, alphaKeys } =
getElementParams('planVariant');
new p5(
createSnowSketch(
elem,
vertFactor,
horizFactor,
flakeScale,
flakeCount,
alphaKeys,
true, // behind
true // isPlanVariant - ключевой флаг
)
);
});
});
</script>
<script>
document.addEventListener('DOMContentLoaded', function () {
const testimonialCards = document.querySelectorAll('.testtimonial-content');
// Хешируем строку (имя/идентификатор) в число
function hashString(str) {
let hash = 0;
for (let i = 0; i < str.length; i++) {
hash = str.charCodeAt(i) + ((hash << 5) - hash);
hash |= 0; // преобразуем в 32-битное число
}
return Math.abs(hash);
}
// Генерируем «пастельный» цвет HSL на основе хеша
function getPastelColorFromString(str) {
// Получаем числовой хеш
const hashValue = hashString(str);
// Ограничиваем оттенок (hue) диапазоном 0..359
const hue = hashValue % 360;
// Фиксируем насыщенность и светлоту для «пастели»
const saturation = 70;
const lightness = 85;
return `hsl(${hue}, ${saturation}%, ${lightness}%)`;
}
// Создаем аббревиатуру из имени
function createAbbreviation(fullName) {
const parts = fullName.trim().split(/\s+/);
let abbreviation;
if (parts.length > 1) {
abbreviation = parts[0].charAt(0) + parts[1].charAt(0);
} else {
const singleName = parts[0];
abbreviation = singleName.charAt(0) + singleName.charAt(singleName.length - 1);
}
return abbreviation.toUpperCase();
}
// Применяем логику ко всем карточкам
function processCards() {
testimonialCards.forEach(card => {
const nameElement = card.querySelector('.hero-slider-author-name');
const abbrElement = card.querySelector('.testimonial-abbreviation');
const imageWrapper = card.querySelector('.testimonial11_client-image-wrapper');
if (!nameElement || !abbrElement || !imageWrapper) return;
const fullName = nameElement.textContent.trim();
// Генерируем аббревиатуру
abbrElement.textContent = createAbbreviation(fullName);
// Генерируем «постоянный» пастельный цвет
imageWrapper.style.backgroundColor = getPastelColorFromString(fullName);
});
}
// Выравниваем высоту карточек
function adjustTestimonialHeights() {
// Сбрасываем высоту, чтобы «пере-замерить» естественную
testimonialCards.forEach(card => {
card.style.height = 'auto';
});
// Находим самую высокую
let maxHeight = 0;
testimonialCards.forEach(card => {
const currentHeight = card.offsetHeight;
if (currentHeight > maxHeight) {
maxHeight = currentHeight;
}
});
// Ставим всем одинаковую
testimonialCards.forEach(card => {
card.style.height = `${maxHeight}px`;
});
}
// 1) При загрузке страницы
processCards();
adjustTestimonialHeights();
// 2) При ресайзе (для учёта изменений экрана или Swiper)
window.addEventListener('resize', () => {
// Пересчёт высоты при изменении размеров экрана
adjustTestimonialHeights();
});
// Если Swiper «долистывает» до конца и происходит перерисовка,
// можно подписаться на события Swiper и вызывать повторно:
// swiper.on('slideChangeTransitionEnd', () => {
// adjustTestimonialHeights();
// });
//
// Или, если у вас после инициализации Swiper где-то добавляются новые карточки динамически,
// можно заново вызывать processCards() и adjustTestimonialHeights().
});
</script>
<!-- ========== FADING EDGES SCRIPT START ========== -->
<script>
document.addEventListener('DOMContentLoaded', function () {
// Предположим, что у вас есть общий контейнер .page-main-content,
// в котором лежит .slider-reviews, и нам нужно взять его цвет фона
const pageMain = document.querySelector('.page-main-content');
if (!pageMain) return;
// Считаем цвет фона родительского элемента (или задайте явно)
const bgColor = window.getComputedStyle(pageMain).backgroundColor;
// Находим сам слайдер
const sliderReviews = document.querySelector('.slider-reviews');
if (!sliderReviews) return;
// Чтобы элементы позиционировались внутри .slider-reviews, делаем position: relative
// и даём возможность "выходить" за границы (overflow: visible).
sliderReviews.style.position = 'relative';
sliderReviews.style.overflow = 'visible';
// Создаём левый «фейд»
const fadeLeft = document.createElement('div');
fadeLeft.style.position = 'absolute';
fadeLeft.style.top = '0';
// cдвигаем влево на 300px, чтобы «выглядывал» за границы
fadeLeft.style.left = '-300px';
fadeLeft.style.width = '300px';
fadeLeft.style.height = '100%';
fadeLeft.style.zIndex = '9999';
fadeLeft.style.pointerEvents = 'none';
// Градиент: от сплошного bgColor слева к прозрачному справа
fadeLeft.style.background = `linear-gradient(to right, ${bgColor} 0%, transparent 100%)`;
// Создаём правый «фейд»
const fadeRight = document.createElement('div');
fadeRight.style.position = 'absolute';
fadeRight.style.top = '0';
// cдвигаем вправо на 300px
fadeRight.style.right = '-300px';
fadeRight.style.width = '300px';
fadeRight.style.height = '100%';
fadeRight.style.zIndex = '9999';
fadeRight.style.pointerEvents = 'none';
// Градиент: от сплошного bgColor справа к прозрачному слева
fadeRight.style.background = `linear-gradient(to left, ${bgColor} 0%, transparent 100%)`;
// Добавляем оба фейда в .slider-reviews
sliderReviews.appendChild(fadeLeft);
sliderReviews.appendChild(fadeRight);
});
</script>
<!-- ========== FADING EDGES SCRIPT END ========== -->
<script>window.aichatbotApiKey="5b045f29-9988-4765-a88f-2592ae515bda"; window.aichatbotProviderId="f9e9c5e4-6d1a-4b8c-8d3f-3f9e9c5e46d1";</script><script src="https://script.chatlab.com/aichatbot.js" id="5b045f29-9988-4765-a88f-2592ae515bda" defer></script></body></html>
{
"error": false,
"result": {
"success": true,
"ogTitle": "Professional Managed Web Hosting For People - by WebHostMost",
"ogDescription": "Best managed web hosting with 99.98% uptime, free SSL, A+ security, and easy setup for WordPress, Node.js, and Python apps. Sign up now!",
"twitterTitle": "Professional Managed Web Hosting For People - by WebHostMost",
"twitterDescription": "Best managed web hosting with 99.98% uptime, free SSL, A+ security, and easy setup for WordPress, Node.js, and Python apps. Sign up now!",
"ogType": "website",
"twitterCard": "summary_large_image",
"ogImage": [
{
"url": "https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/673c5e3e26e6732ef0a2ea8c_whm-website-logo.svg",
"type": "svg"
},
{
"url": "https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/676edad6d81441d305987aaa_whm-winter-hat.svg",
"type": "svg"
},
{
"url": "https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/67475a190e5501475ff75ca8_whm-mobile-logo.svg",
"type": "svg"
},
{
"url": "https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/673c5f04744012bd9800c28a_whm-sidebar-ico-pricing.svg",
"type": "svg"
},
{
"url": "https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/67631cb0aa7dbfa56591eef3_whm-sidebar-icons-services.svg",
"type": "svg"
},
{
"url": "https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/6769ced5f5df332629ceb8cf_whm-transfer-icon.svg",
"type": "svg"
},
{
"url": "https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/673c61034c2f60a4479fbbde_whm-sidebar-ico-wordpress.svg",
"type": "svg"
},
{
"url": "https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/673c6103945bd01f2395ed40_whm-sidebar-ico-jsnode.svg",
"type": "svg"
},
{
"url": "https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/673c610366f98a56240c5f8c_whm-sidebar-ico-python.svg",
"type": "svg"
},
{
"url": "https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/673c6103c6d58ae2084f59d9_whm-sidebar-ico-php.svg",
"type": "svg"
}
],
"ogLocale": "en",
"ogUrl": "https://www.webhostmost.com/",
"favicon": "https://cdn.prod.website-files.com/673c56a6885417cb82f38f71/676aacc4ec7908e84e3f4c91_whm-website-favico.svg",
"charset": "utf-8",
"requestUrl": "https://webhostmost.com"
},
"response": {}
}
{
"data": {
"total": 4,
"personal_emails": 2,
"generic_emails": 2,
"department": {
"executive": 0,
"it": 0,
"finance": 0,
"management": 0,
"sales": 0,
"legal": 0,
"support": 1,
"hr": 0,
"marketing": 0,
"communication": 0,
"education": 0,
"design": 0,
"health": 0,
"operations": 0
},
"seniority": {
"junior": 0,
"senior": 0,
"executive": 0
}
},
"meta": {
"params": {
"domain": "webhostmost.com",
"company": null,
"type": null
}
}
}
{
"status": 200,
"statusText": "",
"headers": {
"age": "39242",
"alt-svc": "h3=\":443\"; ma=86400",
"cf-cache-status": "HIT",
"cf-ray": "90adf381ceb80580-IAD",
"connection": "keep-alive",
"content-encoding": "gzip",
"content-security-policy": "frame-ancestors 'self'",
"content-type": "text/html",
"date": "Sat, 01 Feb 2025 00:51:07 GMT",
"last-modified": "Fri, 31 Jan 2025 13:57:05 GMT",
"strict-transport-security": "max-age=31536000; includeSubDomains; preload",
"surrogate-control": "max-age=432000",
"surrogate-key": "www.webhostmost.com 673c56a6885417cb82f38f71 pageId:673c56a6885417cb82f3909c 674f6649afe01a134f7aad2e 6765cf188db3dd817f4a3877 6744f22309fb055f6f01f541",
"transfer-encoding": "chunked",
"vary": "Accept-Encoding",
"x-cluster-name": "us-east-1-prod-hosting-red",
"x-frame-options": "SAMEORIGIN",
"x-lambda-id": "0505482a-51c2-4bed-b5fa-cc4edb35cd71",
"set-cookie": "_cfuvid=68_CM6KINRDbC4KXim1yE4dsB1O0odsoWnsR2HDNDBI-1738371067270-0.0.1.1-604800000; path=/; domain=.cdn.webflow.com; HttpOnly; Secure; SameSite=None"
}
}
{
"MailerLite": "Email newsletters made easy signup form.",
"Hubspot": "Hubspot provides marketing information and leads via inbounding marketing software.",
"Hubspot Forms": "Marketing automation form feedback into Hubspot tool.",
"Global Site Tag": "Google's primary tag for Google Measurement/Conversion Tracking, Adwords and DoubleClick.",
"Google Analytics": "Google Analytics offers a host of compelling features and benefits for everyone from senior executives and advertising and marketing professionals to site owners and content developers.",
"Google Analytics 4": "Google Analytics 4 formerly known as App + Web is a new version of Google Analytics that was released in October 2020.",
"Cloudflare Rocket Loader": "Automatically optimizes your pages to minimize the number of network connections and ensure even third party resources won't slow down page rendering.",
"Chatlab": "ChatLab is a GPT chatbot tailored for websites, trained with your specific data to provide personalized assistance and information to users.",
"Termageddon": "Auto-updating privacy policy generator.",
"Google Font API": "The Google Font API helps you add web fonts to any web page.",
"Google Tag Manager": "Tag management that lets you add and update website tags without changes to underlying website code.",
"US Privacy User Signal Mechanism": "The US Privacy API (USP API) is a lightweight API used to communicate signals represented in the US Privacy String.",
"CrUX Dataset": "CrUX is a data collection system that gathers information about how real users interact with websites. This website is included in the user experiences data gathered from Google Chrome and thus considered sufficiently popular on the Internet.",
"CrUX Top 500k": "Relative measure of site popularity within the CrUX dataset, measured by the total number of navigations on the origin. This site is in the top 500k.",
"CrUX Top 1m": "Relative measure of site popularity within the CrUX dataset, measured by the total number of navigations on the origin. This site is in the top 1 million.",
"Cloudflare Radar": "The website appears on the Cloudflare Radar Top 1m sites list",
"Cloudflare Radar Top 200k": "The website appears in the Cloudflare Radar Top 200,000.",
"Usercentrics": "Consent based privacy button.",
"reCAPTCHA": "Anti-bot CAPTCHA widget from Google.",
"English HREF LANG": "This webpage has alternate versions available in English via the use of the hreflang tag.",
"Romanian HREF LANG": "This webpage has alternate versions available in Romanian via the use of the hreflang tag.",
"Russian HREF LANG": "This webpage has alternate versions available in Russian via the use of the hreflang tag.",
"Russian": "Website content is written in Russian. Based on HTML langauge attributes on the website",
"English - Inferred": "Based on the title and description text the website content is potentially English.",
"Cyrillic - Inferred": "Based on the title and description text the website content is potentially Russian, Ukrainian, Serbian, Bulgarian, Macedonian, Belarusian, Kazakh, Uzbek, Kyrgyz, Tajik, Gagauz or Mongolian.",
"Cart Functionality": "The site has a link to a shopping cart which is not categorized under any of the cart technologies we track (custom implementation or not tracked yet).",
"Viewport Meta": "This page uses the viewport meta tag which means the content may be optimized for mobile content.",
"IPhone / Mobile Compatible": "The website contains code that allows the page to support IPhone / Mobile Content.",
"Apple Mobile Web Clips Icon": "This page contains an icon for iPhone, iPad and iTouch devices.",
"Mobile Non Scaleable Content": "This content is formatted for mobile devices, it does not allow the content to be scaled.",
"jsDelivr": "A free CDN where Javascript developers can host their files. Encompasses MaxCDN, and BootstrapCDN.",
"OSS CDN": "Open Source Software CDN from MaxCDN.",
"Cloudflare": "Automatically optimizes the delivery of your web pages so your visitors get the fastest page load times and best performance.",
"CloudFront": "Amazon CloudFront is a web service for content delivery. It integrates with other Amazon Web Services to give developers and businesses an easy way to distribute content to end users with low latency, high data transfer speeds, and no commitments.",
"Digital Ocean Spaces": "S3-compatible object storage with a built-in CDN.",
"AJAX Libraries API": "The AJAX Libraries API is a content distribution network and loading architecture for the most popular, open source JavaScript libraries.",
"Google Maps": "Google maps embedded into the webpage.",
"Euro": "The website uses the € symbol on its website - meaning it may accept payment in Euros.",
"American Express": "The website accepts payments with American Express.",
"PayPal": "The website accepts payments with PayPal.",
"Visa": "The website accepts payments with Visa.",
"Webflow": "Webflow is a website builder for designing custom, professional websites without code.",
"Respond": "A fast & lightweight polyfill for min/max-width CSS3 Media Queries (for IE 6-8, and more)",
"html5shiv": "HTML5 IE enabling script shim.",
"jQuery": "JQuery is a fast, concise, JavaScript Library that simplifies how you traverse HTML documents, handle events, perform animations, and add Ajax interactions to your web pages. jQuery is designed to change the way that you write JavaScript.",
"jQuery 3.5.1": "jQuery version 3.5.1",
"Intersection Observer": "API that can be used to understand the visibility and position of DOM elements relative to a containing element or to the top-level viewport.",
"Selectize": "Selectize is the hybrid of a textbox and select box.",
"core-js": "Modular standard library for JavaScript.",
"lazySizes": "Lazy loader for images (responsive and normal), iframes and scripts, that detects any visibility changes triggered through user interaction, CSS or JavaScript without configuration.",
"Webpack": "webpack takes modules with dependencies and generates static assets representing those modules.",
"React Redux": "Official React bindings for Redux",
"React": "A JavaScript library for building user interfaces from Facebook.",
"Day.js": "Day.js is a javascript date time library.",
"Moment JS": "moment.js is a date library for parsing, validating, manipulating, and formatting dates.",
"p5 JS": "p5.js is a JavaScript library that starts with the original goal of Processing.",
"Google Hosted Libraries": "Google Hosted Libraries is a globally available content distribution network for the most popular, open-source JavaScript libraries.",
"Google Hosted Web Font Loader": "Web Font Loader hosted at Google.",
"WebFont Loader": "WebFont Loader gives you added control when using linked fonts via @font-face, from Typekit.",
"Underscore.js": "Underscore is a utility-belt library for JavaScript that provides functional programming support.",
"matchMedia": "matchMedia polyfill for testing media queries in JS.",
"JavaScript Modules": "Modern browsers now support native module functionality, optimizing loading and efficiency. Import and export statements are key for using native JavaScript modules.",
"Facebook": "The website mentions facebook.com in some form.",
"Plans and Pricing": "The website contains a link to a \"Plans\" or \"Pricing\" page - useful for finding SaaS tools.",
"SaaS Pricing in Dollars": "The website has a plans and pricing page that has currency payments in dollars. These might be USD, AUD, CAD, SGD or other countries that support $.",
"SaaS Pricing Below $50 Per Month": "The website has a plans and pricing page that has currency totals that allow us to believe it is offering plans and pricing for a product that on average costs less than $50 per month.",
"LinkedIn": "The website mentions linkedin.com in some form.",
"Instagram": "The website mentions Instagram in some form.",
"YouTube Link": "This website mentions YouTube.com on it in some form or another.",
"TikTok": "The website mentions tiktok.com (but not Douyin) in some form.",
"Affiliate Partner Reseller": "The homepage mentions \"affiliates\", \"partners\" or \"resellers\" as a link on the homepage. Potentially an affiliate program provider.",
"GitHub": "The website mentions github.com in some form.",
"Service Status": "The homepage of this site may link to a Service/System Status page.",
"DoubleClick.Net": "DoubleClick enables agencies, marketers and publishers to work together successfully and profit from their digital marketing investments. Owned by Google and now referred to as DoubleClick Digital Marketing or Google Enterprise Advertising.",
"Post Affiliate Pro": "Post Affiliate Pro is affiliate software designed to empower your affiliate program.",
"Trustpilot Service": "Review and discover great companies.",
"SPF": "The Sender Policy Framework is an open standard specifying a technical method to prevent sender address forgery.",
"Google Apps for Business": "Web-based email, calendar, and documents for teams. Renamed to Google Apps for Work, but now known as G Suite from Google Cloud.",
"DMARC": "A technical specification created by a group of organizations that want to help reduce the potential for email-based abuse",
"DMARC Quarantine": "The domain has a DMARC policy of 'Quarantine'. This tells the receiving mail server that all emails that do not have your domain name in the “From” field (or any other set criteria) should be quarantined by default.",
"Google": "Site hosted on Google infrastructure.",
"Google Cloud": "Website hosted on Google Cloud Platform - includes Google Compute Engine.",
"Cloudflare Hosting": "Supercharged web hosting service.",
"SSL by Default": "The website redirects traffic to an HTTPS/SSL version by default.",
"LetsEncrypt": "Let’s Encrypt is a free open Certificate Authority.",
"HSTS": "Forces browsers to only communicate with the site using HTTPS.",
"HSTS IncludeSubdomains PreLoad": "This website includes instructions for HSTS loading that would allow it to be submitted to the HSTS preload list.",
"DNSSEC": "DNSSEC strengthens DNS authentication by using digital signatures based on public key cryptography.",
"Cloudflare DNS": "DNS services provided by Cloudflare.",
"Imunify360": "Imunify360 is a security platform for Linux web servers that uses machine learning and other advanced techniques to protect against malware, viruses, and other cyber threats.",
"LiteSpeed": "LiteSpeed web server is a high performance, highly scalable Apache interchangeable web server.",
"AWS Lambda": "Execute code seamlessly without server management, workload scaling, event integration, or runtime maintenance.",
"QUIC": "Quick UDP Internet Connections, pronounced quick is a transport layer network protocol developed by Google.",
"IPv6": "The website has an IPv6 record.",
"Cloudflare CDN": "Content owned by this site hosted on the Cloudflare CDN.",
"Content Delivery Network": "This page contains links that give the impression that some of the site contents are stored on a content delivery network.",
"Yandex Verification": "Yandex website verification.",
"Google Webmaster": "Webmaster tools provide you with a free and easy way to make your site more Google-friendly."
}
{
"whois.verisign-grs.com": {
"Domain Status": [
"clientTransferProhibited https://icann.org/epp#clientTransferProhibited"
],
"Name Server": [
"HARLEY.NS.CLOUDFLARE.COM",
"SANDRA.NS.CLOUDFLARE.COM"
],
"Domain Name": "WEBHOSTMOST.COM",
"Registry Domain ID": "2697026138_DOMAIN_COM-VRSN",
"Registrar WHOIS Server": "whois.PublicDomainRegistry.com",
"Registrar URL": "http://www.publicdomainregistry.com",
"Updated Date": "2024-10-04T12:23:08Z",
"Created Date": "2022-05-18T11:51:35Z",
"Expiry Date": "2026-05-18T11:51:35Z",
"Registrar": "PDR Ltd. d/b/a PublicDomainRegistry.com",
"Registrar IANA ID": "303",
"Registrar Abuse Contact Email": "[email protected]",
"Registrar Abuse Contact Phone": "+1.2013775952",
"DNSSEC": "signedDelegation",
"DNSSEC DS Data": "2371 13 2 1A24E1DD29AF7CC28FEB02832B854734A4533CF75BF05567803C26DAD441A2C5",
"URL of the ICANN Whois Inaccuracy Complaint Form": "https://www.icann.org/wicf/",
">>> Last update of whois database": "2025-02-01T00:50:54Z <<<",
"text": [
"For more information on Whois status codes, please visit https://icann.org/epp",
"",
"NOTICE: The expiration date displayed in this record is the date the",
"registrar's sponsorship of the domain name registration in the registry is",
"currently set to expire. This date does not necessarily reflect the expiration",
"date of the domain name registrant's agreement with the sponsoring",
"registrar. Users may consult the sponsoring registrar's Whois database to",
"view the registrar's reported date of expiration for this registration.",
"",
"TERMS OF USE: You are not authorized to access or query our Whois",
"database through the use of electronic processes that are high-volume and",
"automated except as reasonably necessary to register domain names or",
"modify existing registrations; the Data in VeriSign Global Registry",
"Services' (\"VeriSign\") Whois database is provided by VeriSign for",
"information purposes only, and to assist persons in obtaining information",
"about or related to a domain name registration record. VeriSign does not",
"guarantee its accuracy. By submitting a Whois query, you agree to abide",
"by the following terms of use: You agree that you may use this Data only",
"for lawful purposes and that under no circumstances will you use this Data",
"to: (1) allow, enable, or otherwise support the transmission of mass",
"unsolicited, commercial advertising or solicitations via e-mail, telephone,",
"or facsimile; or (2) enable high volume, automated, electronic processes",
"that apply to VeriSign (or its computer systems). The compilation,",
"repackaging, dissemination or other use of this Data is expressly",
"prohibited without the prior written consent of VeriSign. You agree not to",
"use electronic processes that are automated and high-volume to access or",
"query the Whois database except as reasonably necessary to register",
"domain names or modify existing registrations. VeriSign reserves the right",
"to restrict your access to the Whois database in its sole discretion to ensure",
"operational stability. VeriSign may restrict or terminate your access to the",
"Whois database for failure to abide by these terms of use. VeriSign",
"reserves the right to modify these terms at any time.",
"",
"The Registry database contains ONLY .COM, .NET, .EDU domains and",
"Registrars."
]
},
"whois.PublicDomainRegistry.com": {
"Domain Status": [
"clientTransferProhibited https://icann.org/epp#clientTransferProhibited"
],
"Name Server": [
"harley.ns.cloudflare.com",
"sandra.ns.cloudflare.com"
],
"Domain Name": "WEBHOSTMOST.COM",
"Registry Domain ID": "2697026138_DOMAIN_COM-VRSN",
"Registrar WHOIS Server": "whois.publicdomainregistry.com",
"Registrar URL": "www.publicdomainregistry.com",
"Updated Date": "2024-11-27T00:05:04Z",
"Created Date": "2022-05-18T11:51:35Z",
"Expiry Date": "2026-05-18T11:51:35Z",
"Registrar": "PDR Ltd. d/b/a PublicDomainRegistry.com",
"Registrar IANA ID": "303",
"Registry Registrant ID": "",
"Registrant Name": "",
"Registrant Organization": "",
"Registrant Street": "",
"Registrant City": "",
"Registrant State/Province": "Delaware",
"Registrant Postal Code": "",
"Registrant Country": "US",
"Registrant Phone": "",
"Registrant Phone Ext": "",
"Registrant Fax": "",
"Registrant Fax Ext": "",
"Registrant Email": "[email protected]",
"Registry Admin ID": "",
"Admin Name": "",
"Admin Organization": "",
"Admin Street": "",
"Admin City": "",
"Admin State/Province": "",
"Admin Postal Code": "",
"Admin Country": "",
"Admin Phone": "",
"Admin Phone Ext": "",
"Admin Fax": "",
"Admin Fax Ext": "",
"Admin Email": "[email protected]",
"Registry Tech ID": "",
"Tech Name": "",
"Tech Organization": "",
"Tech Street": "",
"Tech City": "",
"Tech State/Province": "",
"Tech Postal Code": "",
"Tech Country": "",
"Tech Phone": "",
"Tech Phone Ext": "",
"Tech Fax": "",
"Tech Fax Ext": "",
"Tech Email": "[email protected]",
"DNSSEC": "signedDelegation",
"Registrar Abuse Contact Email": "[email protected]",
"Registrar Abuse Contact Phone": "+1.2013775952",
"URL of the ICANN WHOIS Data Problem Reporting System": "http://wdprs.internic.net/",
">>> Last update of WHOIS database": "2025-02-01T00:51:08Z <<<",
"text": [
"For more information on Whois status codes, please visit https://icann.org/epp",
"",
"Registration Service Provided By: CLOUDNS",
"",
"The data in this whois database is provided to you for information purposes",
"only, that is, to assist you in obtaining information about or related to a",
"domain name registration record. We make this information available \"as is\",",
"and do not guarantee its accuracy. By submitting a whois query, you agree",
"that you will use this data only for lawful purposes and that, under no",
"circumstances will you use this data to:",
"(1) enable high volume, automated, electronic processes that stress or load",
"this whois database system providing you this information; or",
"(2) allow, enable, or otherwise support the transmission of mass unsolicited,",
"commercial advertising or solicitations via direct mail, electronic mail, or",
"by telephone.",
"The compilation, repackaging, dissemination or other use of this data is",
"expressly prohibited without prior written consent from us. The Registrar of",
"record is PDR Ltd. d/b/a PublicDomainRegistry.com.",
"We reserve the right to modify these terms at any time.",
"By submitting this query, you agree to abide by these terms."
]
}
}