{"id":823,"date":"2026-07-21T08:06:23","date_gmt":"2026-07-21T08:06:23","guid":{"rendered":"https:\/\/aizonic.site\/?page_id=823"},"modified":"2026-07-21T08:14:31","modified_gmt":"2026-07-21T08:14:31","slug":"password-generator","status":"publish","type":"page","link":"https:\/\/aizonic.site\/password-generator\/","title":{"rendered":"Password Generator"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"823\" class=\"elementor elementor-823\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0cc7c34 e-flex e-con-boxed e-con e-parent\" data-id=\"0cc7c34\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-1f71a57 e-con-full e-flex e-con e-child\" data-id=\"1f71a57\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-2fd3e7b e-con-full e-flex e-con e-child\" data-id=\"2fd3e7b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d91c31a elementor-widget__width-initial elementor-widget elementor-widget-image\" data-id=\"d91c31a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/aizonic.site\/wp-content\/uploads\/2026\/07\/icon-password-generator.png\" title=\"icon-password-generator\" alt=\"icon-password-generator\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-0c27723 e-con-full e-flex e-con e-child\" data-id=\"0c27723\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-6cf1739 e-con-full e-flex e-con e-child\" data-id=\"6cf1739\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5c78a9f elementor-widget elementor-widget-heading\" data-id=\"5c78a9f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Password Generator<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bbbabcd elementor-widget elementor-widget-heading\" data-id=\"bbbabcd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">Generate a strong and random password.<\/h6>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7118e44 e-flex e-con-boxed e-con e-parent\" data-id=\"7118e44\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5d350ec elementor-widget elementor-widget-html\" data-id=\"5d350ec\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"pw-password-generator\" class=\"pw-wrap\">\n  <style>\n    #pw-password-generator {\n      --pw-bg: #14161a; --pw-panel: #1c1f25; --pw-border: #2c303a;\n      --pw-text: #e9ebf0; --pw-muted: #9aa0ac; --pw-accent: #5eead4; --pw-accent-dim: #1f4b45;\n      --pw-danger: #f97066; --pw-warn: #f5b942; --pw-good: #5eead4;\n      font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n      color: var(--pw-text); max-width: 720px; margin: 0 auto; box-sizing: border-box;\n    }\n    #pw-password-generator *, #pw-password-generator *::before, #pw-password-generator *::after { box-sizing: border-box; }\n    .pw-card { background: var(--pw-panel); border: 1px solid var(--pw-border); border-radius: 16px; padding: 28px; }\n    .pw-title { font-size: 20px; font-weight: 700; margin: 0 0 4px; letter-spacing: -0.01em; }\n    .pw-subtitle { font-size: 14px; color: var(--pw-muted); margin: 0 0 20px; }\n\n    .pw-output-row { display: flex; gap: 10px; align-items: center; }\n    .pw-output {\n      flex: 1; background: var(--pw-bg); border: 1px solid var(--pw-border); color: var(--pw-text);\n      border-radius: 10px; padding: 14px; font-size: 17px; font-family: \"SF Mono\", Consolas, Menlo, monospace;\n      letter-spacing: 0.02em; overflow-x: auto; white-space: nowrap;\n    }\n    .pw-icon-btn {\n      background: var(--pw-bg); border: 1px solid var(--pw-border); color: var(--pw-text);\n      border-radius: 10px; width: 44px; height: 44px; font-size: 16px; cursor: pointer; flex-shrink: 0;\n    }\n    .pw-icon-btn:hover { border-color: var(--pw-accent); color: var(--pw-accent); }\n\n    .pw-strength { margin-top: 10px; display: flex; align-items: center; gap: 8px; }\n    .pw-strength-bar { flex: 1; height: 6px; border-radius: 999px; background: var(--pw-border); overflow: hidden; }\n    .pw-strength-fill { height: 100%; width: 0%; background: var(--pw-danger); transition: width .2s ease, background .2s ease; }\n    .pw-strength-label { font-size: 12px; color: var(--pw-muted); min-width: 70px; text-align: right; }\n\n    .pw-controls { margin-top: 22px; display: flex; flex-direction: column; gap: 14px; }\n    .pw-length-row { display: flex; align-items: center; gap: 12px; }\n    .pw-length-row .pw-label { flex-shrink: 0; }\n    .pw-range { flex: 1; accent-color: var(--pw-accent); }\n    .pw-length-val { font-size: 14px; font-weight: 600; color: var(--pw-accent); min-width: 28px; text-align: right; }\n\n    .pw-label { font-size: 12px; color: var(--pw-muted); text-transform: uppercase; letter-spacing: 0.04em; }\n\n    .pw-options { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 10px; }\n    .pw-check { display: flex; align-items: center; gap: 8px; font-size: 14px; background: var(--pw-bg); border: 1px solid var(--pw-border); border-radius: 8px; padding: 10px 12px; cursor: pointer; }\n    .pw-check input { accent-color: var(--pw-accent); width: 16px; height: 16px; }\n\n    .pw-footer { margin-top: 20px; display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }\n    .pw-btn { background: var(--pw-accent); color: #05201c; border: none; border-radius: 8px; padding: 10px 18px; font-size: 14px; font-weight: 600; cursor: pointer; }\n    .pw-btn:hover { opacity: 0.9; }\n    .pw-copied { font-size: 12px; color: var(--pw-accent); opacity: 0; transition: opacity .2s ease; }\n    .pw-copied.pw-show { opacity: 1; }\n  <\/style>\n\n  <div class=\"pw-card\">\n    <p class=\"pw-title\">Password Generator<\/p>\n    <p class=\"pw-subtitle\">Create a strong, random password \u2014 generated locally in your browser, never sent anywhere.<\/p>\n\n    <div class=\"pw-output-row\">\n      <div class=\"pw-output\" id=\"pwOutput\">Click generate \u2192<\/div>\n      <button class=\"pw-icon-btn\" id=\"pwCopyBtn\" title=\"Copy\">\u29c9<\/button>\n      <button class=\"pw-icon-btn\" id=\"pwRefreshBtn\" title=\"Regenerate\">\u21bb<\/button>\n    <\/div>\n    <div class=\"pw-strength\">\n      <div class=\"pw-strength-bar\"><div class=\"pw-strength-fill\" id=\"pwStrengthFill\"><\/div><\/div>\n      <div class=\"pw-strength-label\" id=\"pwStrengthLabel\">\u2014<\/div>\n    <\/div>\n\n    <div class=\"pw-controls\">\n      <div class=\"pw-length-row\">\n        <span class=\"pw-label\">Length<\/span>\n        <input class=\"pw-range\" type=\"range\" id=\"pwLength\" min=\"6\" max=\"32\" value=\"16\">\n        <span class=\"pw-length-val\" id=\"pwLengthVal\">16<\/span>\n      <\/div>\n      <div class=\"pw-options\">\n        <label class=\"pw-check\"><input type=\"checkbox\" id=\"pwUpper\" checked> Uppercase (A-Z)<\/label>\n        <label class=\"pw-check\"><input type=\"checkbox\" id=\"pwLower\" checked> Lowercase (a-z)<\/label>\n        <label class=\"pw-check\"><input type=\"checkbox\" id=\"pwNumbers\" checked> Numbers (0-9)<\/label>\n        <label class=\"pw-check\"><input type=\"checkbox\" id=\"pwSymbols\" checked> Symbols (!@#$\u2026)<\/label>\n        <label class=\"pw-check\"><input type=\"checkbox\" id=\"pwExclude\"> Exclude look-alikes (l,1,O,0)<\/label>\n      <\/div>\n    <\/div>\n\n    <div class=\"pw-footer\">\n      <button class=\"pw-btn\" id=\"pwGenBtn\">Generate password<\/button>\n      <span class=\"pw-copied\" id=\"pwCopied\">Copied!<\/span>\n    <\/div>\n  <\/div>\n<\/div>\n\n<script>\n(function () {\n  const wrap = document.getElementById('pw-password-generator');\n  const output = wrap.querySelector('#pwOutput');\n  const copyBtn = wrap.querySelector('#pwCopyBtn');\n  const refreshBtn = wrap.querySelector('#pwRefreshBtn');\n  const genBtn = wrap.querySelector('#pwGenBtn');\n  const lengthRange = wrap.querySelector('#pwLength');\n  const lengthVal = wrap.querySelector('#pwLengthVal');\n  const upperCb = wrap.querySelector('#pwUpper');\n  const lowerCb = wrap.querySelector('#pwLower');\n  const numbersCb = wrap.querySelector('#pwNumbers');\n  const symbolsCb = wrap.querySelector('#pwSymbols');\n  const excludeCb = wrap.querySelector('#pwExclude');\n  const strengthFill = wrap.querySelector('#pwStrengthFill');\n  const strengthLabel = wrap.querySelector('#pwStrengthLabel');\n  const copiedEl = wrap.querySelector('#pwCopied');\n\n  const SETS = {\n    upper: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ',\n    lower: 'abcdefghijklmnopqrstuvwxyz',\n    numbers: '0123456789',\n    symbols: '!@#$%^&*()_+-=[]{}|;:,.<>?'\n  };\n  const LOOKALIKES = \/[l1IO0oB8S5Z2]\/g;\n\n  lengthRange.addEventListener('input', () => { lengthVal.textContent = lengthRange.value; });\n\n  function randomInt(max) {\n    const arr = new Uint32Array(1);\n    crypto.getRandomValues(arr);\n    return arr[0] % max;\n  }\n\n  function generate() {\n    let pool = '';\n    if (upperCb.checked) pool += SETS.upper;\n    if (lowerCb.checked) pool += SETS.lower;\n    if (numbersCb.checked) pool += SETS.numbers;\n    if (symbolsCb.checked) pool += SETS.symbols;\n\n    if (excludeCb.checked) pool = pool.replace(LOOKALIKES, '');\n\n    if (!pool) {\n      output.textContent = 'Select at least one character type';\n      strengthFill.style.width = '0%';\n      strengthLabel.textContent = '\u2014';\n      return;\n    }\n\n    const length = Number(lengthRange.value);\n    let result = '';\n    for (let i = 0; i < length; i++) {\n      result += pool[randomInt(pool.length)];\n    }\n    output.textContent = result;\n    updateStrength(result, pool.length);\n  }\n\n  function updateStrength(password, poolSize) {\n    const entropy = password.length * Math.log2(Math.max(poolSize, 2));\n    let pct, color, label;\n    if (entropy < 40) { pct = 25; color = 'var(--pw-danger)'; label = 'Weak'; }\n    else if (entropy < 60) { pct = 50; color = 'var(--pw-warn)'; label = 'Fair'; }\n    else if (entropy < 80) { pct = 75; color = 'var(--pw-good)'; label = 'Strong'; }\n    else { pct = 100; color = 'var(--pw-good)'; label = 'Very strong'; }\n    strengthFill.style.width = pct + '%';\n    strengthFill.style.background = color;\n    strengthLabel.textContent = label;\n  }\n\n  genBtn.addEventListener('click', generate);\n  refreshBtn.addEventListener('click', generate);\n\n  copyBtn.addEventListener('click', () => {\n    if (!output.textContent || output.textContent.includes('Click generate') || output.textContent.includes('Select at least')) return;\n    navigator.clipboard.writeText(output.textContent).then(() => {\n      copiedEl.classList.add('pw-show');\n      setTimeout(() => copiedEl.classList.remove('pw-show'), 1500);\n    });\n  });\n\n  generate();\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Password Generator Generate a strong and random password. Password Generator Create a strong, random password \u2014 generated locally in your [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"disabled","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-823","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/aizonic.site\/wp-json\/wp\/v2\/pages\/823","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aizonic.site\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aizonic.site\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aizonic.site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aizonic.site\/wp-json\/wp\/v2\/comments?post=823"}],"version-history":[{"count":4,"href":"https:\/\/aizonic.site\/wp-json\/wp\/v2\/pages\/823\/revisions"}],"predecessor-version":[{"id":829,"href":"https:\/\/aizonic.site\/wp-json\/wp\/v2\/pages\/823\/revisions\/829"}],"wp:attachment":[{"href":"https:\/\/aizonic.site\/wp-json\/wp\/v2\/media?parent=823"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}