{"id":1343,"date":"2025-08-10T07:51:31","date_gmt":"2025-08-10T07:51:31","guid":{"rendered":"https:\/\/safebrowsing.cmc.iq\/?page_id=1343"},"modified":"2025-08-25T08:06:54","modified_gmt":"2025-08-25T08:06:54","slug":"cyber-security-map-quest","status":"publish","type":"page","link":"https:\/\/safebrowsing.cmc.iq\/index.php\/cyber-security-map-quest\/","title":{"rendered":"Password Strength Lab"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1343\" class=\"elementor elementor-1343\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-63adb2e ekit-sticky--top e-flex e-con-boxed e-con e-child\" data-id=\"63adb2e\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;ekit_sticky&quot;:&quot;top&quot;,&quot;ekit_sticky_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;ekit_sticky_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;ekit_sticky_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;ekit_sticky_on_desktop&quot;:&quot;desktop&quot;,&quot;ekit_sticky_on_tablet&quot;:&quot;tablet&quot;,&quot;ekit_sticky_on_mobile&quot;:&quot;mobile&quot;,&quot;ekit_sticky_effect_offset&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;ekit_sticky_effect_offset_tablet&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;ekit_sticky_effect_offset_mobile&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]}}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-74d48f7 elementor-widget__width-initial elementor-widget elementor-widget-image\" data-id=\"74d48f7\" data-element_type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/safebrowsing.cmc.iq\/\">\n\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/safebrowsing.cmc.iq\/wp-content\/uploads\/2025\/04\/logo-aman0net.png\" title=\"\" alt=\"\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9527e90 elementor-widget elementor-widget-ekit-nav-menu\" data-id=\"9527e90\" data-element_type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"ekit-nav-menu.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<nav class=\"ekit-wid-con ekit_menu_responsive_tablet\" \n\t\t\tdata-hamburger-icon=\"\" \n\t\t\tdata-hamburger-icon-type=\"icon\" \n\t\t\tdata-responsive-breakpoint=\"1024\">\n\t\t\t            <button class=\"elementskit-menu-hamburger elementskit-menu-toggler\"  type=\"button\" aria-label=\"hamburger-icon\">\n                                    <span class=\"elementskit-menu-hamburger-icon\"><\/span><span class=\"elementskit-menu-hamburger-icon\"><\/span><span class=\"elementskit-menu-hamburger-icon\"><\/span>\n                            <\/button>\n            <div id=\"ekit-megamenu-%d8%a7%d9%84%d9%82%d8%a7%d8%a6%d9%85%d8%a9-%d8%a7%d9%84%d8%b1%d8%a6%d9%8a%d8%b3%d9%8a%d8%a9\" class=\"elementskit-menu-container elementskit-menu-offcanvas-elements elementskit-navbar-nav-default ekit-nav-menu-one-page-yes ekit-nav-dropdown-hover\"><ul id=\"menu-%d8%a7%d9%84%d9%82%d8%a7%d8%a6%d9%85%d8%a9-%d8%a7%d9%84%d8%b1%d8%a6%d9%8a%d8%b3%d9%8a%d8%a9\" class=\"elementskit-navbar-nav elementskit-menu-po-right submenu-click-on-icon\"><li id=\"menu-item-665\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-home menu-item-665 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/safebrowsing.cmc.iq\/\" class=\"ekit-menu-nav-link\">\u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629<\/a><\/li>\n<li id=\"menu-item-1252\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1252 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/safebrowsing.cmc.iq\/index.php\/games\/\" class=\"ekit-menu-nav-link\">\u0623\u0644\u0639\u0627\u0628 \u062a\u0639\u0644\u064a\u0645\u064a\u0629<\/a><\/li>\n<li id=\"menu-item-1615\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1615 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/safebrowsing.cmc.iq\/index.php\/faq\/\" class=\"ekit-menu-nav-link\">\u0627\u0633\u0626\u0644\u0629 \u0634\u0627\u0626\u0639\u0629<\/a><\/li>\n<li id=\"menu-item-1595\" class=\"menu-item menu-item-type-post_type menu-item-object-page menu-item-1595 nav-item elementskit-mobile-builder-content\" data-vertical-menu=750px><a href=\"https:\/\/safebrowsing.cmc.iq\/index.php\/story\/\" class=\"ekit-menu-nav-link\">\u0627\u0644\u0642\u0635\u0635 \u0627\u0644\u062a\u0648\u0639\u0648\u064a\u0629<\/a><\/li>\n<\/ul><div class=\"elementskit-nav-identity-panel\"><button class=\"elementskit-menu-close elementskit-menu-toggler\" type=\"button\">X<\/button><\/div><\/div>\t\t\t\n\t\t\t<div class=\"elementskit-menu-overlay elementskit-menu-offcanvas-elements elementskit-menu-toggler ekit-nav-menu--overlay\"><\/div>        <\/nav>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2973c99 e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child\" data-id=\"2973c99\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c5852af elementor-widget__width-auto elementor-hidden-tablet elementor-hidden-mobile elementor-align-center elementor-widget elementor-widget-elementskit-button\" data-id=\"c5852af\" data-element_type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"elementskit-button.default\">\n\t\t\t\t\t<div class=\"ekit-wid-con\" >\t\t<div class=\"ekit-btn-wraper\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/safebrowsing.cmc.iq\/wp-admin\/post.php?post=1567&#038;action=elementor\" class=\"elementskit-btn  whitespace--normal\" id=\"\">\n\t\t\t\t\t\u0634\u0627\u0647\u062f \u0627\u0644\u0642\u0635\u0635 \t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n        <\/div>\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-6447f44 e-flex e-con-boxed e-con e-parent\" data-id=\"6447f44\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-42680d1 elementor-widget elementor-widget-html\" data-id=\"42680d1\" data-element_type=\"widget\" data-settings=\"{&quot;ekit_we_effect_on&quot;:&quot;none&quot;}\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"ar\" dir=\"rtl\">\r\n<head>\r\n<meta charset=\"utf-8\">\r\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\r\n<title>\ud83d\udd10 Password Strength Lab \u2013 \u0627\u062e\u062a\u0628\u0627\u0631 + \u0625\u0646\u0634\u0627\u0621<\/title>\r\n<style>\r\n:root{\r\n  --bg:#0a1428; --bg2:#0c1a36; --panel:#0f1f43; --card:#0f1e3f;\r\n  --text:#eaf4ff; --muted:#b7cdfa; --ok:#10b981; --warn:#f59e0b; --danger:#ef4444;\r\n  --acc:#22c55e; --acc2:#10b981; --stroke:#1a3572; --chip:#0b1c3e\r\n}\r\n*{box-sizing:border-box}\r\nhtml,body{height:100%;margin:0;background:linear-gradient(180deg,var(--bg),var(--bg2));color:var(--text);font-family:system-ui,-apple-system,\"Segoe UI\",Roboto,Arial}\r\n.wrap{min-height:100%;display:grid;grid-template-rows:auto 1fr auto}\r\nheader{position:sticky;top:0;z-index:5;background:rgba(10,24,56,.75);backdrop-filter:blur(8px);border-bottom:1px solid var(--stroke)}\r\n.bar{max-width:1200px;margin:auto;display:flex;gap:10px;align-items:center;justify-content:space-between;padding:10px 14px;flex-wrap:wrap}\r\n.title{display:flex;gap:10px;align-items:center;font-weight:800}\r\n.chip{font-size:12px;border:1px solid var(--stroke);background:rgba(2,6,23,.55);padding:4px 10px;border-radius:999px}\r\n.input, select{padding:10px 12px;border-radius:12px;border:1px solid var(--stroke);background:#0f1e47;color:var(--text)}\r\n.btn{border:0;border-radius:12px;padding:10px 14px;background:#16306d;color:var(--text);cursor:pointer;transition:transform .12s ease,filter .2s}\r\n.btn:hover{filter:brightness(1.08)}\r\n.btn:active{transform:scale(.98)}\r\n.btn.primary{background:linear-gradient(90deg,var(--acc),var(--acc2))}\r\nmain{max-width:1200px;margin:18px auto;padding:10px}\r\n.card{background:linear-gradient(180deg,rgba(31,41,55,.28),rgba(17,24,39,.28));border:1px solid var(--stroke);border-radius:18px;box-shadow:0 10px 30px rgba(0,0,0,.25);overflow:hidden}\r\n.head{display:flex;gap:12px;align-items:center;justify-content:space-between;padding:14px 16px;border-bottom:1px solid var(--stroke)}\r\n.stats{display:flex;gap:10px;flex-wrap:wrap}\r\n.stat{display:flex;gap:6px;align-items:center;font-size:13px;background:#0d1a3a;border:1px solid var(--stroke);padding:6px 10px;border-radius:10px}\r\n.body{padding:18px}\r\n.meta{font-size:13px;color:var(--muted);margin-bottom:10px}\r\n.hidden{display:none}\r\n.footer{opacity:.8;text-align:center;padding:10px;border-top:1px solid var(--stroke)}\r\n\r\n\/* Tabs *\/\r\n.tabs{display:flex;gap:6px;margin-bottom:12px}\r\n.tab{padding:8px 12px;border-radius:10px;border:1px solid var(--stroke);background:#0e1f45;cursor:pointer}\r\n.tab.active{background:linear-gradient(90deg,var(--acc),var(--acc2));color:#04121f}\r\n\r\n\/* Quiz UI *\/\r\n.qarea{display:grid;gap:12px}\r\n.view{padding:14px;border-radius:14px;border:1px solid var(--stroke);background:#0f1e47}\r\n.pw{font-family:ui-monospace,Menlo,Monaco,\"Courier New\",monospace;word-break:break-all}\r\n.bad{color:#ffb4b4}\r\n.good{color:#c7ffdd}\r\n.actions{display:flex;gap:10px;flex-wrap:wrap}\r\n.choice{padding:10px 12px;border-radius:10px;background:#0d1a3a;border:1px solid var(--stroke);cursor:pointer}\r\n.choice.correct{border-color:var(--ok);background:rgba(16,185,129,.1)}\r\n.choice.wrong{border-color:var(--danger);background:rgba(239,68,68,.1)}\r\n.explain{border-right:4px solid var(--acc);padding:10px;border-radius:10px;background:rgba(2,6,23,.5)}\r\n\r\n\/* Create UI *\/\r\n.grid2{display:grid;grid-template-columns:1fr;gap:12px}\r\n@media(min-width:900px){ .grid2{grid-template-columns:2fr 1fr} }\r\n.box{padding:14px;border-radius:14px;border:1px solid var(--stroke);background:#0f1e47}\r\n.row{display:flex;gap:8px;flex-wrap:wrap;align-items:center}\r\n.input.pwfield{width:100%}\r\n.meter{height:12px;border-radius:999px;background:#0c1a36;border:1px solid var(--stroke);overflow:hidden}\r\n.meter>div{height:100%;width:0%;background:linear-gradient(90deg,#ef4444,#f59e0b,#22c55e);transition:width .3s ease}\r\n.checks{display:grid;gap:8px}\r\n.check{display:flex;gap:8px;align-items:flex-start;font-size:14px;background:#0b1c3e;border:1px solid var(--stroke);padding:8px;border-radius:10px}\r\n.check.ok{border-color:#0f5132;background:rgba(16,185,129,.1)}\r\n.small{font-size:12px;color:#cfe0ff}\r\n.kbd{font-family:ui-monospace,monospace;background:#0b2037;border:1px solid var(--stroke);padding:2px 6px;border-radius:6px}\r\n\r\n\/* End screen *\/\r\n.end{padding:22px;text-align:center}\r\n.big{font-size:22px;font-weight:800;margin-bottom:8px}\r\n.score{font-size:18px;margin:6px 0}\r\ncanvas{max-width:100%;border:1px solid var(--stroke);border-radius:12px;margin-top:12px}\r\n<\/style>\r\n<\/head>\r\n<body>\r\n<div class=\"wrap\">\r\n<header>\r\n  <div class=\"bar\">\r\n    <div class=\"title\">\ud83d\udd10 Password Strength Lab <span class=\"chip\" id=\"modeChip\">\u0648\u0636\u0639: \u0627\u062e\u062a\u0628\u0627\u0631<\/span><\/div>\r\n    <div class=\"row\" style=\"display:flex;gap:10px;align-items:center;flex-wrap:wrap\">\r\n      <input id=\"playerName\" class=\"input\" placeholder=\"\u0627\u0633\u0645 \u0627\u0644\u0644\u0627\u0639\u0628\" \/>\r\n      <select id=\"topic\" title=\"\u0627\u0644\u0645\u0648\u0636\u0648\u0639\">\r\n        <option value=\"general\" selected>\u0639\u0627\u0645<\/option>\r\n        <option value=\"email\">\u0628\u0631\u064a\u062f<\/option>\r\n        <option value=\"bank\">\u0628\u0646\u0643<\/option>\r\n        <option value=\"store\">\u0645\u062a\u062c\u0631<\/option>\r\n      <\/select>\r\n      <select id=\"difficulty\">\r\n        <option value=\"\u0633\u0647\u0644\" selected>\u0633\u0647\u0644 (25s)<\/option>\r\n        <option value=\"\u0645\u062a\u0648\u0633\u0637\">\u0645\u062a\u0648\u0633\u0637 (20s)<\/option>\r\n        <option value=\"\u0635\u0639\u0628\">\u0635\u0639\u0628 (15s)<\/option>\r\n      <\/select>\r\n      <select id=\"qCount\">\r\n        <option>5<\/option><option selected>10<\/option><option>15<\/option>\r\n      <\/select>\r\n      <button class=\"btn primary\" id=\"btnStart\">\u0627\u0628\u062f\u0623 \u0627\u0644\u0627\u062e\u062a\u0628\u0627\u0631<\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/header>\r\n\r\n<main>\r\n  <section class=\"card\" id=\"gameCard\">\r\n    <div class=\"head\">\r\n      <div class=\"stats\">\r\n        <div class=\"stat\">\u0627\u0644\u0645\u0631\u062d\u0644\u0629: <b id=\"qIdx\">0<\/b>\/<span id=\"qTotal\">0<\/span><\/div>\r\n        <div class=\"stat\">\u0627\u0644\u0646\u0642\u0627\u0637: <b id=\"score\">0<\/b><\/div>\r\n        <div class=\"stat\">\u0633\u0644\u0633\u0644\u0629 \u0635\u062d\u064a\u062d\u0629 \ud83d\udd25: <b id=\"streak\">0<\/b><\/div>\r\n        <div class=\"stat\">\u0642\u0644\u0648\u0628 \u2764: <b id=\"lives\">3<\/b><\/div>\r\n        <div class=\"stat\">\u0627\u0644\u0648\u0642\u062a \u23f3: <b id=\"timer\">20<\/b><span> s<\/span><\/div>\r\n      <\/div>\r\n      <div><span class=\"chip\" id=\"diffChip\">\u0627\u0644\u0635\u0639\u0648\u0628\u0629: \u2014<\/span><\/div>\r\n    <\/div>\r\n\r\n    <div class=\"body\">\r\n      <div class=\"tabs\">\r\n        <button class=\"tab active\" id=\"tabQuiz\">\u0648\u0636\u0639 \u0627\u0644\u0627\u062e\u062a\u0628\u0627\u0631<\/button>\r\n        <button class=\"tab\" id=\"tabCreate\">\u0648\u0636\u0639 \u0627\u0644\u0625\u0646\u0634\u0627\u0621<\/button>\r\n      <\/div>\r\n\r\n      <!-- Quiz -->\r\n      <div id=\"quizPane\">\r\n        <div class=\"meta\">\u0627\u062e\u062a\u0631 \u0627\u0644\u0625\u062c\u0627\u0628\u0629 \u0627\u0644\u0635\u062d\u064a\u062d\u0629 \u062d\u0648\u0644 \u0642\u0648\u0629 \u0643\u0644\u0645\u0627\u062a \u0627\u0644\u0645\u0631\u0648\u0631. \u0627\u0644\u0645\u0648\u0636\u0648\u0639 \u0627\u0644\u062d\u0627\u0644\u064a: <b id=\"metaTopic\">\u0639\u0627\u0645<\/b>.<\/div>\r\n        <div class=\"qarea\">\r\n          <div class=\"view\" id=\"qView\"><\/div>\r\n          <div class=\"actions\" id=\"actions\"><\/div>\r\n          <div class=\"explain hidden\" id=\"explain\"><\/div>\r\n          <div class=\"row\">\r\n            <button class=\"btn\" id=\"btnSuggest\">\u0627\u0642\u062a\u0631\u0627\u062d \u0643\u0644\u0645\u0629 \u0642\u0648\u064a\u0629<\/button>\r\n            <span id=\"suggestOut\" class=\"chip\"><\/span>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <!-- Create -->\r\n      <div id=\"createPane\" class=\"hidden\">\r\n        <div class=\"meta\">\u0627\u0643\u062a\u0628 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631\u0643 \u0648\u0633\u064a\u062a\u0645 \u062a\u0642\u064a\u064a\u0645\u0647\u0627 \u0648\u0627\u0642\u062a\u0631\u0627\u062d \u062a\u062d\u0633\u064a\u0646\u0627\u062a \u062e\u0637\u0648\u0629 \u0628\u062e\u0637\u0648\u0629.<\/div>\r\n        <div class=\"grid2\">\r\n          <div class=\"box\">\r\n            <div class=\"row\">\r\n              <input id=\"myPw\" class=\"input pwfield\" type=\"text\" placeholder=\"\u0627\u0643\u062a\u0628 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0647\u0646\u0627\" \/>\r\n            <\/div>\r\n            <div class=\"row\" style=\"margin-top:8px\">\r\n              <div class=\"meter\" style=\"flex:1\"><div id=\"meterBar\"><\/div><\/div>\r\n              <span class=\"chip\" id=\"gradeChip\">\u2014<\/span>\r\n            <\/div>\r\n            <div class=\"small\">\ud83d\udeab \u0644\u0627 \u062a\u0633\u062a\u062e\u062f\u0645 \u0647\u0630\u0647 \u0627\u0644\u0623\u0645\u062b\u0644\u0629 \u0644\u0623\u064a \u062d\u0633\u0627\u0628 \u062d\u0642\u064a\u0642\u064a. \u0627\u062c\u0639\u0644 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0641\u0631\u064a\u062f\u0629 \u0648\u063a\u064a\u0631 \u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0628\u064a\u0627\u0646\u0627\u062a\u0643.<\/div>\r\n            <div class=\"row\" style=\"margin-top:10px\">\r\n              <input id=\"sensitive\" class=\"input\" placeholder=\"\u0646\u0635 \u062d\u0633\u0627\u0633 \u0644\u062a\u062c\u0646\u0651\u0628\u0647 (\u0645\u062b\u0644\u0627\u064b \u0628\u0631\u064a\u062f\u0643) \u2013 \u0627\u062e\u062a\u064a\u0627\u0631\u064a\">\r\n              <button class=\"btn\" id=\"btnFixStep\">\u062a\u062d\u0633\u064a\u0646 \u062e\u0637\u0648\u0629<\/button>\r\n              <button class=\"btn\" id=\"btnFixAll\">\u062a\u062d\u0633\u064a\u0646 \u0643\u0627\u0645\u0644<\/button>\r\n              <button class=\"btn\" id=\"btnCopy\">\u0646\u0633\u062e<\/button>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <div class=\"box\">\r\n            <div class=\"checks\" id=\"checks\"><\/div>\r\n            <div style=\"margin-top:10px\">\r\n              <div class=\"small\">\u0646\u0635\u0627\u0626\u062d \u062d\u0633\u0628 \u0627\u0644\u0645\u0648\u0636\u0648\u0639: <span id=\"tipsTopic\"><\/span><\/div>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/section>\r\n\r\n  <section id=\"endCard\" class=\"card hidden\">\r\n    <div class=\"end\">\r\n      <div class=\"big\">\u0623\u062d\u0633\u0646\u062a! \u0627\u0646\u062a\u0647\u0649 \u0627\u0644\u0627\u062e\u062a\u0628\u0627\u0631 \u2705<\/div>\r\n      <div class=\"score\">\u0627\u0644\u0644\u0627\u0639\u0628: <b id=\"playerOut\">\u0644\u0627\u0639\u0628<\/b><\/div>\r\n      <div class=\"score\">\u0627\u0644\u0646\u062a\u064a\u062c\u0629: <b id=\"finalScore\">0<\/b><\/div>\r\n      <div class=\"row\" style=\"display:flex;gap:10px;justify-content:center;flex-wrap:wrap\">\r\n        <button class=\"btn primary\" id=\"btnDownload\">\u062a\u062d\u0645\u064a\u0644 \u0634\u0647\u0627\u062f\u0629 PNG<\/button>\r\n        <button class=\"btn\" id=\"btnAgain\">\u0627\u0644\u0644\u0639\u0628 \u0645\u062c\u062f\u062f\u064b\u0627<\/button>\r\n      <\/div>\r\n      <canvas id=\"cert\" width=\"1000\" height=\"600\"><\/canvas>\r\n    <\/div>\r\n  <\/section>\r\n<\/main>\r\n\r\n<footer class=\"footer\">\u062a\u0630\u0643\u064a\u0631: \u0644\u0627 \u062a\u0639\u0650\u062f \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0646\u0641\u0633 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631\u060c \u0648\u0641\u0639\u0651\u0644 \u0627\u0644\u0645\u0635\u0627\u062f\u0642\u0629 \u0627\u0644\u062b\u0646\u0627\u0626\u064a\u0629 (2FA) \u062f\u0627\u0626\u0645\u064b\u0627.<\/footer>\r\n\r\n<script>\r\n\/* ===== Helpers ===== *\/\r\nfunction $(id){ return document.getElementById(id); }\r\nfunction shuffle(a){ for(let i=a.length-1;i>0;i--){ const j=Math.floor(Math.random()*(i+1)); [a[i],a[j]]=[a[j],a[i]]; } return a; }\r\nconst TIME_MAP = { '\u0633\u0647\u0644':25, '\u0645\u062a\u0648\u0633\u0637':20, '\u0635\u0639\u0628':15 };\r\n\r\n\/* ===== Topics ===== *\/\r\nconst TOPIC_HINTS = {\r\n  general: \"\u0627\u0628\u062a\u0639\u062f \u0639\u0646 \u0627\u0644\u0643\u0644\u0645\u0627\u062a \u0627\u0644\u0634\u0627\u0626\u0639\u0629 \u0648\u0643\u0631\u0631 \u0627\u0633\u062a\u062e\u062f\u0627\u0645 \u0627\u0644\u0631\u0645\u0648\u0632 \u0648\u0627\u0644\u0623\u0631\u0642\u0627\u0645 \u0628\u0634\u0643\u0644 \u063a\u064a\u0631 \u0645\u062a\u0648\u0642\u0639.\",\r\n  email:   \"\u0644\u0627 \u062a\u0633\u062a\u062e\u062f\u0645 \u0628\u0631\u064a\u062f\u0643 \u0623\u0648 \u062c\u0632\u0621\u064b\u0627 \u0645\u0646\u0647 \u062f\u0627\u062e\u0644 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631. \u062a\u0641\u0627\u062f\u0649 \u0627\u0644\u0623\u0633\u0645\u0627\u0621 \u0648\u0627\u0644\u062a\u0648\u0627\u0631\u064a\u062e.\",\r\n  bank:    \"\u0627\u0628\u062a\u0639\u062f \u0639\u0646 \u0643\u0644\u0645\u0627\u062a \u0643\u0640 bank\/iban\/visa \u0648\u0623\u0631\u0642\u0627\u0645 \u0627\u0644\u062d\u0633\u0627\u0628\u0627\u062a \u0623\u0648 \u0627\u0644\u0647\u0648\u064a\u0629.\",\r\n  store:   \"\u0644\u0627 \u062a\u0633\u062a\u062e\u062f\u0645 \u0627\u0644\u0639\u0646\u0648\u0627\u0646\/\u0627\u0644\u0647\u0627\u062a\u0641\/\u0627\u0633\u0645 \u0627\u0644\u0645\u062a\u062c\u0631. \u0627\u062c\u0639\u0644\u0647\u0627 \u063a\u064a\u0631 \u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0628\u064a\u0627\u0646\u0627\u062a \u0627\u0644\u0634\u062d\u0646.\"\r\n};\r\nconst TOPIC_PENALTIES = {\r\n  general: [\/password\/i,\/qwerty\/i,\/welcome\/i],\r\n  email:   [\/mail\/i,\/gmail\/i,\/outlook\/i,\/hotmail\/i,\/yahoo\/i],\r\n  bank:    [\/bank\/i,\/iban\/i,\/visa\/i,\/mastercard\/i,\/card\/i,\/atm\/i,\/cvv\/i],\r\n  store:   [\/address\/i,\/phone\/i,\/store\/i,\/amazon\/i,\/noon\/i,\/souq\/i,\/cart\/i]\r\n};\r\n\r\n\/* ===== Password scoring ===== *\/\r\nconst COMMON = new Set([\"password\",\"123456\",\"qwerty\",\"letmein\",\"admin\",\"iloveyou\",\"welcome\",\"abc123\",\"\u0661\u0662\u0663\u0664\u0665\u0666\",\"\u0643\u0644\u0645\u0629\u0627\u0644\u0633\u0631\"]);\r\nfunction scorePassword(pw, topic='general', sensitiveText=''){\r\n  if(!pw) return {score:0, tips:[\"\u0641\u0627\u0631\u063a\u0629\"], checks:{}};\r\n  const len = pw.length;\r\n  const lower = \/[a-z]\/.test(pw);\r\n  const upper = \/[A-Z]\/.test(pw);\r\n  const digits = \/[0-9]\/.test(pw);\r\n  const arabic = \/[\u0621-\u064a]\/.test(pw);\r\n  const symbols = \/[^A-Za-z0-9\u0621-\u064a]\/.test(pw);\r\n  const repeats = \/(.)\\1{2,}\/.test(pw);\r\n  const common = COMMON.has(pw.toLowerCase());\r\n  let s = 0;\r\n  s += Math.min(7, Math.floor(len\/3))*10;               \/\/ \u0637\u0648\u0644\r\n  s += (lower?10:0)+(upper?12:0)+(digits?10:0)+(arabic?6:0)+(symbols?14:0);\r\n  if(repeats) s -= 12;\r\n  if(common) s -= 40;\r\n  const classes = [lower,upper,digits,symbols,arabic].filter(Boolean).length;\r\n  if(classes<=1) s -= 20;\r\n\r\n  \/\/ topic penalties\r\n  const topicRegs = TOPIC_PENALTIES[topic]||[];\r\n  const topicHits = topicRegs.some(r=>r.test(pw));\r\n  if(topicHits) s -= 16;\r\n\r\n  \/\/ sensitive text (user provided)\r\n  let hasSensitive=false;\r\n  if(sensitiveText && sensitiveText.trim().length>=3){\r\n    const esc = sensitiveText.trim().replace(\/[.*+?^${}()|[\\]\\\\]\/g,'\\\\$&');\r\n    const re = new RegExp(esc, 'i');\r\n    hasSensitive = re.test(pw);\r\n    if(hasSensitive) s -= 25;\r\n  }\r\n\r\n  s = Math.max(0, Math.min(100, s));\r\n  const tips=[];\r\n  if(len<12) tips.push(\"\u0627\u062c\u0639\u0644\u0647\u0627 12+ \u062d\u0631\u0641\u064b\u0627\");\r\n  if(classes<3) tips.push(\"\u0646\u0648\u0651\u0639 \u0628\u064a\u0646 \u062d\u0631\u0648\u0641 \u0643\u0628\u064a\u0631\u0629\/\u0635\u063a\u064a\u0631\u0629 \u0648\u0623\u0631\u0642\u0627\u0645 \u0648\u0631\u0645\u0648\u0632\");\r\n  if(repeats) tips.push(\"\u062a\u062c\u0646\u0651\u0628 \u0627\u0644\u062a\u0643\u0631\u0627\u0631\u0627\u062a \u0627\u0644\u0645\u062a\u062a\u0627\u0644\u064a\u0629\");\r\n  if(common) tips.push(\"\u062a\u062c\u0646\u0651\u0628 \u0627\u0644\u0643\u0644\u0645\u0627\u062a \u0627\u0644\u0634\u0627\u0626\u0639\u0629\");\r\n  if(topicHits) tips.push(\"\u0627\u0628\u062a\u0639\u062f \u0639\u0646 \u0643\u0644\u0645\u0627\u062a \u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0627\u0644\u0645\u0648\u0636\u0648\u0639\");\r\n  if(hasSensitive) tips.push(\"\u0644\u0627 \u062a\u062f\u0631\u062c \u0646\u0635\u0643 \u0627\u0644\u062d\u0633\u0627\u0633 \u062f\u0627\u062e\u0644 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631\");\r\n\r\n  const checks = {\r\n    len12: len>=12,\r\n    variety: classes>=3,\r\n    upper, lower, digits, symbols,\r\n    noRepeats: !repeats,\r\n    notCommon: !common,\r\n    noTopic: !topicHits,\r\n    noSensitive: !hasSensitive\r\n  };\r\n\r\n  return {score:s, tips, checks};\r\n}\r\nfunction grade(s){ if(s>=85) return \"\u0642\u0648\u064a\u0629 \u062c\u062f\u064b\u0627\"; if(s>=65) return \"\u0642\u0648\u064a\u0629\"; if(s>=45) return \"\u0645\u062a\u0648\u0633\u0637\u0629\"; return \"\u0636\u0639\u064a\u0641\u0629\"; }\r\n\r\n\/* ===== Quiz content ===== *\/\r\nconst BANK_WEAK = {\r\n  general: [\"password\",\"12345678\",\"qwerty2024\",\"letmein!\",\"abc12345\",\"welcome123\",\"baghdad2020\",\"Iraq2022\"],\r\n  email:   [\"myemail123\",\"gmail2023\",\"outlook2024\",\"mailbox1!\",\"user12345\",\"contact2020\"],\r\n  bank:    [\"bank1234\",\"visa2023\",\"iban123456\",\"atm0000\",\"card9999\",\"pin1234\"],\r\n  store:   [\"address123\",\"phone2020\",\"amazon111\",\"noon2023\",\"storepass1\",\"cart2024\"]\r\n};\r\nconst BANK_STRONG = {\r\n  general: [\"Q8!iraq*Road_2025\",\"Nahr$Tigris#47!\",\"SunRise@Ziggurat93\",\"Ur-Delta^Cloud77\"],\r\n  email:   [\"Inbox^Falcon@92!\",\"M@il-Star+Wave56\",\"Msg-Sky^Root#88\",\"Hdr^Pixel@204\"],\r\n  bank:    [\"Vault@Palm$72\",\"Safe^Ziggurat#93\",\"Key$Lion_447!\",\"Mint^Cipher@81\"],\r\n  store:   [\"Cart^Nebula#73\",\"Ship_Orbit@92!\",\"Pack$Meteor-55\",\"Box^Stellar@66\"]\r\n};\r\nfunction sampleWeak(topic){ const a=BANK_WEAK[topic]||BANK_WEAK.general; return a[Math.floor(Math.random()*a.length)]; }\r\nfunction sampleStrong(topic){ const a=BANK_STRONG[topic]||BANK_STRONG.general; return a[Math.floor(Math.random()*a.length)]; }\r\n\r\n\/* ===== Build Questions ===== *\/\r\nfunction qCheck(pw, topic, sensitive){\r\n  const m=scorePassword(pw, topic, sensitive);\r\n  return {\r\n    type:'check',\r\n    text:`\u0647\u0644 \u062a\u0642\u0628\u0644 \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u0627\u0644\u062a\u0627\u0644\u064a\u0629\u061f<div class=\"pw ${m.score<45?'bad':'good'}\">\u201c${pw}\u201d<\/div>`,\r\n    ok: m.score>=65 ? 0 : 1,\r\n    actions: ['\u2705 \u0623\u0642\u0628\u0644\u0647\u0627','\u274c \u0623\u0631\u0641\u0636\u0647\u0627'],\r\n    explain: `\u0627\u0644\u062a\u0642\u064a\u064a\u0645: ${grade(m.score)} (${m.score}%) \u2014 ${m.tips.length?('\u0646\u0635\u064a\u062d\u0629: '+m.tips.join('\u060c ')):'\u062c\u064a\u062f\u0629 \u062c\u062f\u064b\u0627.'}`\r\n  };\r\n}\r\nfunction qCompare(a,b, topic, sensitive){\r\n  const sa=scorePassword(a, topic, sensitive).score, sb=scorePassword(b, topic, sensitive).score;\r\n  return {\r\n    type:'compare',\r\n    text:`\u0627\u062e\u062a\u0631 \u0627\u0644\u0643\u0644\u0645\u0629 <b>\u0627\u0644\u0623\u0642\u0648\u0649<\/b>:<div class=\"pw\">A) \u201c${a}\u201d<\/div><div class=\"pw\">B) \u201c${b}\u201d<\/div>`,\r\n    ok: (sa>=sb?0:1),\r\n    actions:['A \u0627\u0644\u0623\u0642\u0648\u0649','B \u0627\u0644\u0623\u0642\u0648\u0649'],\r\n    explain:`\u062a\u0642\u064a\u064a\u0645 A: ${grade(sa)} (${sa}%) \u2014 \u062a\u0642\u064a\u064a\u0645 B: ${grade(sb)} (${sb}%). \u0627\u062e\u062a\u0631 \u0627\u0644\u0623\u0639\u0644\u0649.`\r\n  };\r\n}\r\nfunction buildPool(total, topic, sensitive){\r\n  const arr=[];\r\n  for(let i=0;i<total;i++){\r\n    if(i%3===2){\r\n      arr.push(qCompare(sampleStrong(topic), sampleWeak(topic), topic, sensitive));\r\n    }else{\r\n      const pick = Math.random()<0.5 ? sampleWeak(topic) : sampleStrong(topic);\r\n      arr.push(qCheck(pick, topic, sensitive));\r\n    }\r\n  }\r\n  return shuffle(arr);\r\n}\r\n\r\n\/* ===== State (quiz) ===== *\/\r\nlet Q_TOTAL=10, pool=[], i=0, score=0, streak=0, lives=3, timer=20, baseTimer=25, tick=null, lock=false, player='\u0644\u0627\u0639\u0628', level='\u0633\u0647\u0644', topic='general';\r\nconst qIdx=$('qIdx'), qTotal=$('qTotal'), scoreEl=$('score'), streakEl=$('streak'), livesEl=$('lives'), timerEl=$('timer'), diffChip=$('diffChip');\r\nconst qView=$('qView'), actionsEl=$('actions'), explain=$('explain'), metaTopic=$('metaTopic');\r\nconst btnStart=$('btnStart'), btnAgain=$('btnAgain'), btnDownload=$('btnDownload'), btnSuggest=$('btnSuggest'), suggestOut=$('suggestOut');\r\nconst gameCard=$('gameCard'), endCard=$('endCard'), finalScore=$('finalScore'), playerOut=$('playerOut'), cert=$('cert');\r\n\r\n\/* ===== Render (quiz) ===== *\/\r\nfunction render(){\r\n  clearInterval(tick); lock=false; timer=baseTimer; timerEl.textContent=timer;\r\n  const q = pool[i];\r\n  qView.innerHTML = q.text;\r\n  actionsEl.innerHTML = '';\r\n  explain.classList.add('hidden'); explain.textContent='';\r\n  q.actions.forEach((label,idx)=>{\r\n    const b=document.createElement('button'); b.className='choice'; b.textContent=label;\r\n    b.onclick=()=>choose(idx);\r\n    actionsEl.appendChild(b);\r\n  });\r\n  qIdx.textContent=i+1; qTotal.textContent=Q_TOTAL; scoreEl.textContent=score; streakEl.textContent=streak; livesEl.textContent=lives;\r\n  diffChip.textContent = '\u0627\u0644\u0635\u0639\u0648\u0628\u0629: ' + level;\r\n  tick=setInterval(()=>{ timer--; timerEl.textContent=timer; if(timer<=0){ clearInterval(tick); timeUp(); } }, 1000);\r\n}\r\nfunction choose(idx){\r\n  if(lock) return; lock=true; clearInterval(tick);\r\n  const q=pool[i]; const btns=[...actionsEl.children];\r\n  btns.forEach((n,ii)=>{ if(ii===q.ok) n.classList.add('correct'); else if(ii===idx) n.classList.add('wrong'); n.disabled=true; });\r\n  const correct = (idx===q.ok);\r\n  if(correct){\r\n    streak++; score += 100 + Math.max(0, timer*2) + (streak>1 ? (streak-1)*10 : 0);\r\n    explain.textContent = '\u2714 \u0635\u062d\u064a\u062d. ' + q.explain;\r\n  }else{\r\n    streak=0; lives--;\r\n    explain.textContent = '\u2716 \u063a\u064a\u0631 \u0635\u062d\u064a\u062d. ' + q.explain;\r\n  }\r\n  explain.classList.remove('hidden'); scoreEl.textContent=score; streakEl.textContent=streak; livesEl.textContent=lives;\r\n  setTimeout(next, 1100);\r\n}\r\nfunction timeUp(){\r\n  if(lock) return; lock=true;\r\n  const q=pool[i]; const btns=[...actionsEl.children];\r\n  btns.forEach((n,ii)=>{ if(ii===q.ok) n.classList.add('correct'); n.disabled=true; });\r\n  explain.textContent='\u23f3 \u0627\u0646\u062a\u0647\u0649 \u0627\u0644\u0648\u0642\u062a! ' + q.explain;\r\n  explain.classList.remove('hidden');\r\n  setTimeout(next, 1100);\r\n}\r\nfunction next(){\r\n  if(lives<=0 || i>=Q_TOTAL-1){ end(); return; }\r\n  i++; render();\r\n}\r\nfunction start(){\r\n  player = $('playerName').value.trim() || '\u0644\u0627\u0639\u0628';\r\n  level  = $('difficulty').value;\r\n  topic  = $('topic').value || 'general';\r\n  Q_TOTAL = parseInt($('qCount').value,10);\r\n  baseTimer = TIME_MAP[level] || 20;\r\n  i=0; score=0; streak=0; lives=3;\r\n  const sensitive = $('sensitive')?.value||'';\r\n  pool = buildPool(Q_TOTAL, topic, sensitive);\r\n  $('qTotal').textContent = Q_TOTAL;\r\n  $('timer').textContent = baseTimer;\r\n  $('modeChip').textContent = `\u0648\u0636\u0639: \u0627\u062e\u062a\u0628\u0627\u0631 \u2014 ${player} | ${level} (${baseTimer}s) | \u0627\u0644\u0623\u0633\u0626\u0644\u0629: ${Q_TOTAL} | \u0627\u0644\u0645\u0648\u0636\u0648\u0639: ${topicLabel(topic)}`;\r\n  metaTopic.textContent = topicLabel(topic);\r\n  gameCard.classList.remove('hidden'); endCard.classList.add('hidden');\r\n  \/\/ \u0627\u0638\u0647\u0631 \u062a\u0628\u0648\u064a\u0628 \u0627\u0644\u0627\u062e\u062a\u0628\u0627\u0631\r\n  showQuiz();\r\n  render();\r\n}\r\n\r\n\/* ===== Suggest strong (topic-aware) ===== *\/\r\nfunction randFrom(s){ return s[Math.floor(Math.random()*s.length)]; }\r\nfunction suggestStrong(){\r\n  const base = sampleStrong(topic);\r\n  const seps = [\"-\",\"_\",\"@\",\"#\",\"!\",\"$\",\"%\",\"^\",\"&\",\"*\",\"+\"];\r\n  const num = Math.floor(Math.random()*900+100); \/\/ 100-999\r\n  const sym = randFrom(seps);\r\n  const mix = base + sym + num;\r\n  const s = scorePassword(mix, topic).score;\r\n  suggestOut.textContent = mix + `  (${grade(s)} ${s}%)`;\r\n}\r\n\r\n\/* ===== End + Certificate ===== *\/\r\nfunction end(){\r\n  clearInterval(tick);\r\n  gameCard.classList.remove('hidden'); endCard.classList.remove('hidden');\r\n  finalScore.textContent = score; playerOut.textContent = player||'\u0644\u0627\u0639\u0628';\r\n  drawCert(player||'\u0644\u0627\u0639\u0628', score, level, topicLabel(topic));\r\n}\r\nfunction drawCert(name, score, level, topicText){\r\n  const c=cert, ctx=c.getContext('2d'), w=c.width, h=c.height;\r\n  ctx.clearRect(0,0,w,h);\r\n  const g=ctx.createLinearGradient(0,0,w,h); g.addColorStop(0,'#0b1229'); g.addColorStop(1,'#0e1a36');\r\n  ctx.fillStyle=g; ctx.fillRect(0,0,w,h);\r\n  \/\/ grid\r\n  ctx.strokeStyle='rgba(59,130,246,.22)'; ctx.lineWidth=1;\r\n  for(let x=60;x<w;x+=40){ ctx.beginPath(); ctx.moveTo(x,40); ctx.lineTo(x,h-40); ctx.stroke(); }\r\n  for(let y=60;y<h;y+=40){ ctx.beginPath(); ctx.moveTo(40,y); ctx.lineTo(w-40,y); ctx.stroke(); }\r\n  \/\/ frame\r\n  ctx.strokeStyle='#22c55e'; ctx.lineWidth=8; ctx.strokeRect(20,20,w-40,h-40);\r\n\r\n  ctx.fillStyle='#eaf4ff'; ctx.textAlign='center';\r\n  ctx.font='bold 40px Segoe UI, Arial'; ctx.fillText('\u0634\u0647\u0627\u062f\u0629 \u0625\u062a\u0645\u0627\u0645 \u2013 Password Strength Lab', w\/2, 110);\r\n  ctx.font='22px Segoe UI, Arial'; ctx.fillStyle='#b7cdfa'; ctx.fillText('\u0645\u064f\u0646\u062d\u062a \u0625\u0644\u0649', w\/2, 155);\r\n  ctx.font='bold 54px Segoe UI, Arial'; ctx.fillStyle='#eaf4ff'; ctx.fillText(name, w\/2, 205);\r\n\r\n  ctx.font='24px Segoe UI, Arial'; ctx.fillStyle='#b7cdfa'; ctx.fillText('\u0627\u0644\u0645\u062d\u0635\u0644\u0629', w\/2, 255);\r\n  ctx.font='bold 70px Segoe UI, Arial'; ctx.fillStyle='#eaf4ff'; ctx.fillText(`${score} \u0646\u0642\u0637\u0629`, w\/2, 315);\r\n\r\n  const chips=[`\u0627\u0644\u0635\u0639\u0648\u0628\u0629: ${level}`, `\u0627\u0644\u0645\u0648\u0636\u0648\u0639: ${topicText}`, `\u0627\u0644\u062a\u0627\u0631\u064a\u062e: ${new Date().toLocaleDateString('ar-IQ')}`];\r\n  ctx.textAlign='left'; ctx.font='20px Segoe UI, Arial'; ctx.fillStyle='#cde7ff';\r\n  const cx=140, cy=360;\r\n  chips.forEach((t,i)=> chip(ctx, cx, cy+i*46, t));\r\n\r\n  ctx.textAlign='center'; ctx.font='18px Segoe UI, Arial'; ctx.fillStyle='#c0d7ff';\r\n  ctx.fillText('\u0642\u0627\u0639\u062f\u0629 \u0630\u0647\u0628\u064a\u0629: \u0639\u0628\u0627\u0631\u0629 \u0637\u0648\u064a\u0644\u0629 \u0641\u0631\u064a\u062f\u0629 + 2FA = \u0623\u0645\u0627\u0646 \u0623\u0642\u0648\u0649', w\/2, h-50);\r\n\r\n  function chip(ctx,x,y,text){\r\n    const padX=16; ctx.font='20px Segoe UI, Arial';\r\n    const mw=ctx.measureText(text).width; const W=mw+padX*2, H=36, r=16;\r\n    ctx.fillStyle='rgba(11,32,55,.9)'; ctx.strokeStyle='#1a3572'; ctx.lineWidth=2;\r\n    roundRect(ctx,x,y,W,H,r,true,true);\r\n    ctx.fillStyle='#cde7ff'; ctx.fillText(text, x+padX, y+24);\r\n  }\r\n  function roundRect(ctx,x,y,w,h,r,fill,stroke){\r\n    ctx.beginPath();\r\n    ctx.moveTo(x+r,y); ctx.arcTo(x+w,y,x+w,y+h,r);\r\n    ctx.arcTo(x+w,y+h,x,y+h,r); ctx.arcTo(x,y+h,x,y,r);\r\n    ctx.arcTo(x,y,x+w,y,r); ctx.closePath();\r\n    if(fill) ctx.fill(); if(stroke) ctx.stroke();\r\n  }\r\n}\r\n\r\n\/* ===== Create mode ===== *\/\r\nconst meterBar=$('meterBar'), gradeChip=$('gradeChip'), checksBox=$('checks'), tipsTopic=$('tipsTopic');\r\nfunction topicLabel(t){ return t==='email'?'\u0628\u0631\u064a\u062f':t==='bank'?'\u0628\u0646\u0643':t==='store'?'\u0645\u062a\u062c\u0631':'\u0639\u0627\u0645'; }\r\nfunction renderChecks(ch){\r\n  checksBox.innerHTML='';\r\n  const items = [\r\n    {ok:ch.len12, t:'\u0627\u0644\u0637\u0648\u0644 12+ \u062d\u0631\u0641\u064b\u0627'},\r\n    {ok:ch.variety, t:'\u062a\u0646\u0648\u064a\u0639 \u0623\u0635\u0646\u0627\u0641 \u0627\u0644\u0631\u0645\u0648\u0632'},\r\n    {ok:ch.upper, t:'\u0641\u064a\u0647\u0627 \u062d\u0631\u0641 \u0643\u0628\u064a\u0631 A-Z'},\r\n    {ok:ch.lower, t:'\u0641\u064a\u0647\u0627 \u062d\u0631\u0641 \u0635\u063a\u064a\u0631 a-z'},\r\n    {ok:ch.digits, t:'\u0641\u064a\u0647\u0627 \u0631\u0642\u0645 0-9'},\r\n    {ok:ch.symbols, t:'\u0641\u064a\u0647\u0627 \u0631\u0645\u0632 \u062e\u0627\u0635'},\r\n    {ok:ch.noRepeats, t:'\u0644\u0627 \u062a\u0643\u0631\u0627\u0631\u0627\u062a \u0645\u062a\u062a\u0627\u0644\u064a\u0629'},\r\n    {ok:ch.notCommon, t:'\u0644\u064a\u0633\u062a \u0643\u0644\u0645\u0629 \u0634\u0627\u0626\u0639\u0629'},\r\n    {ok:ch.noTopic, t:'\u0644\u0627 \u062a\u062d\u062a\u0648\u064a \u0643\u0644\u0645\u0627\u062a \u0645\u0631\u062a\u0628\u0637\u0629 \u0628\u0627\u0644\u0645\u0648\u0636\u0648\u0639'},\r\n    {ok:ch.noSensitive, t:'\u0644\u0627 \u062a\u062d\u062a\u0648\u064a \u0627\u0644\u0646\u0635 \u0627\u0644\u062d\u0633\u0627\u0633'}\r\n  ];\r\n  for(const it of items){\r\n    const div=document.createElement('div');\r\n    div.className='check'+(it.ok?' ok':'');\r\n    div.innerHTML = (it.ok?'\u2705 ':'\u26a0\ufe0f ') + it.t;\r\n    checksBox.appendChild(div);\r\n  }\r\n}\r\nfunction updateCreate(){\r\n  const topicSel = $('topic').value||'general';\r\n  const sens = $('sensitive').value||'';\r\n  tipsTopic.textContent = TOPIC_HINTS[topicSel];\r\n  const val = $('myPw').value;\r\n  const {score:sc, tips, checks} = scorePassword(val, topicSel, sens);\r\n  meterBar.style.width = sc+'%';\r\n  gradeChip.textContent = `${grade(sc)} (${sc}%)`;\r\n  renderChecks(checks);\r\n}\r\n\r\n\/* \u062a\u062d\u0633\u064a\u0646\u0627\u062a \u062a\u0644\u0642\u0627\u0626\u064a\u0629 *\/\r\nfunction randWord(){\r\n  const words = [\"Tigris\",\"Euphrates\",\"Ziggurat\",\"Sumer\",\"Uruk\",\"Ishtar\",\"Babylon\",\"Palm\",\"Date\",\"Lion\",\"Garden\",\"Delta\",\"Nebula\",\"Orbit\",\"Comet\"];\r\n  return words[Math.floor(Math.random()*words.length)];\r\n}\r\nfunction applyFixStep(pw, topicSel, sens){\r\n  let s = scorePassword(pw, topicSel, sens);\r\n  \/\/ 1) \u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0646\u0635 \u0627\u0644\u062d\u0633\u0627\u0633 \u0623\u0648 \u0627\u0633\u062a\u0628\u062f\u0627\u0644\u0647\r\n  if(!s.checks.noSensitive && sens){\r\n    const esc = sens.replace(\/[.*+?^${}()|[\\]\\\\]\/g,'\\\\$&');\r\n    pw = pw.replace(new RegExp(esc,'ig'), randWord());\r\n    return pw;\r\n  }\r\n  \/\/ 2) \u0625\u0632\u0627\u0644\u0629 \u0643\u0644\u0645\u0627\u062a \u0627\u0644\u0645\u0648\u0636\u0648\u0639\r\n  if(!s.checks.noTopic){\r\n    for(const r of (TOPIC_PENALTIES[topicSel]||[])){\r\n      pw = pw.replace(r, randWord());\r\n    }\r\n    return pw;\r\n  }\r\n  \/\/ 3) \u0627\u0644\u0637\u0648\u0644\r\n  if(!s.checks.len12){\r\n    pw += \"-\" + randWord() + (Math.floor(Math.random()*90)+10);\r\n    return pw;\r\n  }\r\n  \/\/ 4) \u0627\u0644\u062a\u0646\u0648\u064a\u0639\r\n  if(!s.checks.upper){ pw = pw.replace(\/[a-z]\/, m=>m.toUpperCase()) || (\"A\"+pw); return pw; }\r\n  if(!s.checks.lower){ pw = pw.replace(\/[A-Z]\/, m=>m.toLowerCase()) || (pw+\"a\"); return pw; }\r\n  if(!s.checks.digits){ pw += (Math.floor(Math.random()*900)+100); return pw; }\r\n  if(!s.checks.symbols){ pw += \"@\"; return pw; }\r\n  \/\/ 5) \u062a\u0643\u0631\u0627\u0631\u0627\u062a\r\n  if(!s.checks.noRepeats){ pw = pw.replace(\/(.)\\1{2,}\/g,(m,p)=>p+p); return pw; }\r\n  \/\/ 6) \u0643\u0644\u0645\u0629 \u0634\u0627\u0626\u0639\u0629\r\n  if(!s.checks.notCommon){ pw = randWord()+\"@\"+pw+\"#\"+(Math.floor(Math.random()*90)+10); return pw; }\r\n  return pw;\r\n}\r\nfunction applyFixAll(pw, topicSel, sens){\r\n  for(let k=0;k<10;k++){\r\n    const before=pw;\r\n    pw = applyFixStep(pw, topicSel, sens);\r\n    if(pw===before) break;\r\n    const {score} = scorePassword(pw, topicSel, sens);\r\n    if(score>=85) break;\r\n  }\r\n  return pw;\r\n}\r\n\r\n\/* ===== Events ===== *\/\r\nbtnStart.onclick=start;\r\nbtnAgain.onclick=start;\r\nbtnSuggest.onclick=suggestStrong;\r\nbtnDownload.onclick=()=>{\r\n  const url=cert.toDataURL('image\/png');\r\n  const a=document.createElement('a'); a.href=url; a.download='password_strength_lab_certificate.png'; a.click();\r\n};\r\n\r\n\/* Tabs *\/\r\nconst tabQuiz=$('tabQuiz'), tabCreate=$('tabCreate'), quizPane=$('quizPane'), createPane=$('createPane');\r\ntabQuiz.onclick=showQuiz; tabCreate.onclick=showCreate;\r\nfunction showQuiz(){\r\n  quizPane.classList.remove('hidden'); createPane.classList.add('hidden');\r\n  tabQuiz.classList.add('active'); tabCreate.classList.remove('active');\r\n  $('modeChip').textContent = '\u0648\u0636\u0639: \u0627\u062e\u062a\u0628\u0627\u0631';\r\n}\r\nfunction showCreate(){\r\n  quizPane.classList.add('hidden'); createPane.classList.remove('hidden');\r\n  tabQuiz.classList.remove('active'); tabCreate.classList.add('active');\r\n  $('modeChip').textContent = '\u0648\u0636\u0639: \u0625\u0646\u0634\u0627\u0621';\r\n  updateCreate();\r\n}\r\n\r\n\/* Create mode events *\/\r\n$('myPw').addEventListener('input', updateCreate);\r\n$('sensitive').addEventListener('input', updateCreate);\r\n$('topic').addEventListener('change', ()=>{\r\n  metaTopic.textContent = topicLabel($('topic').value||'general');\r\n  updateCreate();\r\n});\r\n$('btnFixStep').onclick = ()=>{\r\n  const t=$('topic').value||'general', s=$('sensitive').value||'';\r\n  $('myPw').value = applyFixStep($('myPw').value, t, s);\r\n  updateCreate();\r\n};\r\n$('btnFixAll').onclick = ()=>{\r\n  const t=$('topic').value||'general', s=$('sensitive').value||'';\r\n  $('myPw').value = applyFixAll($('myPw').value, t, s);\r\n  updateCreate();\r\n};\r\n$('btnCopy').onclick = async ()=>{\r\n  try{\r\n    await navigator.clipboard.writeText($('myPw').value);\r\n    const msg=document.createElement('span'); msg.className='chip'; msg.textContent='\u2714 \u062a\u0645 \u0627\u0644\u0646\u0633\u062e';\r\n    msg.style.background='#0b1c3e'; msg.style.marginInlineStart='8px';\r\n    $('btnCopy').after(msg); setTimeout(()=>msg.remove(), 1200);\r\n  }catch(e){}\r\n};\r\n\r\n\/* ===== Start defaults ===== *\/\r\n(function init(){\r\n  $('qTotal').textContent='0';\r\n  $('tipsTopic').textContent = TOPIC_HINTS['general'];\r\n})();\r\n<\/script>\r\n<\/body>\r\n<\/html>\r\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>\u0627\u0644\u0631\u0626\u064a\u0633\u064a\u0629 \u0623\u0644\u0639\u0627\u0628 \u062a\u0639\u0644\u064a\u0645\u064a\u0629 \u0627\u0633\u0626\u0644\u0629 \u0634\u0627\u0626\u0639\u0629 \u0627\u0644\u0642\u0635\u0635 \u0627\u0644\u062a\u0648\u0639\u0648\u064a\u0629 X \u0634\u0627\u0647\u062f \u0627\u0644\u0642\u0635\u0635 \ud83d\udd10 Password Strength Lab \u2013 \u0627\u062e\u062a\u0628\u0627\u0631 + \u0625\u0646\u0634\u0627\u0621 \ud83d\udd10 Password Strength Lab \u0648\u0636\u0639: \u0627\u062e\u062a\u0628\u0627\u0631 \u0639\u0627\u0645\u0628\u0631\u064a\u062f\u0628\u0646\u0643\u0645\u062a\u062c\u0631 \u0633\u0647\u0644 (25s)\u0645\u062a\u0648\u0633\u0637 (20s)\u0635\u0639\u0628 (15s) 51015 \u0627\u0628\u062f\u0623 \u0627\u0644\u0627\u062e\u062a\u0628\u0627\u0631 \u0627\u0644\u0645\u0631\u062d\u0644\u0629: 0\/0 \u0627\u0644\u0646\u0642\u0627\u0637: 0 \u0633\u0644\u0633\u0644\u0629 \u0635\u062d\u064a\u062d\u0629 \ud83d\udd25: 0 \u0642\u0644\u0648\u0628 \u2764: 3 \u0627\u0644\u0648\u0642\u062a \u23f3: 20 s \u0627\u0644\u0635\u0639\u0648\u0628\u0629: \u2014 \u0648\u0636\u0639 \u0627\u0644\u0627\u062e\u062a\u0628\u0627\u0631 \u0648\u0636\u0639 \u0627\u0644\u0625\u0646\u0634\u0627\u0621 \u0627\u062e\u062a\u0631 \u0627\u0644\u0625\u062c\u0627\u0628\u0629 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-1343","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/safebrowsing.cmc.iq\/index.php\/wp-json\/wp\/v2\/pages\/1343","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/safebrowsing.cmc.iq\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/safebrowsing.cmc.iq\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/safebrowsing.cmc.iq\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/safebrowsing.cmc.iq\/index.php\/wp-json\/wp\/v2\/comments?post=1343"}],"version-history":[{"count":23,"href":"https:\/\/safebrowsing.cmc.iq\/index.php\/wp-json\/wp\/v2\/pages\/1343\/revisions"}],"predecessor-version":[{"id":1735,"href":"https:\/\/safebrowsing.cmc.iq\/index.php\/wp-json\/wp\/v2\/pages\/1343\/revisions\/1735"}],"wp:attachment":[{"href":"https:\/\/safebrowsing.cmc.iq\/index.php\/wp-json\/wp\/v2\/media?parent=1343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}