{"id":12193,"date":"2026-04-22T12:35:44","date_gmt":"2026-04-22T09:35:44","guid":{"rendered":"https:\/\/hostpark.ua\/?page_id=12193"},"modified":"2026-04-22T12:54:09","modified_gmt":"2026-04-22T09:54:09","slug":"password-generator","status":"publish","type":"page","link":"https:\/\/hostpark.ua\/en\/password-generator\/","title":{"rendered":"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0430\u0440\u043e\u043b\u0435\u0439"},"content":{"rendered":"<div id=\"hp-pg-light\" style=\"font-family: Arial,sans-serif; width: 100%; max-width: none; margin: 0; padding: 0; background: transparent;\" data-lang=\"en\">\n<div id=\"hpPgContainer\" style=\"width: 100%; max-width: none; margin: 0; padding: 0; box-sizing: border-box;\">\n<div id=\"hpPgIntro\" style=\"margin: 0 0 22px 0; padding: 0;\">\n<div style=\"display: inline-block; background: #fff3eb; color: #f26522; border: 1px solid #ffd4bf; border-radius: 999px; padding: 7px 14px; font-size: 12px; font-weight: bold; letter-spacing: .04em; text-transform: uppercase; margin-bottom: 12px;\">Hostpark Tools<\/div>\n<h1 style=\"text-align: left;\"><b>Secure Password Generator<\/b><\/h1>\n<p style=\"margin: 0; max-width: 900px; font-size: 16px; line-height: 1.65; color: #51627f;\">Create strong passwords for WordPress, email, FTP, servers, hosting control panels and other services.<br \/>\nThe password is generated in your browser and is ready to copy right away.<\/p>\n<\/div>\n<div id=\"hpPgCardsWrap\" style=\"width: 100%; font-size: 0; line-height: 0; white-space: normal;\">\n<div id=\"hpPgMainCard\" style=\"display: block; width: 100%; margin: 0 0 16px 0; background: #ffffff; border: 1px solid #e5ebf4; border-radius: 14px; padding: 22px; box-shadow: 0 10px 30px rgba(17,39,79,.05); box-sizing: border-box; font-size: 16px; line-height: normal;\">\n<p><label style=\"display: block; margin: 0 0 10px 0; font-size: 14px; font-weight: bold; color: #1d3768;\" for=\"hpPgOutput\">Your password<\/label><\/p>\n<div id=\"hpPgOutputRow\" style=\"display: block; margin-bottom: 16px;\"><input id=\"hpPgOutput\" style=\"display: block; width: 100%; height: 50px; padding: 0 16px; border: 1px solid #d7e0ec; border-radius: 10px; background: #f9fbfe; color: #18345f; font-size: 17px; font-weight: bold; box-sizing: border-box; outline: none;\" readonly=\"readonly\" type=\"text\" value=\"\" \/><button id=\"hpPgCopy\" style=\"display: flex; align-items: center; justify-content: center; text-align: center; height: 50px; min-height: 50px; width: 100%; padding: 0 18px; margin: 10px 0 0 0; border-radius: 10px; border: 1px solid #d7e0ec; background: #ffffff; color: #1d3768; cursor: pointer; white-space: nowrap; box-sizing: border-box; line-height: 1; appearance: none; -webkit-appearance: none; font: 700 15px Arial,sans-serif;\" type=\"button\"><br \/>\n<span style=\"display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; line-height: 1; text-align: center;\">Copy<\/span><br \/>\n<\/button><\/div>\n<div style=\"margin-bottom: 16px;\">\n<div style=\"display: flex; justify-content: space-between; gap: 12px; margin-bottom: 8px; font-size: 14px; color: #1d3768; align-items: center;\">Strength<span id=\"hpPgStrengthText\">\u2014<\/span><\/div>\n<div style=\"height: 8px; background: #e9eef6; border-radius: 999px; overflow: hidden;\"><\/div>\n<\/div>\n<div id=\"hpPgPresetGrid\" style=\"display: grid; grid-template-columns: 1fr; gap: 10px; margin-bottom: 16px; align-items: stretch; width: 100%;\">\n<div style=\"width: 100%; height: 42px; min-height: 42px; padding: 0 12px; margin: 0; border: 1px solid #d9e3ef; background: #ffffff; color: #1d3768; border-radius: 10px; cursor: pointer; box-sizing: border-box; font: 700 14px Arial,sans-serif; line-height: 1; text-align: center; display: flex; align-items: center; justify-content: center; white-space: nowrap;\" tabindex=\"0\" role=\"button\" data-hp-preset=\"wp\">For WordPress<\/div>\n<div style=\"width: 100%; height: 42px; min-height: 42px; padding: 0 12px; margin: 0; border: 1px solid #d9e3ef; background: #ffffff; color: #1d3768; border-radius: 10px; cursor: pointer; box-sizing: border-box; font: 700 14px Arial,sans-serif; line-height: 1; text-align: center; display: flex; align-items: center; justify-content: center; white-space: nowrap;\" tabindex=\"0\" role=\"button\" data-hp-preset=\"mail\">For email<\/div>\n<div style=\"width: 100%; height: 42px; min-height: 42px; padding: 0 12px; margin: 0; border: 1px solid #d9e3ef; background: #ffffff; color: #1d3768; border-radius: 10px; cursor: pointer; box-sizing: border-box; font: 700 14px Arial,sans-serif; line-height: 1; text-align: center; display: flex; align-items: center; justify-content: center; white-space: nowrap;\" tabindex=\"0\" role=\"button\" data-hp-preset=\"max\">Maximum<\/div>\n<\/div>\n<div id=\"hpPgActions\" style=\"display: grid; grid-template-columns: 1fr; gap: 12px; align-items: stretch;\"><button id=\"hpPgGenerate\" style=\"display: flex; align-items: center; justify-content: center; text-align: center; height: 48px; min-height: 48px; width: 100%; padding: 0 20px; margin: 0; border-radius: 10px; border: 1px solid #f26522; background: #f26522; color: #ffffff; cursor: pointer; white-space: nowrap; box-shadow: 0 8px 18px rgba(242,101,34,.16); box-sizing: border-box; line-height: 1; appearance: none; -webkit-appearance: none; font: 800 15px Arial,sans-serif;\" type=\"button\"><br \/>\n<span style=\"display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; line-height: 1; text-align: center;\">Generate password<\/span><br \/>\n<\/button><button id=\"hpPgGenerateList\" style=\"display: flex; align-items: center; justify-content: center; text-align: center; height: 48px; min-height: 48px; width: 100%; padding: 0 20px; margin: 0; border-radius: 10px; border: 1px solid #d9e3ef; background: #ffffff; color: #1d3768; cursor: pointer; white-space: nowrap; box-sizing: border-box; line-height: 1; appearance: none; -webkit-appearance: none; font: 700 15px Arial,sans-serif;\" type=\"button\"><br \/>\n<span style=\"display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; line-height: 1; text-align: center;\">Show 5 more options<\/span><br \/>\n<\/button><\/div>\n<\/div>\n<div id=\"hpPgSideCard\" style=\"display: block; width: 100%; margin: 0; background: #ffffff; border: 1px solid #e5ebf4; border-radius: 14px; padding: 22px; box-shadow: 0 10px 30px rgba(17,39,79,.05); box-sizing: border-box; font-size: 16px; line-height: normal;\">\n<div style=\"margin-bottom: 18px;\">\n<div style=\"display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-bottom: 10px;\"><label style=\"margin: 0; font-size: 14px; font-weight: bold; color: #1d3768;\" for=\"hpPgLength\">Password length<\/label><br \/>\n<span id=\"hpPgLengthValue\" style=\"color: #f26522; font-weight: bold; font-size: 16px;\">16<\/span><\/div>\n<p><input id=\"hpPgLength\" style=\"width: 100%; margin: 0; accent-color: #f26522; cursor: pointer;\" max=\"64\" min=\"8\" step=\"1\" type=\"range\" value=\"16\" \/><\/p>\n<\/div>\n<div style=\"display: grid; gap: 10px;\"><label style=\"display: flex; gap: 10px; align-items: center; color: #314766; font-size: 15px; line-height: 1.4; cursor: pointer; margin: 0;\"><br \/>\n<input id=\"hpPgUpper\" style=\"margin: 0; accent-color: #f26522; flex: 0 0 auto;\" checked=\"checked\" type=\"checkbox\" \/><br \/>\n<span style=\"display: block;\">Uppercase letters (A-Z)<\/span><br \/>\n<\/label><label style=\"display: flex; gap: 10px; align-items: center; color: #314766; font-size: 15px; line-height: 1.4; cursor: pointer; margin: 0;\"><br \/>\n<input id=\"hpPgLower\" style=\"margin: 0; accent-color: #f26522; flex: 0 0 auto;\" checked=\"checked\" type=\"checkbox\" \/><br \/>\n<span style=\"display: block;\">Lowercase letters (a-z)<\/span><br \/>\n<\/label><label style=\"display: flex; gap: 10px; align-items: center; color: #314766; font-size: 15px; line-height: 1.4; cursor: pointer; margin: 0;\"><br \/>\n<input id=\"hpPgNums\" style=\"margin: 0; accent-color: #f26522; flex: 0 0 auto;\" checked=\"checked\" type=\"checkbox\" \/><br \/>\n<span style=\"display: block;\">Numbers (0-9)<\/span><br \/>\n<\/label><label style=\"display: flex; gap: 10px; align-items: center; color: #314766; font-size: 15px; line-height: 1.4; cursor: pointer; margin: 0;\"><br \/>\n<input id=\"hpPgSymbols\" style=\"margin: 0; accent-color: #f26522; flex: 0 0 auto;\" checked=\"checked\" type=\"checkbox\" \/><br \/>\n<span style=\"display: block;\">Special characters (!@#$&#8230;)<\/span><br \/>\n<\/label><label style=\"display: flex; gap: 10px; align-items: center; color: #314766; font-size: 15px; line-height: 1.4; cursor: pointer; margin: 0;\"><br \/>\n<input id=\"hpPgSafe\" style=\"margin: 0; accent-color: #f26522; flex: 0 0 auto;\" checked=\"checked\" type=\"checkbox\" \/><br \/>\n<span style=\"display: block;\">Remove similar characters (O, 0, l, I)<\/span><br \/>\n<\/label><\/div>\n<div style=\"margin-top: 16px; padding-top: 16px; border-top: 1px solid #e5ebf4; font-size: 14px; line-height: 1.65; color: #51627f;\">For most accounts, 14\u201318 characters are enough. For WordPress admin access, FTP, SSH, hosting panels and corporate email, it is better to use 20+ characters.<\/div>\n<\/div>\n<\/div>\n<div id=\"hpPgListWrap\" style=\"margin-top: 18px; background: #ffffff; border: 1px solid #e5ebf4; border-radius: 14px; padding: 22px; box-shadow: 0 10px 30px rgba(17,39,79,.05);\" hidden=\"\">\n<h2 style=\"text-align: left;\"><b>Other options<\/b><\/h2>\n<div id=\"hpPgList\" style=\"display: grid; gap: 10px;\"><\/div>\n<\/div>\n<section id=\"hpServersCta\" class=\"back_contact_us\">\n<div id=\"hpServersCtaContainer\" class=\"container\">\n<div class=\"row\">\n<div id=\"hpServersCtaInner\" class=\"contact_us\">\n<div id=\"hpServersCtaTitle\">Need a reliable server for your projects?<\/div>\n<div id=\"hpServersCtaButtons\"><a id=\"hpServersBtnUa\" href=\"https:\/\/hostpark.ua\/en\/dedicated-servers-ukraine\/\">Servers in Ukraine<\/a><br \/>\n<a id=\"hpServersBtnPl\" href=\"https:\/\/hostpark.ua\/en\/dedicated-servers-poland\/\">Servers in Poland<\/a><br \/>\n<a id=\"hpServersBtnAtman\" href=\"https:\/\/hostpark.ua\/en\/fast-vds-poland\/\">ATMAN VDS<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/section>\n<div style=\"margin-top: 18px; background: #ffffff; border: 1px solid #e5ebf4; border-radius: 14px; padding: 20px; box-shadow: 0 10px 30px rgba(17,39,79,.05);\">\n<h2 style=\"text-align: left;\"><b>FAQ<\/b><\/h2>\n<div style=\"display: grid; gap: 12px;\">\n<div style=\"border: 1px solid #e6edf5; border-radius: 12px; background: #ffffff; padding: 16px 18px;\">\n<h3 style=\"text-align: left;\"><b>Are generated passwords stored?<\/b><\/h3>\n<div style=\"color: #51627f; font-size: 14px; line-height: 1.75;\">No. Generation happens directly in the browser, and the password is not sent to the server to create the result.<\/div>\n<\/div>\n<div style=\"border: 1px solid #e6edf5; border-radius: 12px; background: #ffffff; padding: 16px 18px;\">\n<h3 style=\"text-align: left;\"><b>What password length is considered secure?<\/b><\/h3>\n<div style=\"color: #51627f; font-size: 14px; line-height: 1.75;\">For regular accounts, 14\u201318 characters is usually enough. For WordPress, email, hosting panels, FTP and server access, it is better to use 20\u201324 characters.<\/div>\n<\/div>\n<div style=\"border: 1px solid #e6edf5; border-radius: 12px; background: #ffffff; padding: 16px 18px;\">\n<h3 style=\"text-align: left;\"><b>Can I use one password for several services?<\/b><\/h3>\n<div style=\"color: #51627f; font-size: 14px; line-height: 1.75;\">No. It is better to create a separate unique password for each website, email account or control panel.<\/div>\n<\/div>\n<\/div>\n<\/div>\n<div id=\"hpPgRatingBlock\" style=\"margin: 32px 0 40px; padding: 24px; border: 1px solid #e5ebf4; border-radius: 14px; background: #ffffff; box-shadow: 0 10px 30px rgba(17,39,79,.05); box-sizing: border-box;\" data-best=\"5\" data-count=\"1243\" data-name=\"Secure Password Generator\" data-rating=\"4.8\">\n<h3 style=\"margin: 0 0 18px; text-align: center;\"><b>Rate the password generator<\/b><\/h3>\n<div id=\"hpPgRatingSummary\" style=\"padding: 24px 20px; border: 1px solid #edf2f8; border-radius: 16px; background: #f8fbff; text-align: center; box-sizing: border-box;\">\n<div id=\"hpPgRatingValue\" style=\"font-size: 58px; line-height: 1; font-weight: 500; color: #031b4e; margin-bottom: 10px;\">4.8<\/div>\n<div style=\"position: relative; display: inline-block; font-size: 30px; line-height: 1; letter-spacing: 3px; margin-bottom: 10px;\">\n<div style=\"color: #d8e0ec;\">\u2605\u2605\u2605\u2605\u2605<\/div>\n<div id=\"hpPgRatingStarsFill\" style=\"position: absolute; left: 0; top: 0; width: 96%; overflow: hidden; white-space: nowrap; color: #f6b500;\">\u2605\u2605\u2605\u2605\u2605<\/div>\n<\/div>\n<div style=\"font-size: 16px; color: #5b6b8b; line-height: 1.45;\">Rating<strong style=\"color: #031b4e; font-weight: 500;\"><span id=\"hpPgRatingValueInline\">4.8<\/span>out of<span id=\"hpPgRatingBest\">5<\/span><\/strong>based on<strong style=\"color: #031b4e; font-weight: 500;\"><span id=\"hpPgRatingCount\">1243<\/span>ratings<\/strong><\/div>\n<\/div>\n<div id=\"hpPgVoteArea\" style=\"margin-top: 14px;\">\n<div id=\"hpPgVoteButtons\" style=\"display: flex; flex-wrap: wrap; justify-content: center; gap: 8px;\"><button style=\"height: 38px; min-width: 54px; padding: 0 12px; border: 1px solid #d9e3ef; background: #fff; border-radius: 999px; cursor: pointer; color: #031b4e; font-size: 14px; box-sizing: border-box;\" type=\"button\" data-rate=\"1\">\u2605 1<\/button><br \/>\n<button style=\"height: 38px; min-width: 54px; padding: 0 12px; border: 1px solid #d9e3ef; background: #fff; border-radius: 999px; cursor: pointer; color: #031b4e; font-size: 14px; box-sizing: border-box;\" type=\"button\" data-rate=\"2\">\u2605 2<\/button><br \/>\n<button style=\"height: 38px; min-width: 54px; padding: 0 12px; border: 1px solid #d9e3ef; background: #fff; border-radius: 999px; cursor: pointer; color: #031b4e; font-size: 14px; box-sizing: border-box;\" type=\"button\" data-rate=\"3\">\u2605 3<\/button><br \/>\n<button style=\"height: 38px; min-width: 54px; padding: 0 12px; border: 1px solid #d9e3ef; background: #fff; border-radius: 999px; cursor: pointer; color: #031b4e; font-size: 14px; box-sizing: border-box;\" type=\"button\" data-rate=\"4\">\u2605 4<\/button><br \/>\n<button style=\"height: 38px; min-width: 54px; padding: 0 12px; border: 1px solid #d9e3ef; background: #fff; border-radius: 999px; cursor: pointer; color: #031b4e; font-size: 14px; box-sizing: border-box;\" type=\"button\" data-rate=\"5\">\u2605 5<\/button><\/div>\n<div id=\"hpPgVoteMessage\" style=\"margin-top: 10px; font-size: 14px; color: #5b6b8b; text-align: center;\"><\/div>\n<\/div>\n<\/div>\n<section id=\"hpPgAbout\" style=\"margin: 40px 0 46px;\">\n<h2 style=\"text-align: left; margin: 0 0 20px;\"><b>About the password generator<\/b><\/h2>\n<div style=\"width: 100%; min-width: 0; background: #ffffff; border: 1px solid #e5ebf4; border-radius: 18px; padding: 24px 28px 22px; box-shadow: 0 10px 30px rgba(17,39,79,.05); box-sizing: border-box;\">\n<div style=\"display: block; width: 100%; max-width: none; min-width: 0; color: #42526e; font-size: 16px; line-height: 1.72; box-sizing: border-box;\">\n<p style=\"width: 100%; max-width: none; min-width: 0; display: block; box-sizing: border-box; margin: 0 0 18px;\"><strong style=\"color: #031b4e; font-weight: 600;\">Online password generator <\/strong>by HostPark helps you quickly <strong style=\"color: #031b4e; font-weight: 600;\">create a secure password <\/strong>for WordPress, email,<br \/>\nFTP, hosting panels, VPS, VDS, dedicated servers and other services. The tool<br \/>\nautomatically creates <strong style=\"color: #031b4e; font-weight: 600;\">strong and secure passwords <\/strong>based on<br \/>\nlength, uppercase and lowercase letters, numbers and special characters.<\/p>\n<p style=\"width: 100%; max-width: none; min-width: 0; display: block; box-sizing: border-box; margin: 0;\">If you need a <strong style=\"color: #031b4e; font-weight: 600;\">secure password generator <\/strong>for everyday<br \/>\nuse, this tool helps you quickly create a combination for personal and work accounts.<br \/>\nThis <strong style=\"color: #031b4e; font-weight: 600;\">strong password generator <\/strong>is especially useful for access<br \/>\nto CMS platforms, mailboxes, servers, databases and accounts where login security is important.<\/p>\n<\/div>\n<details id=\"hpPgAboutDetails\" style=\"width: 100%; min-width: 0; margin-top: 18px; border: 1px solid #e7edf6; border-radius: 14px; background: #f8fbff; overflow: hidden; box-sizing: border-box;\">\n<summary id=\"hpPgAboutSummary\" style=\"list-style: none; cursor: pointer; padding: 16px 18px; display: flex; align-items: center; justify-content: space-between; gap: 14px; box-sizing: border-box;\"><span style=\"font-size: 15px; font-weight: 600; color: #031b4e;\">Expand full description<\/span><br \/>\n<span id=\"hpPgAboutIcon\" style=\"flex: 0 0 auto; width: 30px; height: 30px; border-radius: 999px; border: 1px solid #dbe5f2; background: #ffffff; display: flex; align-items: center; justify-content: center; color: #f26522; font-size: 18px; line-height: 1;\">+<\/span><\/summary>\n<div style=\"display: block; width: 100%; max-width: none; min-width: 0; padding: 0 18px 18px; color: #42526e; font-size: 16px; line-height: 1.72; box-sizing: border-box;\">\n<div style=\"height: 1px; background: #e7edf6; margin: 0 0 16px;\"><\/div>\n<p style=\"width: 100%; max-width: none; min-width: 0; display: block; box-sizing: border-box; margin: 0 0 16px;\">A secure password reduces the risk of unauthorized access to a website, email, personal account or server<br \/>\ninfrastructure. That is why <strong style=\"color: #031b4e; font-weight: 600;\">secure password generator <\/strong>should be used not only when registering new accounts, but also when regularly replacing old or weak<br \/>\ncombinations. The longer the password and the more character types it contains, the harder it is to crack<br \/>\nusing automated methods.<\/p>\n<p style=\"width: 100%; max-width: none; min-width: 0; display: block; box-sizing: border-box; margin: 0 0 16px;\">This <strong style=\"color: #031b4e; font-weight: 600;\">password generator <\/strong>is suitable for creating passwords for<br \/>\nWordPress, cPanel, ISPmanager, email accounts, SSH, FTP, databases, CRM, cloud services and other systems.<br \/>\nIf you manage several websites or work with client infrastructure, <strong style=\"color: #031b4e; font-weight: 600;\">password generator for hosting <\/strong>helps you quickly get<br \/>\nunique combinations for different accounts without reusing the same passwords.<\/p>\n<p style=\"width: 100%; max-width: none; min-width: 0; display: block; box-sizing: border-box; margin: 0 0 16px;\">For maximum security, we recommend using a separate password for each service, storing it in a<br \/>\npassword manager and not sharing it through open communication channels. You should create a separate <strong style=\"color: #031b4e; font-weight: 600;\">secure password for WordPress<\/strong>, domain email, hosting<br \/>\ncontrol panel and server access. This is especially important for online stores, corporate websites,<br \/>\nCRM systems, email infrastructure and any business-critical projects.<\/p>\n<p style=\"width: 100%; max-width: none; min-width: 0; display: block; box-sizing: border-box; margin: 0 0 16px;\">If you are looking not only for a <strong style=\"color: #031b4e; font-weight: 600;\">random password generator<\/strong>, but also<br \/>\na reliable platform for hosting your projects, take a look at <a style=\"color: #f26522; text-decoration: none;\" href=\"https:\/\/hostpark.ua\/en\/dedicated-servers-ukraine\/\">dedicated servers in Ukraine<\/a>,<br \/>\n<a style=\"color: #f26522; text-decoration: none;\" href=\"https:\/\/hostpark.ua\/en\/dedicated-servers-poland\/\">dedicated servers in Poland <\/a>and <a style=\"color: #f26522; text-decoration: none;\" href=\"https:\/\/hostpark.ua\/en\/fast-vds-poland\/\">ATMAN VDS<\/a>.<br \/>\nReliable infrastructure and strong passwords are a basic combination for protecting websites, applications and internal services.<\/p>\n<p style=\"width: 100%; max-width: none; min-width: 0; display: block; box-sizing: border-box; margin: 0;\">The online <strong style=\"color: #031b4e; font-weight: 600;\">password generator <\/strong>is useful because it lets you<br \/>\ninstantly generate the required combination and copy it for use. If you need a <strong style=\"color: #031b4e; font-weight: 600;\">password generator for a website<\/strong>,<br \/>\n<strong style=\"color: #031b4e; font-weight: 600;\">password generator for email <\/strong>or a tool for creating<br \/>\naccess credentials for servers and hosting, this tool covers the basic task quickly, simply and without extra settings.<\/p>\n<\/div>\n<\/details>\n<\/div>\n<\/section>\n<\/div>\n<div id=\"hpPgToast\" style=\"position: fixed; right: 20px; bottom: 20px; z-index: 9999; background: #1d3768; color: #fff; border-radius: 12px; padding: 12px 16px; box-shadow: 0 16px 40px rgba(0,0,0,.18); opacity: 0; transform: translateY(10px); pointer-events: none; transition: .25s ease;\"><\/div>\n<\/div>\n<script>(function () {\r\n  function initHostparkPasswordGenerator() {\r\n    var root = document.getElementById(\"hp-pg-light\");\r\n    if (!root || root.dataset.hpPgReady === \"1\") return;\r\n    root.dataset.hpPgReady = \"1\";\r\n\r\n    var el = {\r\n      container: document.getElementById(\"hpPgContainer\"),\r\n      title: document.getElementById(\"hpPgTitle\"),\r\n      cardsWrap: document.getElementById(\"hpPgCardsWrap\"),\r\n      mainCard: document.getElementById(\"hpPgMainCard\"),\r\n      sideCard: document.getElementById(\"hpPgSideCard\"),\r\n      outputRow: document.getElementById(\"hpPgOutputRow\"),\r\n      output: document.getElementById(\"hpPgOutput\"),\r\n      copy: document.getElementById(\"hpPgCopy\"),\r\n      strengthText: document.getElementById(\"hpPgStrengthText\"),\r\n      presetGrid: document.getElementById(\"hpPgPresetGrid\"),\r\n      actions: document.getElementById(\"hpPgActions\"),\r\n      generate: document.getElementById(\"hpPgGenerate\"),\r\n      generateList: document.getElementById(\"hpPgGenerateList\"),\r\n      length: document.getElementById(\"hpPgLength\"),\r\n      lengthValue: document.getElementById(\"hpPgLengthValue\") || root.querySelector(\"#hpPgSideCard span[id='hpPgLengthValue']\"),\r\n      upper: document.getElementById(\"hpPgUpper\"),\r\n      lower: document.getElementById(\"hpPgLower\"),\r\n      nums: document.getElementById(\"hpPgNums\"),\r\n      symbols: document.getElementById(\"hpPgSymbols\"),\r\n      safe: document.getElementById(\"hpPgSafe\"),\r\n      listWrap: document.getElementById(\"hpPgListWrap\"),\r\n      list: document.getElementById(\"hpPgList\"),\r\n      toast: document.getElementById(\"hpPgToast\")\r\n    };\r\n\r\n    if (!el.output || !el.length || !el.generate) return;\r\n\r\n    var presetButtons = root.querySelectorAll(\"[data-hp-preset]\");\r\n    var extraCards = root.querySelectorAll(\"#hpPgListWrap ~ div\");\r\n    var elToastTimer = null;\r\n    var cpuObserver = null;\r\n\r\n    var strengthBarWrap = null;\r\n    var strengthFill = null;\r\n\r\n    if (el.strengthText && el.strengthText.parentElement && el.strengthText.parentElement.nextElementSibling) {\r\n      strengthBarWrap = el.strengthText.parentElement.nextElementSibling;\r\n      strengthBarWrap.style.position = \"relative\";\r\n      strengthBarWrap.style.overflow = \"hidden\";\r\n\r\n      strengthFill = document.createElement(\"div\");\r\n      strengthFill.id = \"hpPgStrengthFill\";\r\n      strengthFill.style.height = \"100%\";\r\n      strengthFill.style.width = \"0%\";\r\n      strengthFill.style.borderRadius = \"999px\";\r\n      strengthFill.style.transition = \"width .25s ease, background .25s ease\";\r\n      strengthFill.style.background = \"#d9e3ef\";\r\n      strengthBarWrap.appendChild(strengthFill);\r\n    }\r\n\r\n    function setButtonText(button, text) {\r\n      if (!button) return;\r\n      var span = button.querySelector(\"span\");\r\n      if (span) {\r\n        span.textContent = text;\r\n      } else {\r\n        button.textContent = text;\r\n      }\r\n    }\r\n\r\n    function setPresetLabel(presetName, text) {\r\n      var btn = root.querySelector(\"[data-hp-preset='\" + presetName + \"']\");\r\n      if (!btn) return;\r\n      var span = btn.querySelector(\"span\");\r\n      if (span) {\r\n        span.textContent = text;\r\n      } else {\r\n        btn.textContent = text;\r\n      }\r\n      btn.setAttribute(\"aria-label\", text);\r\n      btn.setAttribute(\"title\", text);\r\n    }\r\n\r\n    function normalizePresetLabels() {\r\n      setPresetLabel(\"wp\", \"\u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0438\u0439\");\r\n    }\r\n\r\n    function showToast(message) {\r\n      if (!el.toast) return;\r\n      el.toast.textContent = message;\r\n      el.toast.style.opacity = \"1\";\r\n      el.toast.style.transform = \"translateY(0)\";\r\n      clearTimeout(elToastTimer);\r\n      elToastTimer = setTimeout(function () {\r\n        el.toast.style.opacity = \"0\";\r\n        el.toast.style.transform = \"translateY(10px)\";\r\n      }, 1800);\r\n    }\r\n\r\n    function debounce(fn, delay) {\r\n      var timer = null;\r\n      return function () {\r\n        clearTimeout(timer);\r\n        timer = setTimeout(fn, delay);\r\n      };\r\n    }\r\n\r\n    function rand(max) {\r\n      if (window.crypto && window.crypto.getRandomValues) {\r\n        var arr = new Uint32Array(1);\r\n        window.crypto.getRandomValues(arr);\r\n        return arr[0] % max;\r\n      }\r\n      return Math.floor(Math.random() * max);\r\n    }\r\n\r\n    function shuffleArray(arr) {\r\n      for (var i = arr.length - 1; i > 0; i--) {\r\n        var j = rand(i + 1);\r\n        var temp = arr[i];\r\n        arr[i] = arr[j];\r\n        arr[j] = temp;\r\n      }\r\n      return arr;\r\n    }\r\n\r\n    function pick(str) {\r\n      return str.charAt(rand(str.length));\r\n    }\r\n\r\n    function removeSimilarChars(str) {\r\n      return str.replace(\/[O0Il1]\/g, \"\");\r\n    }\r\n\r\n    function getSelectedSets() {\r\n      var sets = [];\r\n      var upper = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\r\n      var lower = \"abcdefghijklmnopqrstuvwxyz\";\r\n      var nums = \"0123456789\";\r\n      var symbols = \"!@#$%^&*()-_=+[]{};:,.?\/|~\";\r\n\r\n      if (el.safe.checked) {\r\n        upper = removeSimilarChars(upper);\r\n        lower = removeSimilarChars(lower);\r\n        nums = removeSimilarChars(nums);\r\n        symbols = removeSimilarChars(symbols);\r\n      }\r\n\r\n      if (el.upper.checked) sets.push(upper);\r\n      if (el.lower.checked) sets.push(lower);\r\n      if (el.nums.checked) sets.push(nums);\r\n      if (el.symbols.checked) sets.push(symbols);\r\n\r\n      return sets.filter(function (set) {\r\n        return set && set.length;\r\n      });\r\n    }\r\n\r\n    function ensureAtLeastOneCharset(changedInput) {\r\n      if (el.upper.checked || el.lower.checked || el.nums.checked || el.symbols.checked) return;\r\n\r\n      if (changedInput && changedInput !== el.safe) {\r\n        changedInput.checked = true;\r\n      } else {\r\n        el.lower.checked = true;\r\n      }\r\n\r\n      showToast(\"\u041c\u0430\u0454 \u0431\u0443\u0442\u0438 \u0432\u0438\u0431\u0440\u0430\u043d\u0438\u0439 \u0445\u043e\u0447\u0430 \u0431 \u043e\u0434\u0438\u043d \u0442\u0438\u043f \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432\");\r\n    }\r\n\r\n    function generatePassword() {\r\n      ensureAtLeastOneCharset();\r\n\r\n      var sets = getSelectedSets();\r\n      var length = parseInt(el.length.value, 10) || 16;\r\n\r\n      if (!sets.length) {\r\n        el.lower.checked = true;\r\n        sets = getSelectedSets();\r\n      }\r\n\r\n      var requiredChars = [];\r\n      var allChars = sets.join(\"\");\r\n\r\n      for (var i = 0; i < sets.length; i++) {\r\n        requiredChars.push(pick(sets[i]));\r\n      }\r\n\r\n      var remaining = Math.max(length - requiredChars.length, 0);\r\n      for (var j = 0; j < remaining; j++) {\r\n        requiredChars.push(pick(allChars));\r\n      }\r\n\r\n      shuffleArray(requiredChars);\r\n      return requiredChars.join(\"\");\r\n    }\r\n\r\n    function getStrengthMeta(password) {\r\n      if (!password) {\r\n        return {\r\n          label: \"\u2014\",\r\n          width: \"0%\",\r\n          color: \"#d9e3ef\"\r\n        };\r\n      }\r\n\r\n      var sets = getSelectedSets();\r\n      var poolSize = sets.reduce(function (sum, set) {\r\n        return sum + set.length;\r\n      }, 0);\r\n\r\n      var entropy = password.length * Math.log2(poolSize || 1);\r\n      var label = \"\u0421\u043b\u0430\u0431\u043a\u0438\u0439\";\r\n      var width = 25;\r\n      var color = \"#ef4444\";\r\n\r\n      if (entropy >= 40) {\r\n        label = \"\u0421\u0435\u0440\u0435\u0434\u043d\u0456\u0439\";\r\n        width = 50;\r\n        color = \"#f59e0b\";\r\n      }\r\n      if (entropy >= 56) {\r\n        label = \"\u0414\u043e\u0431\u0440\u0438\u0439\";\r\n        width = 70;\r\n        color = \"#f26522\";\r\n      }\r\n      if (entropy >= 72) {\r\n        label = \"\u041d\u0430\u0434\u0456\u0439\u043d\u0438\u0439\";\r\n        width = 85;\r\n        color = \"#22c55e\";\r\n      }\r\n      if (entropy >= 96) {\r\n        label = \"\u0414\u0443\u0436\u0435 \u043d\u0430\u0434\u0456\u0439\u043d\u0438\u0439\";\r\n        width = 100;\r\n        color = \"#16a34a\";\r\n      }\r\n\r\n      if (password.length < 12 && width > 50) {\r\n        label = \"\u0421\u0435\u0440\u0435\u0434\u043d\u0456\u0439\";\r\n        width = 50;\r\n        color = \"#f59e0b\";\r\n      }\r\n\r\n      if (sets.length === 1 && width > 50) {\r\n        label = \"\u0421\u0435\u0440\u0435\u0434\u043d\u0456\u0439\";\r\n        width = 50;\r\n        color = \"#f59e0b\";\r\n      }\r\n\r\n      return {\r\n        label: label,\r\n        width: width + \"%\",\r\n        color: color\r\n      };\r\n    }\r\n\r\n    function updateStrength(password) {\r\n      var meta = getStrengthMeta(password);\r\n      if (el.strengthText) {\r\n        el.strengthText.textContent = meta.label;\r\n        el.strengthText.style.color = meta.color === \"#d9e3ef\" ? \"#1d3768\" : meta.color;\r\n        el.strengthText.style.fontWeight = \"700\";\r\n      }\r\n      if (strengthFill) {\r\n        strengthFill.style.width = meta.width;\r\n        strengthFill.style.background = meta.color;\r\n      }\r\n    }\r\n\r\n    function updateLengthValue() {\r\n      if (!el.length) return;\r\n\r\n      var value = String(el.length.value);\r\n\r\n      if (!el.lengthValue) {\r\n        el.lengthValue = document.getElementById(\"hpPgLengthValue\") || root.querySelector(\"#hpPgSideCard span[id='hpPgLengthValue']\");\r\n      }\r\n\r\n      if (el.lengthValue) {\r\n        el.lengthValue.textContent = value;\r\n        el.lengthValue.innerText = value;\r\n      }\r\n    }\r\n\r\n    function removeCpuNearLengthSlider() {\r\n      if (!el.length) return;\r\n\r\n      var sliderWrap = el.length.parentElement;\r\n      if (!sliderWrap) return;\r\n\r\n      Array.prototype.slice.call(sliderWrap.childNodes).forEach(function (node) {\r\n        if (\r\n          node.nodeType === 3 &&\r\n          node.nodeValue &&\r\n          node.nodeValue.replace(\/\\s+\/g, \" \").trim().toUpperCase() === \"CPU\"\r\n        ) {\r\n          node.parentNode.removeChild(node);\r\n        }\r\n      });\r\n\r\n      sliderWrap.querySelectorAll(\"*\").forEach(function (node) {\r\n        if (node === el.length || node === el.lengthValue) return;\r\n\r\n        var text = (node.textContent || \"\").replace(\/\\s+\/g, \" \").trim().toUpperCase();\r\n        if (text === \"CPU\") {\r\n          node.style.display = \"none\";\r\n          node.setAttribute(\"aria-hidden\", \"true\");\r\n        }\r\n      });\r\n    }\r\n\r\n    function watchCpuRemoval() {\r\n      if (!el.length || !el.length.parentElement || cpuObserver) return;\r\n\r\n      cpuObserver = new MutationObserver(function () {\r\n        removeCpuNearLengthSlider();\r\n      });\r\n\r\n      cpuObserver.observe(el.length.parentElement, {\r\n        childList: true,\r\n        subtree: true,\r\n        characterData: true\r\n      });\r\n    }\r\n\r\n    function clearPresetState() {\r\n      presetButtons.forEach(function (btn) {\r\n        btn.style.background = \"#ffffff\";\r\n        btn.style.borderColor = \"#d9e3ef\";\r\n        btn.style.color = \"#1d3768\";\r\n        btn.style.boxShadow = \"none\";\r\n      });\r\n    }\r\n\r\n    function setActivePreset(presetName) {\r\n      presetButtons.forEach(function (btn) {\r\n        var isActive = btn.getAttribute(\"data-hp-preset\") === presetName;\r\n        btn.style.background = isActive ? \"#fff3eb\" : \"#ffffff\";\r\n        btn.style.borderColor = isActive ? \"#f26522\" : \"#d9e3ef\";\r\n        btn.style.color = isActive ? \"#f26522\" : \"#1d3768\";\r\n        btn.style.boxShadow = isActive ? \"0 8px 18px rgba(242,101,34,.12)\" : \"none\";\r\n      });\r\n    }\r\n\r\n    function copyText(text) {\r\n      if (navigator.clipboard && window.isSecureContext) {\r\n        return navigator.clipboard.writeText(text);\r\n      }\r\n\r\n      return new Promise(function (resolve, reject) {\r\n        try {\r\n          var textarea = document.createElement(\"textarea\");\r\n          textarea.value = text;\r\n          textarea.setAttribute(\"readonly\", \"\");\r\n          textarea.style.position = \"fixed\";\r\n          textarea.style.left = \"-9999px\";\r\n          document.body.appendChild(textarea);\r\n          textarea.select();\r\n          textarea.setSelectionRange(0, textarea.value.length);\r\n          var success = document.execCommand(\"copy\");\r\n          document.body.removeChild(textarea);\r\n\r\n          if (success) resolve();\r\n          else reject();\r\n        } catch (e) {\r\n          reject(e);\r\n        }\r\n      });\r\n    }\r\n\r\n    function createListRow(password) {\r\n      var row = document.createElement(\"div\");\r\n      row.setAttribute(\"data-hp-pg-row\", \"1\");\r\n      row.style.display = \"grid\";\r\n      row.style.gap = \"10px\";\r\n      row.style.alignItems = \"stretch\";\r\n      row.style.padding = \"12px\";\r\n      row.style.border = \"1px solid #e6edf5\";\r\n      row.style.borderRadius = \"12px\";\r\n      row.style.background = \"#f9fbfe\";\r\n      row.style.boxSizing = \"border-box\";\r\n      row.style.width = \"100%\";\r\n      row.style.maxWidth = \"100%\";\r\n      row.style.minWidth = \"0\";\r\n      row.style.overflowX = \"hidden\";\r\n\r\n      var value = document.createElement(\"div\");\r\n      value.style.display = \"flex\";\r\n      value.style.alignItems = \"center\";\r\n      value.style.minHeight = \"44px\";\r\n      value.style.padding = \"0 12px\";\r\n      value.style.border = \"1px solid #d7e0ec\";\r\n      value.style.borderRadius = \"10px\";\r\n      value.style.background = \"#ffffff\";\r\n      value.style.color = \"#18345f\";\r\n      value.style.fontSize = \"15px\";\r\n      value.style.fontWeight = \"700\";\r\n      value.style.wordBreak = \"break-all\";\r\n      value.style.overflowWrap = \"anywhere\";\r\n      value.style.boxSizing = \"border-box\";\r\n      value.style.width = \"100%\";\r\n      value.style.maxWidth = \"100%\";\r\n      value.style.minWidth = \"0\";\r\n      value.textContent = password;\r\n\r\n      var btn = document.createElement(\"button\");\r\n      btn.type = \"button\";\r\n      btn.setAttribute(\"data-hp-pg-copy-row\", \"1\");\r\n      btn.style.display = \"flex\";\r\n      btn.style.alignItems = \"center\";\r\n      btn.style.justifyContent = \"center\";\r\n      btn.style.height = \"44px\";\r\n      btn.style.padding = \"0 16px\";\r\n      btn.style.borderRadius = \"10px\";\r\n      btn.style.border = \"1px solid #d9e3ef\";\r\n      btn.style.background = \"#ffffff\";\r\n      btn.style.color = \"#1d3768\";\r\n      btn.style.cursor = \"pointer\";\r\n      btn.style.boxSizing = \"border-box\";\r\n      btn.style.font = \"700 14px Arial,sans-serif\";\r\n      btn.style.width = \"100%\";\r\n      btn.style.maxWidth = \"100%\";\r\n      btn.style.minWidth = \"0\";\r\n      btn.textContent = \"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438\";\r\n\r\n      btn.addEventListener(\"click\", function () {\r\n        copyText(password)\r\n          .then(function () {\r\n            btn.textContent = \"\u0421\u043a\u043e\u043f\u0456\u0439\u043e\u0432\u0430\u043d\u043e\";\r\n            showToast(\"\u041f\u0430\u0440\u043e\u043b\u044c \u0441\u043a\u043e\u043f\u0456\u0439\u043e\u0432\u0430\u043d\u043e\");\r\n            setTimeout(function () {\r\n              btn.textContent = \"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438\";\r\n            }, 1400);\r\n          })\r\n          .catch(function () {\r\n            showToast(\"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0441\u043a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438\");\r\n          });\r\n      });\r\n\r\n      row.appendChild(value);\r\n      row.appendChild(btn);\r\n      return row;\r\n    }\r\n\r\n    function renderPasswordList(count) {\r\n      if (!el.list || !el.listWrap) return;\r\n\r\n      el.list.innerHTML = \"\";\r\n      for (var i = 0; i < count; i++) {\r\n        el.list.appendChild(createListRow(generatePassword()));\r\n      }\r\n\r\n      el.listWrap.hidden = false;\r\n      applyResponsiveLayout();\r\n    }\r\n\r\n    function generateMainPassword() {\r\n      var password = generatePassword();\r\n      el.output.value = password;\r\n      updateStrength(password);\r\n      return password;\r\n    }\r\n\r\n    function generateAndSync() {\r\n      updateLengthValue();\r\n      removeCpuNearLengthSlider();\r\n      generateMainPassword();\r\n      if (!el.listWrap.hidden) {\r\n        renderPasswordList(5);\r\n      }\r\n    }\r\n\r\n    function applyPreset(preset) {\r\n      if (preset === \"wp\") {\r\n        el.length.value = \"20\";\r\n        el.upper.checked = true;\r\n        el.lower.checked = true;\r\n        el.nums.checked = true;\r\n        el.symbols.checked = true;\r\n        el.safe.checked = true;\r\n      }\r\n\r\n      if (preset === \"mail\") {\r\n        el.length.value = \"16\";\r\n        el.upper.checked = true;\r\n        el.lower.checked = true;\r\n        el.nums.checked = true;\r\n        el.symbols.checked = true;\r\n        el.safe.checked = true;\r\n      }\r\n\r\n      if (preset === \"max\") {\r\n        el.length.value = \"32\";\r\n        el.upper.checked = true;\r\n        el.lower.checked = true;\r\n        el.nums.checked = true;\r\n        el.symbols.checked = true;\r\n        el.safe.checked = false;\r\n      }\r\n\r\n      updateLengthValue();\r\n      setActivePreset(preset);\r\n      generateAndSync();\r\n    }\r\n\r\n    function applyResponsiveLayout() {\r\n      var w = window.innerWidth;\r\n      var isMobile = w < 640;\r\n      var isTablet = w >= 640 && w < 992;\r\n      var isDesktop = w >= 992;\r\n\r\n      document.documentElement.style.overflowX = \"hidden\";\r\n      document.body.style.overflowX = \"hidden\";\r\n\r\n      root.style.fontFamily = \"Arial, sans-serif\";\r\n      root.style.width = \"100%\";\r\n      root.style.maxWidth = \"100%\";\r\n      root.style.boxSizing = \"border-box\";\r\n      root.style.overflowX = \"hidden\";\r\n\r\n      if (el.container) {\r\n        el.container.style.width = \"100%\";\r\n        el.container.style.maxWidth = \"100%\";\r\n        el.container.style.boxSizing = \"border-box\";\r\n        el.container.style.minWidth = \"0\";\r\n        el.container.style.overflowX = \"hidden\";\r\n      }\r\n\r\n      if (el.title) {\r\n        el.title.style.fontSize = isMobile ? \"28px\" : (isTablet ? \"31px\" : \"34px\");\r\n        el.title.style.lineHeight = \"1.15\";\r\n        el.title.style.wordBreak = \"break-word\";\r\n        el.title.style.overflowWrap = \"anywhere\";\r\n      }\r\n\r\n      if (el.cardsWrap) {\r\n        if (isDesktop) {\r\n          el.cardsWrap.style.display = \"grid\";\r\n          el.cardsWrap.style.gridTemplateColumns = \"minmax(0,1.45fr) minmax(320px,.95fr)\";\r\n          el.cardsWrap.style.gap = \"16px\";\r\n          el.cardsWrap.style.alignItems = \"start\";\r\n        } else {\r\n          el.cardsWrap.style.display = \"block\";\r\n          el.cardsWrap.style.gridTemplateColumns = \"\";\r\n          el.cardsWrap.style.gap = \"\";\r\n        }\r\n        el.cardsWrap.style.fontSize = \"16px\";\r\n        el.cardsWrap.style.lineHeight = \"normal\";\r\n        el.cardsWrap.style.whiteSpace = \"normal\";\r\n        el.cardsWrap.style.width = \"100%\";\r\n        el.cardsWrap.style.maxWidth = \"100%\";\r\n        el.cardsWrap.style.minWidth = \"0\";\r\n        el.cardsWrap.style.overflowX = \"hidden\";\r\n      }\r\n\r\n      if (el.mainCard) {\r\n        el.mainCard.style.margin = isDesktop ? \"0\" : \"0 0 16px 0\";\r\n        el.mainCard.style.padding = isMobile ? \"16px\" : \"22px\";\r\n        el.mainCard.style.width = \"100%\";\r\n        el.mainCard.style.maxWidth = \"100%\";\r\n        el.mainCard.style.minWidth = \"0\";\r\n        el.mainCard.style.overflowX = \"hidden\";\r\n      }\r\n\r\n      if (el.sideCard) {\r\n        el.sideCard.style.margin = \"0\";\r\n        el.sideCard.style.padding = isMobile ? \"16px\" : \"22px\";\r\n        el.sideCard.style.width = \"100%\";\r\n        el.sideCard.style.maxWidth = \"100%\";\r\n        el.sideCard.style.minWidth = \"0\";\r\n        el.sideCard.style.overflowX = \"hidden\";\r\n      }\r\n\r\n      if (el.outputRow) {\r\n        if (w >= 768) {\r\n          el.outputRow.style.display = \"grid\";\r\n          el.outputRow.style.gridTemplateColumns = \"minmax(0,1fr) 170px\";\r\n          el.outputRow.style.gap = \"10px\";\r\n          el.outputRow.style.alignItems = \"stretch\";\r\n        } else {\r\n          el.outputRow.style.display = \"block\";\r\n          el.outputRow.style.gridTemplateColumns = \"\";\r\n          el.outputRow.style.gap = \"\";\r\n        }\r\n        el.outputRow.style.width = \"100%\";\r\n        el.outputRow.style.maxWidth = \"100%\";\r\n        el.outputRow.style.minWidth = \"0\";\r\n      }\r\n\r\n      if (el.output) {\r\n        el.output.style.height = isMobile ? \"48px\" : \"50px\";\r\n        el.output.style.fontSize = isMobile ? \"16px\" : \"17px\";\r\n        el.output.style.width = \"100%\";\r\n        el.output.style.maxWidth = \"100%\";\r\n        el.output.style.minWidth = \"0\";\r\n        el.output.style.boxSizing = \"border-box\";\r\n      }\r\n\r\n      if (el.copy) {\r\n        el.copy.style.width = \"100%\";\r\n        el.copy.style.maxWidth = \"100%\";\r\n        el.copy.style.minWidth = \"0\";\r\n        el.copy.style.height = isMobile ? \"48px\" : \"50px\";\r\n        el.copy.style.margin = w >= 768 ? \"0\" : \"10px 0 0 0\";\r\n        el.copy.style.boxSizing = \"border-box\";\r\n      }\r\n\r\n      if (el.presetGrid) {\r\n        el.presetGrid.style.display = \"grid\";\r\n        el.presetGrid.style.gap = \"10px\";\r\n        el.presetGrid.style.gridTemplateColumns = isDesktop ? \"repeat(3, minmax(0,1fr))\" : (isTablet ? \"repeat(2, minmax(0,1fr))\" : \"minmax(0,1fr)\");\r\n        el.presetGrid.style.width = \"100%\";\r\n        el.presetGrid.style.maxWidth = \"100%\";\r\n        el.presetGrid.style.minWidth = \"0\";\r\n      }\r\n\r\n      if (el.actions) {\r\n        el.actions.style.display = \"grid\";\r\n        el.actions.style.gap = \"12px\";\r\n        el.actions.style.gridTemplateColumns = isDesktop ? \"repeat(2, minmax(0,1fr))\" : \"minmax(0,1fr)\";\r\n        el.actions.style.width = \"100%\";\r\n        el.actions.style.maxWidth = \"100%\";\r\n        el.actions.style.minWidth = \"0\";\r\n      }\r\n\r\n      if (el.listWrap) {\r\n        el.listWrap.style.padding = isMobile ? \"16px\" : \"22px\";\r\n        el.listWrap.style.width = \"100%\";\r\n        el.listWrap.style.maxWidth = \"100%\";\r\n        el.listWrap.style.minWidth = \"0\";\r\n        el.listWrap.style.overflowX = \"hidden\";\r\n        el.listWrap.style.boxSizing = \"border-box\";\r\n      }\r\n\r\n      extraCards.forEach(function (card) {\r\n        card.style.padding = isMobile ? \"16px\" : \"22px\";\r\n        card.style.width = \"100%\";\r\n        card.style.maxWidth = \"100%\";\r\n        card.style.minWidth = \"0\";\r\n        card.style.overflowX = \"hidden\";\r\n        card.style.boxSizing = \"border-box\";\r\n      });\r\n\r\n      root.querySelectorAll(\"#hpPgActions > *, #hpPgPresetGrid > *, #hpPgOutputRow > *, [data-hp-pg-row='1'], [data-hp-pg-row='1'] > *\").forEach(function (item) {\r\n        item.style.minWidth = \"0\";\r\n        item.style.maxWidth = \"100%\";\r\n        item.style.boxSizing = \"border-box\";\r\n      });\r\n\r\n      root.querySelectorAll(\"#hpPgActions button, #hpPgGenerate, #hpPgGenerateList, #hpPgCopy\").forEach(function (btn) {\r\n        btn.style.width = \"100%\";\r\n        btn.style.maxWidth = \"100%\";\r\n        btn.style.minWidth = \"0\";\r\n        btn.style.boxSizing = \"border-box\";\r\n        if (isMobile) {\r\n          btn.style.whiteSpace = \"normal\";\r\n          btn.style.wordBreak = \"break-word\";\r\n          btn.style.overflowWrap = \"anywhere\";\r\n          btn.style.height = \"auto\";\r\n          btn.style.minHeight = \"48px\";\r\n          btn.style.paddingTop = \"10px\";\r\n          btn.style.paddingBottom = \"10px\";\r\n        } else {\r\n          btn.style.whiteSpace = \"nowrap\";\r\n          btn.style.wordBreak = \"normal\";\r\n          btn.style.overflowWrap = \"normal\";\r\n          btn.style.paddingTop = \"\";\r\n          btn.style.paddingBottom = \"\";\r\n        }\r\n      });\r\n\r\n      root.querySelectorAll(\"#hpPgActions button span, #hpPgCopy span\").forEach(function (span) {\r\n        span.style.whiteSpace = isMobile ? \"normal\" : \"nowrap\";\r\n        span.style.wordBreak = \"break-word\";\r\n        span.style.overflowWrap = \"anywhere\";\r\n        span.style.textAlign = \"center\";\r\n      });\r\n\r\n      root.querySelectorAll(\"#hpPgPresetGrid [data-hp-preset]\").forEach(function (item) {\r\n        item.style.minWidth = \"0\";\r\n        item.style.maxWidth = \"100%\";\r\n        item.style.boxSizing = \"border-box\";\r\n        item.style.whiteSpace = isMobile ? \"normal\" : \"nowrap\";\r\n        item.style.wordBreak = \"break-word\";\r\n        item.style.overflowWrap = \"anywhere\";\r\n        item.style.textAlign = \"center\";\r\n        if (isMobile) {\r\n          item.style.height = \"auto\";\r\n          item.style.minHeight = \"42px\";\r\n          item.style.paddingTop = \"10px\";\r\n          item.style.paddingBottom = \"10px\";\r\n        } else {\r\n          item.style.height = \"42px\";\r\n          item.style.paddingTop = \"\";\r\n          item.style.paddingBottom = \"\";\r\n        }\r\n      });\r\n\r\n      root.querySelectorAll(\"[data-hp-pg-row='1']\").forEach(function (row) {\r\n        row.style.gridTemplateColumns = w >= 768 ? \"minmax(0,1fr) 150px\" : \"minmax(0,1fr)\";\r\n        row.style.width = \"100%\";\r\n        row.style.maxWidth = \"100%\";\r\n        row.style.minWidth = \"0\";\r\n      });\r\n\r\n      root.querySelectorAll(\"[data-hp-pg-copy-row='1']\").forEach(function (btn) {\r\n        btn.style.width = \"100%\";\r\n        btn.style.maxWidth = \"100%\";\r\n        btn.style.minWidth = \"0\";\r\n        btn.style.marginTop = \"0\";\r\n      });\r\n\r\n      if (el.toast) {\r\n        el.toast.style.right = isMobile ? \"12px\" : \"20px\";\r\n        el.toast.style.bottom = isMobile ? \"12px\" : \"20px\";\r\n        el.toast.style.left = isMobile ? \"12px\" : \"auto\";\r\n        el.toast.style.maxWidth = isMobile ? \"calc(100vw - 24px)\" : \"420px\";\r\n        el.toast.style.boxSizing = \"border-box\";\r\n      }\r\n\r\n      removeCpuNearLengthSlider();\r\n      normalizePresetLabels();\r\n    }\r\n\r\n    el.output.addEventListener(\"click\", function () {\r\n      el.output.select();\r\n    });\r\n\r\n    el.copy.addEventListener(\"click\", function () {\r\n      if (!el.output.value) {\r\n        generateMainPassword();\r\n      }\r\n\r\n      copyText(el.output.value)\r\n        .then(function () {\r\n          setButtonText(el.copy, \"\u0421\u043a\u043e\u043f\u0456\u0439\u043e\u0432\u0430\u043d\u043e\");\r\n          showToast(\"\u041f\u0430\u0440\u043e\u043b\u044c \u0441\u043a\u043e\u043f\u0456\u0439\u043e\u0432\u0430\u043d\u043e\");\r\n          setTimeout(function () {\r\n            setButtonText(el.copy, \"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438\");\r\n          }, 1400);\r\n        })\r\n        .catch(function () {\r\n          showToast(\"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0441\u043a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438\");\r\n        });\r\n    });\r\n\r\n    el.generate.addEventListener(\"click\", function () {\r\n      clearPresetState();\r\n      generateAndSync();\r\n    });\r\n\r\n    el.generateList.addEventListener(\"click\", function () {\r\n      renderPasswordList(5);\r\n    });\r\n\r\n    [\"input\", \"change\"].forEach(function (eventName) {\r\n      el.length.addEventListener(eventName, function () {\r\n        updateLengthValue();\r\n        removeCpuNearLengthSlider();\r\n        clearPresetState();\r\n        generateAndSync();\r\n      });\r\n    });\r\n\r\n    [el.upper, el.lower, el.nums, el.symbols, el.safe].forEach(function (input) {\r\n      input.addEventListener(\"change\", function () {\r\n        ensureAtLeastOneCharset(input);\r\n        clearPresetState();\r\n        generateAndSync();\r\n      });\r\n    });\r\n\r\n    presetButtons.forEach(function (btn) {\r\n      btn.addEventListener(\"click\", function () {\r\n        applyPreset(btn.getAttribute(\"data-hp-preset\"));\r\n      });\r\n\r\n      btn.addEventListener(\"keydown\", function (e) {\r\n        if (e.key === \"Enter\" || e.key === \" \") {\r\n          e.preventDefault();\r\n          applyPreset(btn.getAttribute(\"data-hp-preset\"));\r\n        }\r\n      });\r\n    });\r\n\r\n    window.addEventListener(\"resize\", debounce(function () {\r\n      applyResponsiveLayout();\r\n      removeCpuNearLengthSlider();\r\n      normalizePresetLabels();\r\n    }, 100));\r\n\r\n    normalizePresetLabels();\r\n    updateLengthValue();\r\n    applyResponsiveLayout();\r\n    removeCpuNearLengthSlider();\r\n    watchCpuRemoval();\r\n    applyPreset(\"wp\");\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", initHostparkPasswordGenerator);\r\n  } else {\r\n    initHostparkPasswordGenerator();\r\n  }\r\n})();\r\n(function () {\r\n  function fixCustomRangeSliderHandle() {\r\n    if (!document.getElementById(\"hpPgRangeFixStyle\")) {\r\n      var style = document.createElement(\"style\");\r\n      style.id = \"hpPgRangeFixStyle\";\r\n      style.textContent = `\r\n        #hpPgSideCard .rangeslider,\r\n        #hpPgSideCard .rangeslider * {\r\n          box-sizing: border-box !important;\r\n        }\r\n\r\n        #hpPgSideCard .rangeslider {\r\n          width: 100% !important;\r\n          height: 6px !important;\r\n          background: #e5ebf4 !important;\r\n          border-radius: 999px !important;\r\n          box-shadow: none !important;\r\n          border: 0 !important;\r\n          margin: 0 !important;\r\n        }\r\n\r\n        #hpPgSideCard .rangeslider__fill {\r\n          background: #f26522 !important;\r\n          border-radius: 999px !important;\r\n          box-shadow: none !important;\r\n        }\r\n\r\n        #hpPgSideCard .rangeslider__handle {\r\n          width: 18px !important;\r\n          height: 18px !important;\r\n          top: 50% !important;\r\n          transform: translateY(-50%) !important;\r\n          border-radius: 50% !important;\r\n          background: #f26522 !important;\r\n          background-image: none !important;\r\n          border: 2px solid #ffffff !important;\r\n          box-shadow: 0 2px 8px rgba(242,101,34,.28) !important;\r\n          font-size: 0 !important;\r\n          color: transparent !important;\r\n          overflow: hidden !important;\r\n        }\r\n\r\n        #hpPgSideCard .rangeslider__handle::before,\r\n        #hpPgSideCard .rangeslider__handle::after {\r\n          content: none !important;\r\n          display: none !important;\r\n          background: none !important;\r\n          background-image: none !important;\r\n          box-shadow: none !important;\r\n        }\r\n\r\n        #hpPgSideCard .rangeslider__handle div,\r\n        #hpPgSideCard .rangeslider__handle span,\r\n        #hpPgSideCard .rangeslider__handle i,\r\n        #hpPgSideCard .rangeslider__handle svg,\r\n        #hpPgSideCard .rangeslider__handle img {\r\n          display: none !important;\r\n          opacity: 0 !important;\r\n          visibility: hidden !important;\r\n          width: 0 !important;\r\n          height: 0 !important;\r\n        }\r\n      `;\r\n      document.head.appendChild(style);\r\n    }\r\n\r\n    var handles = document.querySelectorAll(\"#hpPgSideCard .rangeslider__handle\");\r\n    handles.forEach(function (handle) {\r\n      handle.textContent = \"\";\r\n      handle.innerHTML = \"\";\r\n      handle.removeAttribute(\"title\");\r\n      handle.removeAttribute(\"aria-label\");\r\n    });\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", fixCustomRangeSliderHandle);\r\n  } else {\r\n    fixCustomRangeSliderHandle();\r\n  }\r\n\r\n  window.addEventListener(\"load\", fixCustomRangeSliderHandle);\r\n  setTimeout(fixCustomRangeSliderHandle, 100);\r\n  setTimeout(fixCustomRangeSliderHandle, 500);\r\n  setTimeout(fixCustomRangeSliderHandle, 1200);\r\n})();\r\n(function () {\r\n  function initLiveLengthSync() {\r\n    var input = document.getElementById(\"hpPgLength\");\r\n    var valueEl = document.getElementById(\"hpPgLengthValue\");\r\n    var sideCard = document.getElementById(\"hpPgSideCard\");\r\n\r\n    if (!input || !valueEl || !sideCard) return;\r\n\r\n    var frameId = null;\r\n    var dragging = false;\r\n\r\n    function getSliderParts() {\r\n      var slider = sideCard.querySelector(\".rangeslider\");\r\n      var handle = sideCard.querySelector(\".rangeslider__handle\");\r\n      return { slider: slider, handle: handle };\r\n    }\r\n\r\n    function clamp(num, min, max) {\r\n      return Math.min(Math.max(num, min), max);\r\n    }\r\n\r\n    function updateFromInput() {\r\n      var val = String(input.value);\r\n      valueEl.textContent = val;\r\n      valueEl.innerText = val;\r\n    }\r\n\r\n    function updateFromHandle() {\r\n      var parts = getSliderParts();\r\n      if (!parts.slider || !parts.handle) {\r\n        updateFromInput();\r\n        return;\r\n      }\r\n\r\n      var min = parseFloat(input.min || \"0\");\r\n      var max = parseFloat(input.max || \"100\");\r\n      var step = parseFloat(input.step || \"1\");\r\n\r\n      var sliderWidth = parts.slider.offsetWidth;\r\n      var handleWidth = parts.handle.offsetWidth;\r\n\r\n      if (!sliderWidth || !handleWidth) {\r\n        updateFromInput();\r\n        return;\r\n      }\r\n\r\n      var maxLeft = sliderWidth - handleWidth;\r\n      var left = parseFloat(parts.handle.style.left);\r\n\r\n      if (isNaN(left)) {\r\n        var sliderRect = parts.slider.getBoundingClientRect();\r\n        var handleRect = parts.handle.getBoundingClientRect();\r\n        left = handleRect.left - sliderRect.left;\r\n      }\r\n\r\n      left = clamp(left, 0, maxLeft);\r\n\r\n      var ratio = maxLeft > 0 ? left \/ maxLeft : 0;\r\n      var rawValue = min + ratio * (max - min);\r\n      var stepped = Math.round(rawValue \/ step) * step;\r\n      var finalValue = clamp(stepped, min, max);\r\n\r\n      if (String(input.value) !== String(finalValue)) {\r\n        input.value = finalValue;\r\n      }\r\n\r\n      valueEl.textContent = String(finalValue);\r\n      valueEl.innerText = String(finalValue);\r\n    }\r\n\r\n    function loop() {\r\n      updateFromHandle();\r\n      if (dragging) {\r\n        frameId = requestAnimationFrame(loop);\r\n      }\r\n    }\r\n\r\n    function startDrag() {\r\n      if (dragging) return;\r\n      dragging = true;\r\n      cancelAnimationFrame(frameId);\r\n      loop();\r\n    }\r\n\r\n    function stopDrag() {\r\n      dragging = false;\r\n      cancelAnimationFrame(frameId);\r\n      updateFromHandle();\r\n      updateFromInput();\r\n    }\r\n\r\n    function bindDragEvents() {\r\n      var parts = getSliderParts();\r\n      if (!parts.slider || !parts.handle) return false;\r\n\r\n      [parts.slider, parts.handle].forEach(function (el) {\r\n        el.addEventListener(\"mousedown\", startDrag);\r\n        el.addEventListener(\"touchstart\", startDrag, { passive: true });\r\n        el.addEventListener(\"pointerdown\", startDrag);\r\n        el.addEventListener(\"click\", function () {\r\n          setTimeout(updateFromHandle, 0);\r\n          setTimeout(updateFromHandle, 30);\r\n        });\r\n      });\r\n\r\n      return true;\r\n    }\r\n\r\n    input.addEventListener(\"input\", updateFromInput);\r\n    input.addEventListener(\"change\", updateFromInput);\r\n\r\n    document.addEventListener(\"mousemove\", function () {\r\n      if (dragging) updateFromHandle();\r\n    });\r\n\r\n    document.addEventListener(\"touchmove\", function () {\r\n      if (dragging) updateFromHandle();\r\n    }, { passive: true });\r\n\r\n    document.addEventListener(\"pointermove\", function () {\r\n      if (dragging) updateFromHandle();\r\n    });\r\n\r\n    document.addEventListener(\"mouseup\", stopDrag);\r\n    document.addEventListener(\"touchend\", stopDrag);\r\n    document.addEventListener(\"touchcancel\", stopDrag);\r\n    document.addEventListener(\"pointerup\", stopDrag);\r\n    document.addEventListener(\"pointercancel\", stopDrag);\r\n\r\n    var tries = 0;\r\n    var bindTimer = setInterval(function () {\r\n      tries++;\r\n      var ok = bindDragEvents();\r\n      updateFromInput();\r\n\r\n      if (ok || tries > 20) {\r\n        clearInterval(bindTimer);\r\n      }\r\n    }, 150);\r\n\r\n    setTimeout(updateFromInput, 50);\r\n    setTimeout(updateFromInput, 300);\r\n    setTimeout(updateFromInput, 800);\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", initLiveLengthSync);\r\n  } else {\r\n    initLiveLengthSync();\r\n  }\r\n\r\n  window.addEventListener(\"load\", initLiveLengthSync);\r\n})();\r\n(function () {\r\n  function copyNativeHeadingStylesToGenerator() {\r\n    var root = document.getElementById(\"hp-pg-light\");\r\n    if (!root) return;\r\n\r\n    var nativeHeading = document.querySelector(\"main h1:not(#hp-pg-light h1), main h2:not(#hp-pg-light h2), .content h1:not(#hp-pg-light h1), .content h2:not(#hp-pg-light h2), article h1:not(#hp-pg-light h1), article h2:not(#hp-pg-light h2), .entry-content h1:not(#hp-pg-light h1), .entry-content h2:not(#hp-pg-light h2), h1:not(#hp-pg-light h1), h2:not(#hp-pg-light h2)\");\r\n    if (!nativeHeading) return;\r\n\r\n    var nativeB = nativeHeading.querySelector(\"b, strong\");\r\n    var source = nativeB || nativeHeading;\r\n    var cs = window.getComputedStyle(source);\r\n\r\n    root.querySelectorAll(\"h1, h2, h3\").forEach(function (heading) {\r\n      heading.style.textAlign = \"left\";\r\n      heading.style.fontFamily = cs.fontFamily;\r\n      heading.style.fontSize = cs.fontSize;\r\n      heading.style.fontWeight = cs.fontWeight;\r\n      heading.style.lineHeight = cs.lineHeight;\r\n      heading.style.letterSpacing = cs.letterSpacing;\r\n      heading.style.color = cs.color;\r\n      heading.style.textTransform = cs.textTransform;\r\n      heading.style.marginTop = \"\";\r\n      heading.style.marginBottom = \"\";\r\n\r\n      heading.querySelectorAll(\"b, strong\").forEach(function (el) {\r\n        el.style.fontFamily = \"inherit\";\r\n        el.style.fontSize = \"inherit\";\r\n        el.style.fontWeight = \"inherit\";\r\n        el.style.lineHeight = \"inherit\";\r\n        el.style.letterSpacing = \"inherit\";\r\n        el.style.color = \"inherit\";\r\n        el.style.textTransform = \"inherit\";\r\n      });\r\n    });\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", copyNativeHeadingStylesToGenerator);\r\n  } else {\r\n    copyNativeHeadingStylesToGenerator();\r\n  }\r\n\r\n  window.addEventListener(\"load\", copyNativeHeadingStylesToGenerator);\r\n  window.addEventListener(\"resize\", copyNativeHeadingStylesToGenerator);\r\n  setTimeout(copyNativeHeadingStylesToGenerator, 150);\r\n})();\r\n(function () {\r\n  function matchHostparkHeadings() {\r\n    var root = document.getElementById(\"hp-pg-light\");\r\n    if (!root) return;\r\n\r\n    root.querySelectorAll(\"h1, h2, h3\").forEach(function (el) {\r\n      el.style.fontSize = \"34px\";\r\n      el.style.fontWeight = \"500\";\r\n      el.style.fontStyle = \"normal\";\r\n      el.style.fontStretch = \"normal\";\r\n      el.style.lineHeight = \"normal\";\r\n      el.style.letterSpacing = \"normal\";\r\n      el.style.color = \"#031b4e\";\r\n      el.style.marginBottom = \"18px\";\r\n    });\r\n\r\n    var h1 = root.querySelector(\"h1\");\r\n    if (h1) {\r\n      h1.style.textAlign = \"left\";\r\n    }\r\n\r\n    root.querySelectorAll(\"h2, h3\").forEach(function (el) {\r\n      el.style.textAlign = \"left\";\r\n    });\r\n\r\n    if (window.innerWidth < 640) {\r\n      root.querySelectorAll(\"h1, h2, h3\").forEach(function (el) {\r\n        el.style.fontSize = \"28px\";\r\n      });\r\n    }\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", matchHostparkHeadings);\r\n  } else {\r\n    matchHostparkHeadings();\r\n  }\r\n\r\n  window.addEventListener(\"load\", matchHostparkHeadings);\r\n  window.addEventListener(\"resize\", matchHostparkHeadings);\r\n})();\r\n(function () {\r\n  function fixGeneratorH3() {\r\n    var root = document.getElementById(\"hp-pg-light\");\r\n    if (!root) return;\r\n\r\n    root.querySelectorAll(\"h3\").forEach(function (el) {\r\n      el.style.fontSize = window.innerWidth < 640 ? \"28px\" : \"34px\";\r\n      el.style.fontWeight = \"500\";\r\n      el.style.lineHeight = \"normal\";\r\n      el.style.letterSpacing = \"normal\";\r\n      el.style.textAlign = \"center\";\r\n      el.style.color = \"#031b4e\";\r\n      el.style.marginBottom = \"25px\";\r\n    });\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", fixGeneratorH3);\r\n  } else {\r\n    fixGeneratorH3();\r\n  }\r\n\r\n  window.addEventListener(\"load\", fixGeneratorH3);\r\n  window.addEventListener(\"resize\", fixGeneratorH3);\r\n})();\r\n(function () {\r\n  function alignFaqHeadingsLeft() {\r\n    var root = document.getElementById(\"hp-pg-light\");\r\n    if (!root) return;\r\n\r\n    var allH2 = root.querySelectorAll(\"h2\");\r\n    var faqHeading = null;\r\n\r\n    allH2.forEach(function (h2) {\r\n      var text = (h2.textContent || \"\").replace(\/\\s+\/g, \" \").trim().toLowerCase();\r\n      if (text === \"faq\") {\r\n        faqHeading = h2;\r\n      }\r\n    });\r\n\r\n    if (!faqHeading) return;\r\n\r\n    var node = faqHeading.nextElementSibling;\r\n\r\n    while (node) {\r\n      if (node.tagName && node.tagName.toLowerCase() === \"h2\") break;\r\n\r\n      if (node.tagName && node.tagName.toLowerCase() === \"h3\") {\r\n        node.style.textAlign = \"left\";\r\n      }\r\n\r\n      if (node.querySelectorAll) {\r\n        node.querySelectorAll(\"h3\").forEach(function (h3) {\r\n          h3.style.textAlign = \"left\";\r\n        });\r\n      }\r\n\r\n      node = node.nextElementSibling;\r\n    }\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", alignFaqHeadingsLeft);\r\n  } else {\r\n    alignFaqHeadingsLeft();\r\n  }\r\n\r\n  window.addEventListener(\"load\", alignFaqHeadingsLeft);\r\n  setTimeout(alignFaqHeadingsLeft, 150);\r\n})();\r\n(function () {\r\n  function initHpPasswordRating() {\r\n    var block = document.getElementById(\"hpPgRatingBlock\");\r\n    if (!block || block.dataset.hpRatingReady === \"1\") return;\r\n    block.dataset.hpRatingReady = \"1\";\r\n\r\n    var els = {\r\n      value: document.getElementById(\"hpPgRatingValue\"),\r\n      valueInline: document.getElementById(\"hpPgRatingValueInline\"),\r\n      count: document.getElementById(\"hpPgRatingCount\"),\r\n      best: document.getElementById(\"hpPgRatingBest\"),\r\n      fill: document.getElementById(\"hpPgRatingStarsFill\"),\r\n      summary: document.getElementById(\"hpPgRatingSummary\"),\r\n      voteArea: document.getElementById(\"hpPgVoteArea\"),\r\n      voteButtons: document.querySelectorAll(\"#hpPgVoteButtons [data-rate]\"),\r\n      voteMessage: document.getElementById(\"hpPgVoteMessage\")\r\n    };\r\n\r\n    var storageKeys = {\r\n      userVote: \"hpPgUserVote\",\r\n      rating: \"hpPgLocalRating\",\r\n      count: \"hpPgLocalCount\"\r\n    };\r\n\r\n    var state = {\r\n      rating: parseFloat(block.getAttribute(\"data-rating\") || \"4.8\"),\r\n      count: parseInt(block.getAttribute(\"data-count\") || \"1243\", 10),\r\n      best: parseInt(block.getAttribute(\"data-best\") || \"5\", 10),\r\n      name: block.getAttribute(\"data-name\") || document.title || \"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430\u0434\u0456\u0439\u043d\u0438\u0445 \u043f\u0430\u0440\u043e\u043b\u0456\u0432\"\r\n    };\r\n\r\n    function clamp(num, min, max) {\r\n      return Math.min(Math.max(num, min), max);\r\n    }\r\n\r\n    function roundToOne(num) {\r\n      return Math.round(num * 10) \/ 10;\r\n    }\r\n\r\n    function getStoredState() {\r\n      try {\r\n        var savedRating = localStorage.getItem(storageKeys.rating);\r\n        var savedCount = localStorage.getItem(storageKeys.count);\r\n\r\n        if (savedRating !== null && savedCount !== null) {\r\n          var parsedRating = parseFloat(savedRating);\r\n          var parsedCount = parseInt(savedCount, 10);\r\n\r\n          if (!isNaN(parsedRating) && !isNaN(parsedCount) && parsedCount > 0) {\r\n            state.rating = parsedRating;\r\n            state.count = parsedCount;\r\n          }\r\n        }\r\n      } catch (e) {}\r\n    }\r\n\r\n    function updateSchema() {\r\n      var oldSchema = document.getElementById(\"hpPgAggregateRatingSchema\");\r\n      if (oldSchema) oldSchema.remove();\r\n\r\n      var schema = {\r\n        \"@context\": \"https:\/\/schema.org\",\r\n        \"@type\": \"CreativeWorkSeries\",\r\n        \"name\": state.name,\r\n        \"url\": window.location.href,\r\n        \"aggregateRating\": {\r\n          \"@type\": \"AggregateRating\",\r\n          \"ratingValue\": state.rating.toFixed(1),\r\n          \"bestRating\": String(state.best),\r\n          \"ratingCount\": String(state.count),\r\n          \"reviewCount\": String(state.count)\r\n        }\r\n      };\r\n\r\n      var script = document.createElement(\"script\");\r\n      script.type = \"application\/ld+json\";\r\n      script.id = \"hpPgAggregateRatingSchema\";\r\n      script.text = JSON.stringify(schema);\r\n      document.head.appendChild(script);\r\n    }\r\n\r\n    function render() {\r\n      var percent = clamp((state.rating \/ state.best) * 100, 0, 100);\r\n\r\n      if (els.value) {\r\n        els.value.textContent = state.rating.toFixed(1);\r\n      }\r\n\r\n      if (els.valueInline) {\r\n        els.valueInline.textContent = state.rating.toFixed(1);\r\n      }\r\n\r\n      if (els.count) {\r\n        els.count.textContent = String(state.count);\r\n      }\r\n\r\n      if (els.best) {\r\n        els.best.textContent = String(state.best);\r\n      }\r\n\r\n      if (els.fill) {\r\n        els.fill.style.width = percent + \"%\";\r\n      }\r\n\r\n      updateSchema();\r\n      applyResponsive();\r\n    }\r\n\r\n    function resetVoteButtonsVisual() {\r\n      els.voteButtons.forEach(function (btn) {\r\n        btn.style.borderColor = \"#d9e3ef\";\r\n        btn.style.background = \"#fff\";\r\n        btn.style.color = \"#031b4e\";\r\n      });\r\n    }\r\n\r\n    function markVoted(vote) {\r\n      els.voteButtons.forEach(function (btn) {\r\n        var btnRate = parseInt(btn.getAttribute(\"data-rate\"), 10);\r\n        var isActive = btnRate === vote;\r\n\r\n        btn.disabled = true;\r\n        btn.style.cursor = \"default\";\r\n        btn.style.borderColor = isActive ? \"#f26522\" : \"#d9e3ef\";\r\n        btn.style.background = isActive ? \"#fff3eb\" : \"#fff\";\r\n        btn.style.color = isActive ? \"#f26522\" : \"#031b4e\";\r\n        btn.style.opacity = \"1\";\r\n      });\r\n\r\n      if (els.voteMessage) {\r\n        els.voteMessage.textContent = \"\u0414\u044f\u043a\u0443\u0454\u043c\u043e, \u0432\u0430\u0448\u0443 \u043e\u0446\u0456\u043d\u043a\u0443 \u0432\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u043e.\";\r\n        els.voteMessage.style.color = \"#2b7a2b\";\r\n      }\r\n    }\r\n\r\n    function bindVotes() {\r\n      var existingVote = null;\r\n\r\n      try {\r\n        existingVote = localStorage.getItem(storageKeys.userVote);\r\n      } catch (e) {}\r\n\r\n      if (existingVote) {\r\n        markVoted(parseInt(existingVote, 10));\r\n        return;\r\n      }\r\n\r\n      els.voteButtons.forEach(function (btn) {\r\n        btn.addEventListener(\"mouseenter\", function () {\r\n          var hoverRate = parseInt(btn.getAttribute(\"data-rate\"), 10);\r\n\r\n          els.voteButtons.forEach(function (b) {\r\n            var r = parseInt(b.getAttribute(\"data-rate\"), 10);\r\n            var active = r <= hoverRate;\r\n\r\n            b.style.borderColor = active ? \"#f26522\" : \"#d9e3ef\";\r\n            b.style.background = active ? \"#fff3eb\" : \"#fff\";\r\n            b.style.color = active ? \"#f26522\" : \"#031b4e\";\r\n          });\r\n        });\r\n\r\n        btn.addEventListener(\"mouseleave\", function () {\r\n          resetVoteButtonsVisual();\r\n        });\r\n\r\n        btn.addEventListener(\"click\", function () {\r\n          var vote = parseInt(btn.getAttribute(\"data-rate\"), 10);\r\n          if (!vote) return;\r\n\r\n          try {\r\n            if (localStorage.getItem(storageKeys.userVote)) return;\r\n          } catch (e) {}\r\n\r\n          var newCount = state.count + 1;\r\n          var newRating = ((state.rating * state.count) + vote) \/ newCount;\r\n\r\n          state.count = newCount;\r\n          state.rating = roundToOne(newRating);\r\n\r\n          try {\r\n            localStorage.setItem(storageKeys.userVote, String(vote));\r\n            localStorage.setItem(storageKeys.rating, String(state.rating));\r\n            localStorage.setItem(storageKeys.count, String(state.count));\r\n          } catch (e) {}\r\n\r\n          render();\r\n          markVoted(vote);\r\n        });\r\n      });\r\n    }\r\n\r\n    function applyResponsive() {\r\n      var isMobile = window.innerWidth < 640;\r\n\r\n      if (block) {\r\n        block.style.padding = isMobile ? \"18px\" : \"24px\";\r\n      }\r\n\r\n      if (els.summary) {\r\n        els.summary.style.padding = isMobile ? \"20px 14px\" : \"24px 20px\";\r\n      }\r\n\r\n      if (els.value) {\r\n        els.value.style.fontSize = isMobile ? \"48px\" : \"58px\";\r\n        els.value.style.marginBottom = isMobile ? \"8px\" : \"10px\";\r\n      }\r\n\r\n      if (els.fill && els.fill.parentElement) {\r\n        els.fill.parentElement.style.fontSize = isMobile ? \"26px\" : \"30px\";\r\n        els.fill.parentElement.style.letterSpacing = isMobile ? \"2px\" : \"3px\";\r\n      }\r\n\r\n      if (els.voteMessage) {\r\n        els.voteMessage.style.fontSize = isMobile ? \"13px\" : \"14px\";\r\n      }\r\n\r\n      els.voteButtons.forEach(function (btn) {\r\n        btn.style.width = \"auto\";\r\n        btn.style.minWidth = isMobile ? \"50px\" : \"54px\";\r\n        btn.style.height = isMobile ? \"36px\" : \"38px\";\r\n        btn.style.padding = isMobile ? \"0 10px\" : \"0 12px\";\r\n        btn.style.flex = \"0 0 auto\";\r\n        btn.style.boxSizing = \"border-box\";\r\n        btn.style.fontSize = isMobile ? \"13px\" : \"14px\";\r\n      });\r\n    }\r\n\r\n    getStoredState();\r\n    render();\r\n    bindVotes();\r\n\r\n    window.addEventListener(\"resize\", applyResponsive);\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", initHpPasswordRating);\r\n  } else {\r\n    initHpPasswordRating();\r\n  }\r\n})();\r\n(function () {\r\n  function initHpServersCta() {\r\n    var section = document.getElementById(\"hpServersCta\");\r\n    var container = document.getElementById(\"hpServersCtaContainer\");\r\n    var inner = document.getElementById(\"hpServersCtaInner\");\r\n    var title = document.getElementById(\"hpServersCtaTitle\");\r\n    var buttons = document.getElementById(\"hpServersCtaButtons\");\r\n\r\n    if (!section || !inner || !title || !buttons || section.dataset.hpServersReady === \"1\") return;\r\n    section.dataset.hpServersReady = \"1\";\r\n\r\n    var links = buttons.querySelectorAll(\"a\");\r\n\r\n    function applyBaseStyles() {\r\n      section.style.margin = \"24px 0 32px\";\r\n      section.style.padding = \"14px 0 16px\";\r\n      section.style.overflow = \"hidden\";\r\n\r\n      if (container) {\r\n        container.style.position = \"relative\";\r\n        container.style.zIndex = \"2\";\r\n      }\r\n\r\n      inner.style.maxWidth = \"1040px\";\r\n      inner.style.width = \"100%\";\r\n      inner.style.margin = \"0 auto\";\r\n      inner.style.padding = \"0\";\r\n      inner.style.background = \"transparent\";\r\n      inner.style.border = \"0\";\r\n      inner.style.boxShadow = \"none\";\r\n      inner.style.borderRadius = \"0\";\r\n      inner.style.textAlign = \"center\";\r\n      inner.style.boxSizing = \"border-box\";\r\n\r\n      title.style.display = \"block\";\r\n      title.style.margin = \"0 0 14px\";\r\n      title.style.color = \"#ffffff\";\r\n      title.style.fontSize = \"34px\";\r\n      title.style.fontWeight = \"500\";\r\n      title.style.lineHeight = \"1.15\";\r\n      title.style.letterSpacing = \"normal\";\r\n      title.style.textAlign = \"center\";\r\n\r\n      buttons.style.display = \"flex\";\r\n      buttons.style.alignItems = \"center\";\r\n      buttons.style.justifyContent = \"center\";\r\n      buttons.style.flexWrap = \"nowrap\";\r\n      buttons.style.gap = \"14px\";\r\n      buttons.style.maxWidth = \"1000px\";\r\n      buttons.style.margin = \"0 auto\";\r\n\r\n      links.forEach(function (link) {\r\n        link.style.display = \"inline-flex\";\r\n        link.style.alignItems = \"center\";\r\n        link.style.justifyContent = \"center\";\r\n        link.style.flex = \"1 1 0\";\r\n        link.style.minWidth = \"0\";\r\n        link.style.minHeight = \"48px\";\r\n        link.style.padding = \"10px 14px\";\r\n        link.style.borderRadius = \"12px\";\r\n        link.style.background = \"#ffffff\";\r\n        link.style.border = \"1px solid rgba(255,255,255,.95)\";\r\n        link.style.boxShadow = \"none\";\r\n        link.style.color = \"#f26522\";\r\n        link.style.textDecoration = \"none\";\r\n        link.style.fontSize = \"15px\";\r\n        link.style.fontWeight = \"600\";\r\n        link.style.lineHeight = \"1.25\";\r\n        link.style.textAlign = \"center\";\r\n        link.style.boxSizing = \"border-box\";\r\n        link.style.whiteSpace = \"nowrap\";\r\n        link.style.transition = \"transform .2s ease, background .2s ease\";\r\n\r\n        link.addEventListener(\"mouseenter\", function () {\r\n          link.style.transform = \"translateY(-1px)\";\r\n          link.style.background = \"#fff7f2\";\r\n        });\r\n\r\n        link.addEventListener(\"mouseleave\", function () {\r\n          link.style.transform = \"translateY(0)\";\r\n          link.style.background = \"#ffffff\";\r\n        });\r\n      });\r\n    }\r\n\r\n    function applyResponsive() {\r\n      var w = window.innerWidth;\r\n\r\n      if (w < 640) {\r\n        section.style.padding = \"12px 0 14px\";\r\n\r\n        title.style.fontSize = \"24px\";\r\n        title.style.marginBottom = \"10px\";\r\n\r\n        buttons.style.display = \"grid\";\r\n        buttons.style.gridTemplateColumns = \"1fr\";\r\n        buttons.style.gap = \"10px\";\r\n        buttons.style.maxWidth = \"100%\";\r\n\r\n        links.forEach(function (link) {\r\n          link.style.flex = \"none\";\r\n          link.style.minHeight = \"44px\";\r\n          link.style.padding = \"10px 12px\";\r\n          link.style.fontSize = \"14px\";\r\n          link.style.whiteSpace = \"normal\";\r\n          link.style.borderRadius = \"10px\";\r\n        });\r\n        return;\r\n      }\r\n\r\n      if (w < 992) {\r\n        section.style.padding = \"14px 0 16px\";\r\n\r\n        title.style.fontSize = \"28px\";\r\n        title.style.marginBottom = \"12px\";\r\n\r\n        buttons.style.display = \"flex\";\r\n        buttons.style.flexWrap = \"nowrap\";\r\n        buttons.style.gap = \"10px\";\r\n        buttons.style.maxWidth = \"100%\";\r\n\r\n        links.forEach(function (link) {\r\n          link.style.flex = \"1 1 0\";\r\n          link.style.minHeight = \"46px\";\r\n          link.style.padding = \"10px 10px\";\r\n          link.style.fontSize = \"14px\";\r\n          link.style.whiteSpace = \"normal\";\r\n          link.style.borderRadius = \"10px\";\r\n        });\r\n        return;\r\n      }\r\n\r\n      section.style.padding = \"14px 0 16px\";\r\n\r\n      title.style.fontSize = \"34px\";\r\n      title.style.marginBottom = \"14px\";\r\n\r\n      buttons.style.display = \"flex\";\r\n      buttons.style.flexWrap = \"nowrap\";\r\n      buttons.style.gap = \"14px\";\r\n      buttons.style.maxWidth = \"1000px\";\r\n\r\n      links.forEach(function (link) {\r\n        link.style.flex = \"1 1 0\";\r\n        link.style.minHeight = \"48px\";\r\n        link.style.padding = \"10px 14px\";\r\n        link.style.fontSize = \"15px\";\r\n        link.style.whiteSpace = \"nowrap\";\r\n        link.style.borderRadius = \"12px\";\r\n      });\r\n    }\r\n\r\n    applyBaseStyles();\r\n    applyResponsive();\r\n\r\n    window.addEventListener(\"resize\", applyResponsive);\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", initHpServersCta);\r\n  } else {\r\n    initHpServersCta();\r\n  }\r\n})();\r\n(function () {\r\n  function initHpPgAboutToggle() {\r\n    var details = document.getElementById(\"hpPgAboutDetails\");\r\n    var icon = document.getElementById(\"hpPgAboutIcon\");\r\n    if (!details || !icon) return;\r\n\r\n    function syncIcon() {\r\n      icon.textContent = details.open ? \"\u2212\" : \"+\";\r\n    }\r\n\r\n    syncIcon();\r\n    details.addEventListener(\"toggle\", syncIcon);\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", initHpPgAboutToggle);\r\n  } else {\r\n    initHpPgAboutToggle();\r\n  }\r\n})();\r\n(function () {\r\n  function forceAboutBlockFullWidth() {\r\n    var root = document.getElementById(\"hpPgAbout\");\r\n    if (!root) return;\r\n\r\n    function setImp(el, prop, value) {\r\n      if (!el) return;\r\n      el.style.setProperty(prop, value, \"important\");\r\n    }\r\n\r\n    setImp(root, \"width\", \"100%\");\r\n    setImp(root, \"max-width\", \"none\");\r\n    setImp(root, \"min-width\", \"0\");\r\n    setImp(root, \"display\", \"block\");\r\n    setImp(root, \"box-sizing\", \"border-box\");\r\n\r\n    root.querySelectorAll(\"div, p, details, summary\").forEach(function (el) {\r\n      setImp(el, \"width\", \"100%\");\r\n      setImp(el, \"max-width\", \"none\");\r\n      setImp(el, \"min-width\", \"0\");\r\n      setImp(el, \"box-sizing\", \"border-box\");\r\n      setImp(el, \"float\", \"none\");\r\n      setImp(el, \"clear\", \"both\");\r\n    });\r\n\r\n    root.querySelectorAll(\"p\").forEach(function (p) {\r\n      setImp(p, \"display\", \"block\");\r\n      setImp(p, \"width\", \"100%\");\r\n      setImp(p, \"max-width\", \"none\");\r\n      setImp(p, \"min-width\", \"0\");\r\n      setImp(p, \"margin-right\", \"0\");\r\n      setImp(p, \"padding-right\", \"0\");\r\n      setImp(p, \"white-space\", \"normal\");\r\n    });\r\n\r\n    var topCard = root.querySelector(\":scope > div\");\r\n    if (topCard) {\r\n      setImp(topCard, \"width\", \"100%\");\r\n      setImp(topCard, \"max-width\", \"none\");\r\n      setImp(topCard, \"display\", \"block\");\r\n    }\r\n\r\n    var textWraps = root.querySelectorAll(\"div\");\r\n    textWraps.forEach(function (wrap) {\r\n      setImp(wrap, \"display\", \"block\");\r\n      setImp(wrap, \"width\", \"100%\");\r\n      setImp(wrap, \"max-width\", \"none\");\r\n    });\r\n\r\n    var summary = document.getElementById(\"hpPgAboutSummary\");\r\n    if (summary) {\r\n      setImp(summary, \"display\", \"flex\");\r\n    }\r\n\r\n    var icon = document.getElementById(\"hpPgAboutIcon\");\r\n    if (icon) {\r\n      icon.style.removeProperty(\"width\");\r\n      icon.style.removeProperty(\"max-width\");\r\n      setImp(icon, \"width\", \"30px\");\r\n      setImp(icon, \"min-width\", \"30px\");\r\n      setImp(icon, \"max-width\", \"30px\");\r\n      setImp(icon, \"flex\", \"0 0 30px\");\r\n    }\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", forceAboutBlockFullWidth);\r\n  } else {\r\n    forceAboutBlockFullWidth();\r\n  }\r\n\r\n  window.addEventListener(\"load\", forceAboutBlockFullWidth);\r\n  setTimeout(forceAboutBlockFullWidth, 150);\r\n  setTimeout(forceAboutBlockFullWidth, 600);\r\n})();\r\n(function () {\r\n  function fixAboutBlockTextFlow() {\r\n    var root = document.getElementById(\"hpPgAbout\");\r\n    if (!root) return;\r\n\r\n    function setImp(el, prop, value) {\r\n      el.style.setProperty(prop, value, \"important\");\r\n    }\r\n\r\n    root.querySelectorAll(\"p\").forEach(function (p) {\r\n      p.querySelectorAll(\"br\").forEach(function (br) {\r\n        br.replaceWith(document.createTextNode(\" \"));\r\n      });\r\n\r\n      var text = (p.textContent || \"\").replace(\/\\s+\/g, \" \").trim();\r\n\r\n      if (!text) {\r\n        p.remove();\r\n        return;\r\n      }\r\n\r\n      setImp(p, \"width\", \"100%\");\r\n      setImp(p, \"max-width\", \"none\");\r\n      setImp(p, \"min-width\", \"0\");\r\n      setImp(p, \"display\", \"block\");\r\n      setImp(p, \"white-space\", \"normal\");\r\n      setImp(p, \"box-sizing\", \"border-box\");\r\n      setImp(p, \"float\", \"none\");\r\n      setImp(p, \"clear\", \"both\");\r\n      setImp(p, \"margin-right\", \"0\");\r\n      setImp(p, \"padding-right\", \"0\");\r\n    });\r\n\r\n    root.querySelectorAll(\"div\").forEach(function (div) {\r\n      setImp(div, \"width\", \"100%\");\r\n      setImp(div, \"max-width\", \"none\");\r\n      setImp(div, \"min-width\", \"0\");\r\n      setImp(div, \"box-sizing\", \"border-box\");\r\n    });\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", fixAboutBlockTextFlow);\r\n  } else {\r\n    fixAboutBlockTextFlow();\r\n  }\r\n\r\n  window.addEventListener(\"load\", fixAboutBlockTextFlow);\r\n  setTimeout(fixAboutBlockTextFlow, 150);\r\n})();\r\n(function () {\r\n  function restorePasswordSliderVisual() {\r\n    if (!document.getElementById(\"hpPgRestoreSliderStyle\")) {\r\n      var style = document.createElement(\"style\");\r\n      style.id = \"hpPgRestoreSliderStyle\";\r\n      style.textContent = `\r\n        \/* native range *\/\r\n        #hpPgLength{\r\n          accent-color:#f26522 !important;\r\n        }\r\n\r\n        #hpPgLength::-webkit-slider-thumb{\r\n          -webkit-appearance:none !important;\r\n          appearance:none !important;\r\n          width:18px !important;\r\n          height:18px !important;\r\n          border-radius:50% !important;\r\n          background:#f26522 !important;\r\n          border:2px solid #ffffff !important;\r\n          box-shadow:0 2px 8px rgba(242,101,34,.28) !important;\r\n          cursor:pointer !important;\r\n          margin-top:-6px !important;\r\n        }\r\n\r\n        #hpPgLength::-webkit-slider-runnable-track{\r\n          height:6px !important;\r\n          border-radius:999px !important;\r\n        }\r\n\r\n        #hpPgLength::-moz-range-thumb{\r\n          width:18px !important;\r\n          height:18px !important;\r\n          border-radius:50% !important;\r\n          background:#f26522 !important;\r\n          border:2px solid #ffffff !important;\r\n          box-shadow:0 2px 8px rgba(242,101,34,.28) !important;\r\n          cursor:pointer !important;\r\n        }\r\n\r\n        #hpPgLength::-moz-range-track{\r\n          height:6px !important;\r\n          border-radius:999px !important;\r\n        }\r\n\r\n        \/* custom rangeslider *\/\r\n        #hpPgSideCard .rangeslider{\r\n          width:100% !important;\r\n          height:6px !important;\r\n          background:#e5ebf4 !important;\r\n          border-radius:999px !important;\r\n          box-shadow:none !important;\r\n          border:0 !important;\r\n          margin:0 !important;\r\n        }\r\n\r\n        #hpPgSideCard .rangeslider__fill{\r\n          background:#f26522 !important;\r\n          border-radius:999px !important;\r\n          box-shadow:none !important;\r\n        }\r\n\r\n        #hpPgSideCard .rangeslider__handle{\r\n          width:18px !important;\r\n          height:18px !important;\r\n          border-radius:50% !important;\r\n          background:#f26522 !important;\r\n          background-image:none !important;\r\n          border:2px solid #ffffff !important;\r\n          box-shadow:0 2px 8px rgba(242,101,34,.28) !important;\r\n          color:transparent !important;\r\n          font-size:0 !important;\r\n          overflow:hidden !important;\r\n        }\r\n\r\n        #hpPgSideCard .rangeslider__handle::before,\r\n        #hpPgSideCard .rangeslider__handle::after{\r\n          content:none !important;\r\n          display:none !important;\r\n          background:none !important;\r\n          background-image:none !important;\r\n          box-shadow:none !important;\r\n        }\r\n      `;\r\n      document.head.appendChild(style);\r\n    }\r\n\r\n    var handle = document.querySelector(\"#hpPgSideCard .rangeslider__handle\");\r\n    if (handle) {\r\n      handle.textContent = \"\";\r\n      handle.innerHTML = \"\";\r\n      handle.removeAttribute(\"title\");\r\n      handle.removeAttribute(\"aria-label\");\r\n    }\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", restorePasswordSliderVisual);\r\n  } else {\r\n    restorePasswordSliderVisual();\r\n  }\r\n\r\n  window.addEventListener(\"load\", restorePasswordSliderVisual);\r\n  setTimeout(restorePasswordSliderVisual, 100);\r\n  setTimeout(restorePasswordSliderVisual, 500);\r\n})();\r\n(function () {\r\n  function initHpPasswordGeneratorI18nPatchSafe() {\r\n    var root = document.getElementById(\"hp-pg-light\");\r\n    if (!root || root.dataset.hpPgI18nSafeReady === \"1\") return;\r\n    root.dataset.hpPgI18nSafeReady = \"1\";\r\n\r\n    var lang =\r\n      root.getAttribute(\"data-lang\") ||\r\n      (window.location.pathname.indexOf(\"\/ru\/\") === 0\r\n        ? \"ru\"\r\n        : window.location.pathname.indexOf(\"\/en\/\") === 0\r\n        ? \"en\"\r\n        : \"uk\");\r\n\r\n    var dict = {\r\n      uk: {\r\n        universal: \"\u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0438\u0439\",\r\n        mail: \"\u0414\u043b\u044f \u043f\u043e\u0448\u0442\u0438\",\r\n        max: \"\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0438\u0439\",\r\n        copy: \"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438\",\r\n        copied: \"\u0421\u043a\u043e\u043f\u0456\u0439\u043e\u0432\u0430\u043d\u043e\",\r\n        passwordCopied: \"\u041f\u0430\u0440\u043e\u043b\u044c \u0441\u043a\u043e\u043f\u0456\u0439\u043e\u0432\u0430\u043d\u043e\",\r\n        copyFailed: \"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0441\u043a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438\",\r\n        generate: \"\u0417\u0433\u0435\u043d\u0435\u0440\u0443\u0432\u0430\u0442\u0438 \u043f\u0430\u0440\u043e\u043b\u044c\",\r\n        showMore: \"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0449\u0435 5 \u0432\u0430\u0440\u0456\u0430\u043d\u0442\u0456\u0432\",\r\n        mustSelectOne: \"\u041c\u0430\u0454 \u0431\u0443\u0442\u0438 \u0432\u0438\u0431\u0440\u0430\u043d\u0438\u0439 \u0445\u043e\u0447\u0430 \u0431 \u043e\u0434\u0438\u043d \u0442\u0438\u043f \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432\",\r\n        weak: \"\u0421\u043b\u0430\u0431\u043a\u0438\u0439\",\r\n        medium: \"\u0421\u0435\u0440\u0435\u0434\u043d\u0456\u0439\",\r\n        good: \"\u0414\u043e\u0431\u0440\u0438\u0439\",\r\n        strong: \"\u041d\u0430\u0434\u0456\u0439\u043d\u0438\u0439\",\r\n        veryStrong: \"\u0414\u0443\u0436\u0435 \u043d\u0430\u0434\u0456\u0439\u043d\u0438\u0439\",\r\n        thankYou: \"\u0414\u044f\u043a\u0443\u0454\u043c\u043e, \u0432\u0430\u0448\u0443 \u043e\u0446\u0456\u043d\u043a\u0443 \u0432\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u043e.\",\r\n        schemaName: \"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430\u0434\u0456\u0439\u043d\u0438\u0445 \u043f\u0430\u0440\u043e\u043b\u0456\u0432\"\r\n      },\r\n      ru: {\r\n        universal: \"\u0423\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439\",\r\n        mail: \"\u0414\u043b\u044f \u043f\u043e\u0447\u0442\u044b\",\r\n        max: \"\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439\",\r\n        copy: \"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c\",\r\n        copied: \"\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043e\",\r\n        passwordCopied: \"\u041f\u0430\u0440\u043e\u043b\u044c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\",\r\n        copyFailed: \"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c\",\r\n        generate: \"\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c\",\r\n        showMore: \"\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0435\u0449\u0435 5 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432\",\r\n        mustSelectOne: \"\u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0442\u0438\u043f \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432\",\r\n        weak: \"\u0421\u043b\u0430\u0431\u044b\u0439\",\r\n        medium: \"\u0421\u0440\u0435\u0434\u043d\u0438\u0439\",\r\n        good: \"\u0425\u043e\u0440\u043e\u0448\u0438\u0439\",\r\n        strong: \"\u041d\u0430\u0434\u0435\u0436\u043d\u044b\u0439\",\r\n        veryStrong: \"\u041e\u0447\u0435\u043d\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439\",\r\n        thankYou: \"\u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0432\u0430\u0448\u0430 \u043e\u0446\u0435\u043d\u043a\u0430 \u0443\u0447\u0442\u0435\u043d\u0430.\",\r\n        schemaName: \"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0445 \u043f\u0430\u0440\u043e\u043b\u0435\u0439\"\r\n      },\r\n      en: {\r\n        universal: \"Universal\",\r\n        mail: \"For Email\",\r\n        max: \"Maximum\",\r\n        copy: \"Copy\",\r\n        copied: \"Copied\",\r\n        passwordCopied: \"Password copied\",\r\n        copyFailed: \"Could not copy\",\r\n        generate: \"Generate Password\",\r\n        showMore: \"Show 5 More Options\",\r\n        mustSelectOne: \"At least one character type must be selected\",\r\n        weak: \"Weak\",\r\n        medium: \"Medium\",\r\n        good: \"Good\",\r\n        strong: \"Strong\",\r\n        veryStrong: \"Very Strong\",\r\n        thankYou: \"Thank you, your rating has been counted.\",\r\n        schemaName: \"Secure Password Generator\"\r\n      }\r\n    };\r\n\r\n    var t = dict[lang] || dict.uk;\r\n\r\n    function text(el) {\r\n      return (el && el.textContent ? el.textContent : \"\").replace(\/\\s+\/g, \" \").trim();\r\n    }\r\n\r\n    function setButtonText(button, value) {\r\n      if (!button || !value) return;\r\n\r\n      var span = button.querySelector(\"span\");\r\n\r\n      if (span) {\r\n        span.textContent = value;\r\n      } else {\r\n        button.textContent = value;\r\n      }\r\n\r\n      button.setAttribute(\"aria-label\", value);\r\n      button.setAttribute(\"title\", value);\r\n    }\r\n\r\n    function setPlainText(el, value) {\r\n      if (!el || !value) return;\r\n      el.textContent = value;\r\n    }\r\n\r\n    function translatePresetButtons() {\r\n      setButtonText(root.querySelector('[data-hp-preset=\"wp\"]'), t.universal);\r\n      setButtonText(root.querySelector('[data-hp-preset=\"mail\"]'), t.mail);\r\n      setButtonText(root.querySelector('[data-hp-preset=\"max\"]'), t.max);\r\n    }\r\n\r\n    function translateMainButtons() {\r\n      setButtonText(document.getElementById(\"hpPgCopy\"), t.copy);\r\n      setButtonText(document.getElementById(\"hpPgGenerate\"), t.generate);\r\n      setButtonText(document.getElementById(\"hpPgGenerateList\"), t.showMore);\r\n    }\r\n\r\n    function translateStrength() {\r\n      var strength = document.getElementById(\"hpPgStrengthText\");\r\n      if (!strength) return;\r\n\r\n      var map = {\r\n        \"\u0421\u043b\u0430\u0431\u043a\u0438\u0439\": t.weak,\r\n        \"\u0421\u043b\u0430\u0431\u044b\u0439\": t.weak,\r\n        \"Weak\": t.weak,\r\n\r\n        \"\u0421\u0435\u0440\u0435\u0434\u043d\u0456\u0439\": t.medium,\r\n        \"\u0421\u0440\u0435\u0434\u043d\u0438\u0439\": t.medium,\r\n        \"Medium\": t.medium,\r\n\r\n        \"\u0414\u043e\u0431\u0440\u0438\u0439\": t.good,\r\n        \"\u0425\u043e\u0440\u043e\u0448\u0438\u0439\": t.good,\r\n        \"Good\": t.good,\r\n\r\n        \"\u041d\u0430\u0434\u0456\u0439\u043d\u0438\u0439\": t.strong,\r\n        \"\u041d\u0430\u0434\u0435\u0436\u043d\u044b\u0439\": t.strong,\r\n        \"Strong\": t.strong,\r\n\r\n        \"\u0414\u0443\u0436\u0435 \u043d\u0430\u0434\u0456\u0439\u043d\u0438\u0439\": t.veryStrong,\r\n        \"\u041e\u0447\u0435\u043d\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439\": t.veryStrong,\r\n        \"Very Strong\": t.veryStrong\r\n      };\r\n\r\n      var current = text(strength);\r\n      if (map[current]) {\r\n        strength.textContent = map[current];\r\n      }\r\n    }\r\n\r\n    function translateToast() {\r\n      var toast = document.getElementById(\"hpPgToast\");\r\n      if (!toast) return;\r\n\r\n      var map = {\r\n        \"\u041f\u0430\u0440\u043e\u043b\u044c \u0441\u043a\u043e\u043f\u0456\u0439\u043e\u0432\u0430\u043d\u043e\": t.passwordCopied,\r\n        \"\u041f\u0430\u0440\u043e\u043b\u044c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\": t.passwordCopied,\r\n        \"Password copied\": t.passwordCopied,\r\n\r\n        \"\u041d\u0435 \u0432\u0434\u0430\u043b\u043e\u0441\u044f \u0441\u043a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438\": t.copyFailed,\r\n        \"\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c\": t.copyFailed,\r\n        \"Could not copy\": t.copyFailed,\r\n\r\n        \"\u041c\u0430\u0454 \u0431\u0443\u0442\u0438 \u0432\u0438\u0431\u0440\u0430\u043d\u0438\u0439 \u0445\u043e\u0447\u0430 \u0431 \u043e\u0434\u0438\u043d \u0442\u0438\u043f \u0441\u0438\u043c\u0432\u043e\u043b\u0456\u0432\": t.mustSelectOne,\r\n        \"\u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u0438\u043d \u0442\u0438\u043f \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432\": t.mustSelectOne,\r\n        \"At least one character type must be selected\": t.mustSelectOne\r\n      };\r\n\r\n      var current = text(toast);\r\n      if (map[current]) {\r\n        toast.textContent = map[current];\r\n      }\r\n    }\r\n\r\n    function translateGeneratedCopyButtons() {\r\n      root.querySelectorAll(\"[data-hp-pg-copy-row='1']\").forEach(function (btn) {\r\n        var current = text(btn);\r\n\r\n        if (\r\n          current === \"\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438\" ||\r\n          current === \"\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c\" ||\r\n          current === \"Copy\"\r\n        ) {\r\n          btn.textContent = t.copy;\r\n        }\r\n\r\n        if (\r\n          current === \"\u0421\u043a\u043e\u043f\u0456\u0439\u043e\u0432\u0430\u043d\u043e\" ||\r\n          current === \"\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u043e\" ||\r\n          current === \"Copied\"\r\n        ) {\r\n          btn.textContent = t.copied;\r\n        }\r\n      });\r\n    }\r\n\r\n    function translateRating() {\r\n      var block = document.getElementById(\"hpPgRatingBlock\");\r\n      if (block) {\r\n        block.setAttribute(\"data-name\", t.schemaName);\r\n      }\r\n\r\n      var msg = document.getElementById(\"hpPgVoteMessage\");\r\n      if (msg) {\r\n        var current = text(msg);\r\n\r\n        if (\r\n          current === \"\u0414\u044f\u043a\u0443\u0454\u043c\u043e, \u0432\u0430\u0448\u0443 \u043e\u0446\u0456\u043d\u043a\u0443 \u0432\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u043e.\" ||\r\n          current === \"\u0421\u043f\u0430\u0441\u0438\u0431\u043e, \u0432\u0430\u0448\u0430 \u043e\u0446\u0435\u043d\u043a\u0430 \u0443\u0447\u0442\u0435\u043d\u0430.\" ||\r\n          current === \"Thank you, your rating has been counted.\"\r\n        ) {\r\n          msg.textContent = t.thankYou;\r\n        }\r\n      }\r\n\r\n      var schema = document.getElementById(\"hpPgAggregateRatingSchema\");\r\n      if (schema) {\r\n        try {\r\n          var data = JSON.parse(schema.textContent || \"{}\");\r\n          if (data && data[\"@type\"] === \"CreativeWorkSeries\") {\r\n            data.name = t.schemaName;\r\n            schema.textContent = JSON.stringify(data);\r\n          }\r\n        } catch (e) {}\r\n      }\r\n    }\r\n\r\n    function translateAll() {\r\n      translatePresetButtons();\r\n      translateMainButtons();\r\n      translateStrength();\r\n      translateToast();\r\n      translateGeneratedCopyButtons();\r\n      translateRating();\r\n    }\r\n\r\n    function scheduleTranslate() {\r\n      setTimeout(translateAll, 0);\r\n      setTimeout(translateAll, 80);\r\n      setTimeout(translateAll, 250);\r\n      setTimeout(translateAll, 800);\r\n      setTimeout(translateAll, 1600);\r\n    }\r\n\r\n    root.addEventListener(\"click\", function () {\r\n      scheduleTranslate();\r\n    });\r\n\r\n    root.addEventListener(\"input\", function () {\r\n      scheduleTranslate();\r\n    });\r\n\r\n    root.addEventListener(\"change\", function () {\r\n      scheduleTranslate();\r\n    });\r\n\r\n    root.addEventListener(\"keydown\", function () {\r\n      scheduleTranslate();\r\n    });\r\n\r\n    document.addEventListener(\"mouseup\", function () {\r\n      scheduleTranslate();\r\n    });\r\n\r\n    document.addEventListener(\"touchend\", function () {\r\n      scheduleTranslate();\r\n    });\r\n\r\n    window.addEventListener(\"load\", function () {\r\n      scheduleTranslate();\r\n    });\r\n\r\n    window.addEventListener(\"resize\", function () {\r\n      scheduleTranslate();\r\n    });\r\n\r\n    translateAll();\r\n    scheduleTranslate();\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", initHpPasswordGeneratorI18nPatchSafe);\r\n  } else {\r\n    initHpPasswordGeneratorI18nPatchSafe();\r\n  }\r\n})();\r\n(function () {\r\n  function fixHpPgRatingTextSpacing() {\r\n    var root = document.getElementById(\"hp-pg-light\");\r\n    var value = document.getElementById(\"hpPgRatingValueInline\");\r\n    var best = document.getElementById(\"hpPgRatingBest\");\r\n    var count = document.getElementById(\"hpPgRatingCount\");\r\n\r\n    if (!root || !value || !best || !count) return;\r\n\r\n    var lang =\r\n      root.getAttribute(\"data-lang\") ||\r\n      (window.location.pathname.indexOf(\"\/ru\/\") === 0\r\n        ? \"ru\"\r\n        : window.location.pathname.indexOf(\"\/en\/\") === 0\r\n        ? \"en\"\r\n        : \"uk\");\r\n\r\n    var line = value.closest(\"div\");\r\n    if (!line) return;\r\n\r\n    var ratingValue = value.textContent || \"4.8\";\r\n    var bestValue = best.textContent || \"5\";\r\n    var countValue = count.textContent || \"1243\";\r\n\r\n    var html = \"\";\r\n\r\n    if (lang === \"ru\") {\r\n      html =\r\n        '\u0420\u0435\u0439\u0442\u0438\u043d\u0433 <strong style=\"color:#031b4e; font-weight:500;\">' +\r\n        '<span id=\"hpPgRatingValueInline\">' + ratingValue + '<\/span> \u0438\u0437 <span id=\"hpPgRatingBest\">' + bestValue + '<\/span>' +\r\n        '<\/strong> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 <strong style=\"color:#031b4e; font-weight:500;\">' +\r\n        '<span id=\"hpPgRatingCount\">' + countValue + '<\/span> \u043e\u0446\u0435\u043d\u043e\u043a' +\r\n        '<\/strong>';\r\n    } else if (lang === \"en\") {\r\n      html =\r\n        'Rating <strong style=\"color:#031b4e; font-weight:500;\">' +\r\n        '<span id=\"hpPgRatingValueInline\">' + ratingValue + '<\/span> out of <span id=\"hpPgRatingBest\">' + bestValue + '<\/span>' +\r\n        '<\/strong> based on <strong style=\"color:#031b4e; font-weight:500;\">' +\r\n        '<span id=\"hpPgRatingCount\">' + countValue + '<\/span> ratings' +\r\n        '<\/strong>';\r\n    } else {\r\n      html =\r\n        '\u0420\u0435\u0439\u0442\u0438\u043d\u0433 <strong style=\"color:#031b4e; font-weight:500;\">' +\r\n        '<span id=\"hpPgRatingValueInline\">' + ratingValue + '<\/span> \u0456\u0437 <span id=\"hpPgRatingBest\">' + bestValue + '<\/span>' +\r\n        '<\/strong> \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0456 <strong style=\"color:#031b4e; font-weight:500;\">' +\r\n        '<span id=\"hpPgRatingCount\">' + countValue + '<\/span> \u043e\u0446\u0456\u043d\u043e\u043a' +\r\n        '<\/strong>';\r\n    }\r\n\r\n    line.innerHTML = html;\r\n  }\r\n\r\n  function scheduleFix() {\r\n    setTimeout(fixHpPgRatingTextSpacing, 0);\r\n    setTimeout(fixHpPgRatingTextSpacing, 100);\r\n    setTimeout(fixHpPgRatingTextSpacing, 400);\r\n  }\r\n\r\n  if (document.readyState === \"loading\") {\r\n    document.addEventListener(\"DOMContentLoaded\", scheduleFix);\r\n  } else {\r\n    scheduleFix();\r\n  }\r\n\r\n  window.addEventListener(\"load\", scheduleFix);\r\n\r\n  document.addEventListener(\"click\", function (e) {\r\n    if (e.target && e.target.closest && e.target.closest(\"#hpPgRatingBlock\")) {\r\n      scheduleFix();\r\n    }\r\n  });\r\n})();<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Hostpark Tools Secure Password Generator Create strong passwords for WordPress, email, FTP, servers, hosting control panels and other services. The password is generated in your browser and is ready to copy right away. Your password Copy Strength\u2014 For WordPress For email Maximum Generate password Show 5 more options Password length 16 Uppercase letters (A-Z) Lowercase [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"class_list":["post-12193","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v25.7.1 (Yoast SEO v25.7) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Password Generator Online | HostPark<\/title>\n<meta name=\"description\" content=\"Generate secure passwords online for WordPress, email, FTP, servers and hosting panels. Choose length, symbols and copy a strong password in one click.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0430\u0440\u043e\u043b\u0435\u0439\" \/>\n<meta property=\"og:description\" content=\"Generate secure passwords online for WordPress, email, FTP, servers and hosting panels. Choose length, symbols and copy a strong password in one click.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/hostpark.ua\/en\/password-generator\/\" \/>\n<meta property=\"og:site_name\" content=\"HostPark\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/hostpark.ua\/\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-22T09:54:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/hostpark.ua\/wp-content\/uploads\/2025\/06\/opengraph-snippet-100.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1201\" \/>\n\t<meta property=\"og:image:height\" content=\"631\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/hostpark.ua\/en\/password-generator\/\",\"url\":\"https:\/\/hostpark.ua\/en\/password-generator\/\",\"name\":\"Password Generator Online | HostPark\",\"isPartOf\":{\"@id\":\"https:\/\/hostpark.ua\/#website\"},\"datePublished\":\"2026-04-22T09:35:44+00:00\",\"dateModified\":\"2026-04-22T09:54:09+00:00\",\"description\":\"Generate secure passwords online for WordPress, email, FTP, servers and hosting panels. Choose length, symbols and copy a strong password in one click.\",\"breadcrumb\":{\"@id\":\"https:\/\/hostpark.ua\/en\/password-generator\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/hostpark.ua\/en\/password-generator\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/hostpark.ua\/en\/password-generator\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Hostpark\",\"item\":\"https:\/\/hostpark.ua\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0430\u0440\u043e\u043b\u0435\u0439\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/hostpark.ua\/#website\",\"url\":\"https:\/\/hostpark.ua\/\",\"name\":\"HostPark\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/hostpark.ua\/#organization\"},\"alternateName\":\"HostPark\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/hostpark.ua\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/hostpark.ua\/#organization\",\"name\":\"HostPark\",\"alternateName\":\"HostPark\",\"url\":\"https:\/\/hostpark.ua\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/hostpark.ua\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/hostpark.ua\/wp-content\/uploads\/2024\/02\/favicon-1.png\",\"contentUrl\":\"https:\/\/hostpark.ua\/wp-content\/uploads\/2024\/02\/favicon-1.png\",\"width\":513,\"height\":513,\"caption\":\"HostPark\"},\"image\":{\"@id\":\"https:\/\/hostpark.ua\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/hostpark.ua\/\",\"https:\/\/www.linkedin.com\/company\/hostpark\/\",\"https:\/\/www.youtube.com\/@hostparkUA\",\"https:\/\/www.instagram.com\/hostpark.ua\"],\"description\":\"Hostpark \u2013 \u0446\u0435 \u0431\u0456\u043b\u044c\u0448\u0435, \u043d\u0456\u0436 \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0441\u0435\u0440\u0432\u0435\u0440\u0456\u0432. \u041c\u0438 \u043d\u0430\u0434\u0456\u0439\u043d\u0438\u0439 \u0456\u0442 \u0456\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440 \u0442\u0430 \u0445\u043c\u0430\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440. \u041c\u0438 \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454\u043c\u043e \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0435 \u0440\u0456\u0448\u0435\u043d\u043d\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u0406\u0422-\u043f\u043e\u0442\u0440\u0435\u0431, \u043f\u043e\u0454\u0434\u043d\u0443\u044e\u0447\u0438 \u043f\u0435\u0440\u0435\u0432\u0430\u0433\u0438 \u0432\u043b\u0430\u0441\u043d\u0438\u0445 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0456\u0432 \u0443 \u041f\u043e\u043b\u044c\u0449\u0456 \u0442\u0430 \u0423\u043a\u0440\u0430\u0457\u043d\u0456 \u0437 \u0433\u043d\u0443\u0447\u043a\u0438\u043c\u0438 \u0445\u043c\u0430\u0440\u043d\u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0456\u0441\u0430\u043c\u0438.\",\"email\":\"info@hostpark.ua\",\"telephone\":\"+380445201111\",\"foundingDate\":\"2009-01-01\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Password Generator Online | HostPark","description":"Generate secure passwords online for WordPress, email, FTP, servers and hosting panels. Choose length, symbols and copy a strong password in one click.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"og_locale":"en_US","og_type":"article","og_title":"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0430\u0440\u043e\u043b\u0435\u0439","og_description":"Generate secure passwords online for WordPress, email, FTP, servers and hosting panels. Choose length, symbols and copy a strong password in one click.","og_url":"https:\/\/hostpark.ua\/en\/password-generator\/","og_site_name":"HostPark","article_publisher":"https:\/\/www.facebook.com\/hostpark.ua\/","article_modified_time":"2026-04-22T09:54:09+00:00","og_image":[{"width":1201,"height":631,"url":"https:\/\/hostpark.ua\/wp-content\/uploads\/2025\/06\/opengraph-snippet-100.webp","type":"image\/webp"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/hostpark.ua\/en\/password-generator\/","url":"https:\/\/hostpark.ua\/en\/password-generator\/","name":"Password Generator Online | HostPark","isPartOf":{"@id":"https:\/\/hostpark.ua\/#website"},"datePublished":"2026-04-22T09:35:44+00:00","dateModified":"2026-04-22T09:54:09+00:00","description":"Generate secure passwords online for WordPress, email, FTP, servers and hosting panels. Choose length, symbols and copy a strong password in one click.","breadcrumb":{"@id":"https:\/\/hostpark.ua\/en\/password-generator\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/hostpark.ua\/en\/password-generator\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/hostpark.ua\/en\/password-generator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Hostpark","item":"https:\/\/hostpark.ua\/en\/"},{"@type":"ListItem","position":2,"name":"\u0413\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 \u043f\u0430\u0440\u043e\u043b\u0435\u0439"}]},{"@type":"WebSite","@id":"https:\/\/hostpark.ua\/#website","url":"https:\/\/hostpark.ua\/","name":"HostPark","description":"","publisher":{"@id":"https:\/\/hostpark.ua\/#organization"},"alternateName":"HostPark","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/hostpark.ua\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/hostpark.ua\/#organization","name":"HostPark","alternateName":"HostPark","url":"https:\/\/hostpark.ua\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/hostpark.ua\/#\/schema\/logo\/image\/","url":"https:\/\/hostpark.ua\/wp-content\/uploads\/2024\/02\/favicon-1.png","contentUrl":"https:\/\/hostpark.ua\/wp-content\/uploads\/2024\/02\/favicon-1.png","width":513,"height":513,"caption":"HostPark"},"image":{"@id":"https:\/\/hostpark.ua\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/hostpark.ua\/","https:\/\/www.linkedin.com\/company\/hostpark\/","https:\/\/www.youtube.com\/@hostparkUA","https:\/\/www.instagram.com\/hostpark.ua"],"description":"Hostpark \u2013 \u0446\u0435 \u0431\u0456\u043b\u044c\u0448\u0435, \u043d\u0456\u0436 \u043f\u0440\u043e\u0441\u0442\u043e \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0441\u0435\u0440\u0432\u0435\u0440\u0456\u0432. \u041c\u0438 \u043d\u0430\u0434\u0456\u0439\u043d\u0438\u0439 \u0456\u0442 \u0456\u043d\u0442\u0435\u0433\u0440\u0430\u0442\u043e\u0440 \u0442\u0430 \u0445\u043c\u0430\u0440\u043d\u0438\u0439 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440. \u041c\u0438 \u043f\u0440\u043e\u043f\u043e\u043d\u0443\u0454\u043c\u043e \u043a\u043e\u043c\u043f\u043b\u0435\u043a\u0441\u043d\u0435 \u0440\u0456\u0448\u0435\u043d\u043d\u044f \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u0406\u0422-\u043f\u043e\u0442\u0440\u0435\u0431, \u043f\u043e\u0454\u0434\u043d\u0443\u044e\u0447\u0438 \u043f\u0435\u0440\u0435\u0432\u0430\u0433\u0438 \u0432\u043b\u0430\u0441\u043d\u0438\u0445 \u0434\u0430\u0442\u0430-\u0446\u0435\u043d\u0442\u0440\u0456\u0432 \u0443 \u041f\u043e\u043b\u044c\u0449\u0456 \u0442\u0430 \u0423\u043a\u0440\u0430\u0457\u043d\u0456 \u0437 \u0433\u043d\u0443\u0447\u043a\u0438\u043c\u0438 \u0445\u043c\u0430\u0440\u043d\u0438\u043c\u0438 \u0441\u0435\u0440\u0432\u0456\u0441\u0430\u043c\u0438.","email":"info@hostpark.ua","telephone":"+380445201111","foundingDate":"2009-01-01"}]}},"_links":{"self":[{"href":"https:\/\/hostpark.ua\/en\/wp-json\/wp\/v2\/pages\/12193","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hostpark.ua\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/hostpark.ua\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/hostpark.ua\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/hostpark.ua\/en\/wp-json\/wp\/v2\/comments?post=12193"}],"version-history":[{"count":3,"href":"https:\/\/hostpark.ua\/en\/wp-json\/wp\/v2\/pages\/12193\/revisions"}],"predecessor-version":[{"id":12209,"href":"https:\/\/hostpark.ua\/en\/wp-json\/wp\/v2\/pages\/12193\/revisions\/12209"}],"wp:attachment":[{"href":"https:\/\/hostpark.ua\/en\/wp-json\/wp\/v2\/media?parent=12193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}