{"id":6,"date":"2026-03-30T04:46:54","date_gmt":"2026-03-30T04:46:54","guid":{"rendered":"https:\/\/sitedoctor.gh-fs.com\/?page_id=6"},"modified":"2026-03-30T04:51:23","modified_gmt":"2026-03-30T04:51:23","slug":"site-doctor","status":"publish","type":"page","link":"https:\/\/sitedoctor.gh-fs.com\/","title":{"rendered":"Site Doctor"},"content":{"rendered":"\t<div id=\"ghfs-site-doctor\">\n\t\t<style>\n\t\t\t#ghfs-site-doctor{max-width:1440px;margin:22px auto;padding:18px;color:#fff;font-family:Inter,system-ui,-apple-system,BlinkMacSystemFont,\"Segoe UI\",sans-serif}\n\t\t\t#ghfs-site-doctor *{box-sizing:border-box}\n\t\t\t#ghfs-site-doctor .sd-shell{position:relative;overflow:hidden;border-radius:30px;padding:30px;border:1px solid rgba(135,190,255,.16);background:\n\t\t\t\tradial-gradient(circle at 10% 0%, rgba(81,224,255,.18), transparent 24%),\n\t\t\t\tradial-gradient(circle at 88% 8%, rgba(150,99,255,.16), transparent 24%),\n\t\t\t\tradial-gradient(circle at 50% 100%, rgba(48,120,255,.12), transparent 34%),\n\t\t\t\tlinear-gradient(145deg, #07111f 0%, #0a1730 38%, #0a1030 100%);\n\t\t\t\tbox-shadow:0 28px 90px rgba(0,0,0,.32)}\n\t\t\t#ghfs-site-doctor .sd-shell:before{content:\"\";position:absolute;inset:0;background-image:linear-gradient(rgba(135,177,255,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(135,177,255,.04) 1px,transparent 1px);background-size:32px 32px;pointer-events:none}\n\t\t\t#ghfs-site-doctor .sd-head{display:grid;grid-template-columns:1.1fr .9fr;gap:22px;align-items:stretch}\n\t\t\t#ghfs-site-doctor .sd-panel{position:relative;z-index:1;border:1px solid rgba(153,194,255,.12);background:linear-gradient(180deg,rgba(17,34,62,.72),rgba(10,21,40,.78));backdrop-filter:blur(12px);border-radius:24px;padding:20px;box-shadow:inset 0 1px 0 rgba(255,255,255,.05),0 12px 34px rgba(0,0,0,.12)}\n\t\t\t#ghfs-site-doctor .sd-title{margin:0;font-size:56px;line-height:.9;font-weight:900;letter-spacing:-.04em}\n\t\t\t#ghfs-site-doctor .sd-title .glow{display:block;background:linear-gradient(90deg,#9ee7ff,#77b9ff,#9a90ff);-webkit-background-clip:text;background-clip:text;color:transparent;text-shadow:0 0 36px rgba(115,210,255,.18)}\n\t\t\t#ghfs-site-doctor .sd-sub{margin:16px 0 18px;color:rgba(228,239,255,.92);font-size:16px;line-height:1.65;max-width:830px}\n\t\t\t#ghfs-site-doctor .sd-mini{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:18px}\n\t\t\t#ghfs-site-doctor .sd-mini span,#ghfs-site-doctor .sd-chip{display:inline-flex;align-items:center;gap:8px;padding:10px 14px;border-radius:999px;border:1px solid rgba(150,180,255,.16);background:rgba(35,67,110,.36);font-size:13px;font-weight:700;color:#eef6ff}\n\t\t\t#ghfs-site-doctor .sd-intake-title,#ghfs-site-doctor .sd-label{font-size:13px;font-weight:900;letter-spacing:.12em;text-transform:uppercase;color:#b7d7ff}\n\t\t\t#ghfs-site-doctor .sd-form{display:grid;grid-template-columns:minmax(0,1fr) 240px;gap:14px;align-items:center;margin:14px 0 12px}\n\t\t\t#ghfs-site-doctor .sd-input{height:62px;padding:0 20px;border-radius:18px;border:1px solid rgba(169,194,255,.16);background:rgba(255,255,255,.04);color:#fff;font-size:18px;outline:none;box-shadow:inset 0 0 0 1px rgba(255,255,255,.02)}\n\t\t\t#ghfs-site-doctor .sd-input::placeholder{color:rgba(220,232,255,.55)}\n\t\t\t#ghfs-site-doctor .sd-btn{height:62px;border:none;border-radius:20px;background:linear-gradient(90deg,#69c9ff,#7fa1ff,#978dff);color:#09111f;font-size:17px;font-weight:900;cursor:pointer;box-shadow:0 16px 32px rgba(103,165,255,.18)}\n\t\t\t#ghfs-site-doctor .sd-btn[disabled]{opacity:.72;cursor:not-allowed}\n\t\t\t#ghfs-site-doctor .sd-status{min-height:22px;margin:10px 0 0;color:#dceaff;font-size:14px}\n\t\t\t#ghfs-site-doctor .sd-scan-cards{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-top:14px}\n\t\t\t#ghfs-site-doctor .sd-info-card{padding:14px 16px;border-radius:18px;border:1px solid rgba(154,182,255,.12);background:rgba(255,255,255,.035);color:#d9ebff;font-size:13px;line-height:1.6}\n\t\t\t#ghfs-site-doctor .sd-radar-wrap{display:flex;flex-direction:column;gap:18px;justify-content:space-between;height:100%}\n\t\t\t#ghfs-site-doctor .sd-radar-box{display:flex;align-items:center;justify-content:center;min-height:440px;position:relative;border-radius:24px;border:1px solid rgba(147,177,255,.12);background:linear-gradient(180deg,rgba(255,255,255,.02),rgba(255,255,255,.01))}\n\t\t\t#ghfs-site-doctor #sd-radar{width:min(100%,480px);aspect-ratio:1\/1;display:block}\n\t\t\t#ghfs-site-doctor .sd-radar-center{position:absolute;inset:auto 50% 50% auto;transform:translate(50%,50%);text-align:center;pointer-events:none}\n\t\t\t#ghfs-site-doctor .sd-radar-ms{font-size:46px;font-weight:900;line-height:1;background:linear-gradient(90deg,#dff8ff,#7fc6ff,#af9eff);-webkit-background-clip:text;background-clip:text;color:transparent}\n\t\t\t#ghfs-site-doctor .sd-radar-small{margin-top:6px;font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:#bfdcff}\n\t\t\t#ghfs-site-doctor .sd-pulse{padding:14px 16px;border-radius:18px;border:1px solid rgba(148,177,255,.12);background:rgba(255,255,255,.03)}\n\t\t\t#ghfs-site-doctor .sd-pulse-row{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center}\n\t\t\t#ghfs-site-doctor .sd-pulse-stats{display:flex;gap:12px;flex-wrap:wrap;justify-content:flex-end}\n\t\t\t#ghfs-site-doctor .sd-stat{min-width:88px;padding:8px 12px;border-radius:14px;background:rgba(255,255,255,.04);border:1px solid rgba(147,176,255,.12);font-size:12px;color:#d9edff}\n\t\t\t#ghfs-site-doctor .sd-stat strong{display:block;font-size:14px;color:#fff;margin-top:2px}\n\t\t\t#ghfs-site-doctor #sd-pulse{width:100%;height:80px;display:block;margin-top:10px}\n\t\t\t#ghfs-site-doctor .sd-ping-list{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}\n\t\t\t#ghfs-site-doctor .sd-ping-list span{padding:7px 10px;border-radius:999px;background:rgba(255,255,255,.04);border:1px solid rgba(147,176,255,.1);font-size:12px;color:#dcedff}\n\t\t\t#ghfs-site-doctor .sd-main{display:grid;grid-template-columns:1fr;gap:20px;margin-top:20px}\n\t\t\t#ghfs-site-doctor .sd-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:14px;margin-bottom:16px}\n\t\t\t#ghfs-site-doctor .sd-summary-card{padding:18px;border-radius:22px;border:1px solid rgba(152,182,255,.12);background:linear-gradient(180deg,rgba(255,255,255,.045),rgba(255,255,255,.02));box-shadow:inset 0 1px 0 rgba(255,255,255,.03)}\n\t\t\t#ghfs-site-doctor .sd-summary-card h4{margin:0 0 8px;font-size:14px;letter-spacing:.12em;text-transform:uppercase;color:#b7d7ff}\n\t\t\t#ghfs-site-doctor .sd-summary-card .big{font-size:46px;line-height:1;font-weight:900;color:#fff}\n\t\t\t#ghfs-site-doctor .sd-summary-card p{margin:8px 0 0;color:#d7e8ff;font-size:14px;line-height:1.6}\n\t\t\t#ghfs-site-doctor .sd-summary-card.fix{background:linear-gradient(180deg,rgba(56,98,255,.14),rgba(155,102,255,.08));cursor:pointer}\n\t\t\t#ghfs-site-doctor .sd-fix-pack{display:none;margin:12px 0 16px;padding:16px;border-radius:20px;border:1px solid rgba(147,179,255,.14);background:rgba(255,255,255,.04)}\n\t\t\t#ghfs-site-doctor .sd-fix-pack.show{display:block}\n\t\t\t#ghfs-site-doctor .sd-fix-pack h4{margin:0 0 10px;font-size:18px;color:#fff}\n\t\t\t#ghfs-site-doctor .sd-fix-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\n\t\t\t#ghfs-site-doctor .sd-fix-item{padding:14px;border-radius:16px;background:rgba(255,255,255,.03);border:1px solid rgba(147,176,255,.1)}\n\t\t\t#ghfs-site-doctor .sd-fix-item b{display:block;margin-bottom:8px;color:#fff}\n\t\t\t#ghfs-site-doctor .sd-fix-item div{font-size:13px;line-height:1.6;color:#d7e8ff}\n\t\t\t#ghfs-site-doctor .sd-bars{margin-top:10px}\n\t\t\t#ghfs-site-doctor .sd-bar{display:grid;grid-template-columns:180px 1fr 78px;gap:12px;align-items:center;margin:12px 0}\n\t\t\t#ghfs-site-doctor .sd-bar-label{font-size:16px;font-weight:800;color:#fff}\n\t\t\t#ghfs-site-doctor .sd-track{height:16px;border-radius:999px;background:rgba(255,255,255,.06);position:relative;overflow:hidden}\n\t\t\t#ghfs-site-doctor .sd-track i{display:block;height:100%;width:0;border-radius:999px;background:linear-gradient(90deg,#69d0ff,#77b8ff,#9c8dff);box-shadow:0 0 18px rgba(95,179,255,.32);transition:width .6s ease}\n\t\t\t#ghfs-site-doctor .sd-bar-value{font-size:16px;font-weight:900;color:#fff;text-align:right}\n\t\t\t#ghfs-site-doctor .sd-badges{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}\n\t\t\t#ghfs-site-doctor .sd-xray-wrap{display:grid;grid-template-columns:minmax(0,1.45fr) minmax(340px,.55fr);gap:20px;align-items:start}\n\t\t\t#ghfs-site-doctor .sd-preview{position:relative;border-radius:26px;border:1px solid rgba(155,196,255,.12);overflow:hidden;background:linear-gradient(180deg,rgba(255,255,255,.045),rgba(255,255,255,.02));min-height:760px;box-shadow:inset 0 1px 0 rgba(255,255,255,.04)}\n\t\t\t#ghfs-site-doctor .sd-preview img{display:block;width:100%;height:100%;min-height:760px;object-fit:cover;object-position:top center}\n\t\t\t#ghfs-site-doctor .sd-preview-fallback{display:flex;align-items:center;justify-content:center;min-height:760px;padding:28px;color:#d8ebff;text-align:center;background:radial-gradient(circle at 50% 10%,rgba(121,196,255,.14),transparent 36%),linear-gradient(180deg,rgba(255,255,255,.025),rgba(255,255,255,.01))}\n\t\t\t#ghfs-site-doctor .sd-preview-fallback .sd-wire{width:94%;max-width:920px;border:1px solid rgba(150,180,255,.15);border-radius:24px;padding:24px;background:rgba(255,255,255,.03)}\n\t\t\t#ghfs-site-doctor .sd-wire-box{height:90px;border-radius:16px;margin:10px 0;background:rgba(255,255,255,.06);border:1px solid rgba(150,180,255,.1)}\n\t\t\t#ghfs-site-doctor .sd-marker{position:absolute;display:flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:50%;background:linear-gradient(180deg,#ff9a8e,#ff5d88);font-size:14px;font-weight:900;color:#fff;box-shadow:0 0 0 4px rgba(255,91,120,.15),0 14px 28px rgba(0,0,0,.28);transform:translate(-50%,-50%)}\n\t\t\t#ghfs-site-doctor .sd-marker:after{content:\"\";position:absolute;width:54px;height:54px;border-radius:50%;border:1px solid rgba(255,111,145,.35);animation:sdPulse 1.8s infinite}\n\t\t\t@keyframes sdPulse{0%{transform:scale(.68);opacity:.8}100%{transform:scale(1.2);opacity:0}}\n\t\t\t#ghfs-site-doctor .sd-issues{padding:18px;border-radius:26px;border:1px solid rgba(149,179,255,.12);background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(255,255,255,.02));position:sticky;top:20px}\n\t\t\t#ghfs-site-doctor .sd-issues h3,#ghfs-site-doctor .sd-section h3{margin:0 0 12px;font-size:22px;color:#fff}\n\t\t\t#ghfs-site-doctor .sd-issue-list{display:flex;flex-direction:column;gap:10px}\n\t\t\t#ghfs-site-doctor .sd-issue{padding:12px 14px;border-radius:16px;background:rgba(255,255,255,.035);border:1px solid rgba(147,176,255,.08);color:#d6e8ff;font-size:13px;line-height:1.6}\n\t\t\t#ghfs-site-doctor .sd-issue strong{display:block;color:#fff;margin-bottom:6px;font-size:15px}\n#ghfs-site-doctor .sd-issue p{margin:0 0 8px;color:#dcecff}\n#ghfs-site-doctor .sd-issue-meta{margin-top:8px;padding-top:8px;border-top:1px solid rgba(147,176,255,.08);font-size:12px;line-height:1.65;color:#bdd8ff}\n#ghfs-site-doctor .sd-issue-meta b{color:#fff}\n#ghfs-site-doctor .sd-score-notes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:16px}\n#ghfs-site-doctor .sd-score-note{padding:16px;border-radius:18px;border:1px solid rgba(147,176,255,.1);background:rgba(255,255,255,.035)}\n#ghfs-site-doctor .sd-score-note b{display:block;margin-bottom:8px;color:#fff;font-size:15px}\n#ghfs-site-doctor .sd-score-note div{font-size:13px;line-height:1.65;color:#d7e8ff}\n#ghfs-site-doctor .sd-owner-summary{margin-top:16px;padding:18px;border-radius:20px;border:1px solid rgba(147,176,255,.12);background:rgba(255,255,255,.04)}\n#ghfs-site-doctor .sd-owner-summary h3{margin:0 0 10px;font-size:22px;color:#fff}\n#ghfs-site-doctor .sd-owner-summary p{margin:0 0 10px;font-size:14px;line-height:1.7;color:#d9ebff}\n\n\t\t\t#ghfs-site-doctor .sd-section{margin-top:18px;padding:18px;border-radius:24px;border:1px solid rgba(149,178,255,.12);background:rgba(255,255,255,.03)}\n\t\t\t#ghfs-site-doctor .sd-two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}\n\t\t\t#ghfs-site-doctor .sd-list{margin:0;padding-left:18px}\n\t\t\t#ghfs-site-doctor .sd-list li{margin:0 0 8px;color:#d8ebff;font-size:14px;line-height:1.6}\n\t\t\t#ghfs-site-doctor .sd-watch{margin-top:18px;padding:20px;border-radius:26px;border:1px solid rgba(153,182,255,.14);background:linear-gradient(90deg,rgba(57,164,255,.12),rgba(132,97,255,.1));display:grid;grid-template-columns:1.2fr .8fr;gap:16px;align-items:center}\n\t\t\t#ghfs-site-doctor .sd-watch h3{margin:0 0 8px;font-size:28px;color:#fff}\n\t\t\t#ghfs-site-doctor .sd-watch p{margin:0;color:#dbebff;line-height:1.6}\n\t\t\t#ghfs-site-doctor .sd-watch-boxes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\n\t\t\t#ghfs-site-doctor .sd-watch-box{padding:14px;border-radius:18px;background:rgba(255,255,255,.04);border:1px solid rgba(147,176,255,.12)}\n\t\t\t#ghfs-site-doctor .sd-watch-box b{display:block;margin-bottom:6px;color:#fff}\n\t\t\t#ghfs-site-doctor .sd-watch-box span{font-size:13px;color:#d8ebff;line-height:1.5}\n\t\t\t#ghfs-site-doctor .sd-hidden{display:none}\n\t\t\t@media (max-width:1180px){#ghfs-site-doctor .sd-head,#ghfs-site-doctor .sd-xray-wrap,#ghfs-site-doctor .sd-watch{grid-template-columns:1fr}#ghfs-site-doctor .sd-radar-box{min-height:360px}#ghfs-site-doctor .sd-preview,#ghfs-site-doctor .sd-preview-fallback,#ghfs-site-doctor .sd-preview img{min-height:520px;height:auto}}\n\t\t\t@media (max-width:820px){#ghfs-site-doctor .sd-form{grid-template-columns:1fr}#ghfs-site-doctor .sd-scan-cards,#ghfs-site-doctor .sd-summary-grid,#ghfs-site-doctor .sd-two,#ghfs-site-doctor .sd-fix-grid,#ghfs-site-doctor .sd-watch-boxes,#ghfs-site-doctor .sd-score-notes{grid-template-columns:1fr}#ghfs-site-doctor .sd-bar{grid-template-columns:120px 1fr 66px}#ghfs-site-doctor .sd-title{font-size:40px}}\n\t\t<\/style>\n\n\t\t<div class=\"sd-shell\">\n\t\t\t<div class=\"sd-head\">\n\t\t\t\t<div class=\"sd-panel\">\n\t\t\t\t\t<h1 class=\"sd-title\">SiteDoctor <span class=\"glow\">X-RAY MRI<\/span><\/h1>\n\t\t\t\t\t<p class=\"sd-sub\">SiteDoctor scans revenue leaks, trust gaps, DNS and mail setup, AI visibility, blacklist signals, server behavior and the tech stack behind a website. It also maps visible issues on a preview, measures live latency and creates a paid Fix Pack that tells the owner exactly what to change.<\/p>\n\t\t\t\t\t<div class=\"sd-mini\">\n\t\t\t\t\t\t<span>Revenue Leak Score<\/span>\n\t\t\t\t\t\t<span>Trust & Deliverability<\/span>\n\t\t\t\t\t\t<span>AI Visibility<\/span>\n\t\t\t\t\t\t<span>Watch Mode Ready<\/span>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"sd-panel\" style=\"padding:16px;margin-top:8px;\">\n\t\t\t\t\t\t<div class=\"sd-intake-title\">Live Scan Intake<\/div>\n\t\t\t\t\t\t<div class=\"sd-form\">\n\t\t\t\t\t\t\t<input id=\"sd-domain\" class=\"sd-input\" type=\"text\" placeholder=\"example.com or https:\/\/example.com\">\n\t\t\t\t\t\t\t<button id=\"sd-run\" class=\"sd-btn\" type=\"button\">Run Full Scan<\/button>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div id=\"sd-status\" class=\"sd-status\"><\/div>\n\t\t\t\t\t\t<div class=\"sd-scan-cards\">\n\t\t\t\t\t\t\t<div class=\"sd-info-card\">DNS, MX, SPF, DMARC, WHOIS, primary IP and reputation signals.<\/div>\n\t\t\t\t\t\t\t<div class=\"sd-info-card\">CMS, server, cache, response time, page weight and content signals.<\/div>\n\t\t\t\t\t\t\t<div class=\"sd-info-card\">X-Ray leak map, AI visibility score, Watch mode pitch and premium Fix Pack.<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div class=\"sd-panel sd-radar-wrap\">\n\t\t\t\t\t<div class=\"sd-radar-box\">\n\t\t\t\t\t\t<canvas id=\"sd-radar\" width=\"520\" height=\"520\"><\/canvas>\n\t\t\t\t\t\t<div class=\"sd-radar-center\">\n\t\t\t\t\t\t\t<div class=\"sd-radar-ms\" id=\"sd-current-ms\">-- ms<\/div>\n\t\t\t\t\t\t\t<div class=\"sd-radar-small\">Live Health Radar<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"sd-pulse\">\n\t\t\t\t\t\t<div class=\"sd-pulse-row\">\n\t\t\t\t\t\t\t<div class=\"sd-label\">Live Latency Pulse<\/div>\n\t\t\t\t\t\t\t<div class=\"sd-pulse-stats\">\n\t\t\t\t\t\t\t\t<div class=\"sd-stat\">Current<strong id=\"sd-stat-current\">--<\/strong><\/div>\n\t\t\t\t\t\t\t\t<div class=\"sd-stat\">Min<strong id=\"sd-stat-min\">--<\/strong><\/div>\n\t\t\t\t\t\t\t\t<div class=\"sd-stat\">Avg<strong id=\"sd-stat-avg\">--<\/strong><\/div>\n\t\t\t\t\t\t\t\t<div class=\"sd-stat\">Max<strong id=\"sd-stat-max\">--<\/strong><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<canvas id=\"sd-pulse\" width=\"860\" height=\"160\"><\/canvas>\n\t\t\t\t\t\t<div id=\"sd-ping-list\" class=\"sd-ping-list\"><\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\n\t\t\t<div class=\"sd-main\">\n\t\t\t\t<div class=\"sd-panel\">\n\t\t\t\t\t<div class=\"sd-summary-grid\">\n\t\t\t\t\t\t<div class=\"sd-summary-card\">\n\t\t\t\t\t\t\t<h4>Scan Output<\/h4>\n\t\t\t\t\t\t\t<div class=\"big\" id=\"sd-output-word\">Deep<\/div>\n\t\t\t\t\t\t\t<p>Technical findings translated into plain English so owners understand what is broken and why it matters.<\/p>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"sd-summary-card\">\n\t\t\t\t\t\t\t<h4>Unique Angle<\/h4>\n\t\t\t\t\t\t\t<div class=\"big\">X-Ray<\/div>\n\t\t\t\t\t\t\t<p>Instead of a dry audit, the page behaves like a diagnostic lab with issue mapping and business-risk language.<\/p>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"sd-summary-card\">\n\t\t\t\t\t\t\t<h4>Report Style<\/h4>\n\t\t\t\t\t\t\t<div class=\"big\">Clear<\/div>\n\t\t\t\t\t\t\t<p>Every finding explains what is wrong, what it can cause and why even a non-technical owner should care.<\/p>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"sd-fix-pack\" class=\"sd-fix-pack\">\n\t\t\t\t\t\t<h4>Future Fix Pack<\/h4>\n\t\t\t\t\t\t<div class=\"sd-fix-grid\" id=\"sd-fix-grid\"><\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"sd-label\">Scan Summary<\/div>\n\t\t\t\t\t<div class=\"sd-badges\" id=\"sd-badges\"><\/div>\n\n\t\t\t\t\t<div class=\"sd-bars\">\n\t\t\t\t\t\t<div class=\"sd-bar\"><div class=\"sd-bar-label\">Performance<\/div><div class=\"sd-track\"><i id=\"sd-bar-performance\"><\/i><\/div><div class=\"sd-bar-value\" id=\"sd-val-performance\">0\/100<\/div><\/div>\n\t\t\t\t\t\t<div class=\"sd-bar\"><div class=\"sd-bar-label\">Revenue Leak<\/div><div class=\"sd-track\"><i id=\"sd-bar-revenue\"><\/i><\/div><div class=\"sd-bar-value\" id=\"sd-val-revenue\">0\/100<\/div><\/div>\n\t\t\t\t\t\t<div class=\"sd-bar\"><div class=\"sd-bar-label\">Trust<\/div><div class=\"sd-track\"><i id=\"sd-bar-trust\"><\/i><\/div><div class=\"sd-bar-value\" id=\"sd-val-trust\">0\/100<\/div><\/div>\n\t\t\t\t\t\t<div class=\"sd-bar\"><div class=\"sd-bar-label\">AI Visibility<\/div><div class=\"sd-track\"><i id=\"sd-bar-ai\"><\/i><\/div><div class=\"sd-bar-value\" id=\"sd-val-ai\">0\/100<\/div><\/div>\n\t\t\t\t\t\t<div class=\"sd-bar\"><div class=\"sd-bar-label\">Stack Risk<\/div><div class=\"sd-track\"><i id=\"sd-bar-stack\"><\/i><\/div><div class=\"sd-bar-value\" id=\"sd-val-stack\">0\/100<\/div><\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"sd-score-notes\" class=\"sd-score-notes\">\n\t\t\t\t\t\t<div class=\"sd-score-note\"><b>Run a scan<\/b><div>After the scan, each score will explain what it measures, what low numbers usually lead to and what that means for a normal business owner.<\/div><\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div id=\"sd-owner-summary\" class=\"sd-owner-summary\">\n\t\t\t\t\t\t<h3>Plain-English Diagnostic<\/h3>\n\t\t\t\t\t\t<p>Run a scan to get a non-technical explanation of what is hurting this site and why it matters.<\/p>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"sd-watch\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<h3>SiteDoctor Watch<\/h3>\n\t\t\t\t\t\t\t<p>Free for one site. Monitors uptime, latency, title\/meta drift, noindex incidents, SPF\/DMARC changes, SSL expiry and visible lead-capture breakage. Multi-site plans can be sold later for a low yearly fee.<\/p>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"sd-watch-boxes\">\n\t\t\t\t\t\t\t<div class=\"sd-watch-box\"><b>Free<\/b><span>1 monitored site, uptime + health diff.<\/span><\/div>\n\t\t\t\t\t\t\t<div class=\"sd-watch-box\"><b>Paid<\/b><span>Multi-site watch, email alerts and incident history.<\/span><\/div>\n\t\t\t\t\t\t\t<div class=\"sd-watch-box\"><b>Alerts<\/b><span>Down, slow, noindex, broken form, DNS drift and SSL risk.<\/span><\/div>\n\t\t\t\t\t\t\t<div class=\"sd-watch-box\"><b>Fix<\/b><span>Each incident translated into what changed and how to recover.<\/span><\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\n\t\t\t\t<div class=\"sd-panel\">\n\t\t\t\t\t<div class=\"sd-label\" style=\"margin-bottom:14px\">X-Ray Leak Map<\/div>\n\t\t\t\t\t<div class=\"sd-xray-wrap\">\n\t\t\t\t\t\t<div class=\"sd-preview\" id=\"sd-preview-box\">\n\t\t\t\t\t\t\t<div class=\"sd-preview-fallback\" id=\"sd-preview-fallback\">\n\t\t\t\t\t\t\t\t<div class=\"sd-wire\">\n\t\t\t\t\t\t\t\t\t<div class=\"sd-label\" style=\"margin-bottom:12px;\">X-Ray Leak Map<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"sd-wire-box\" style=\"height:120px\"><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"sd-wire-box\"><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"sd-wire-box\"><\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"sd-wire-box\" style=\"height:160px\"><\/div>\n\t\t\t\t\t\t\t\t\t<div style=\"font-size:14px;line-height:1.6;color:#d8ebff;margin-top:16px\">Best-effort screenshot preview appears here after scan. If a remote preview is unavailable, the X-Ray markers still map the most likely leak zones.<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"sd-issues\">\n\t\t\t\t\t\t\t<h3>X-Ray Findings in Plain English<\/h3>\n\t\t\t\t\t\t\t<div class=\"sd-issue-list\" id=\"sd-issue-list\">\n\t\t\t\t\t\t\t\t<div class=\"sd-issue\"><strong>Run a scan<\/strong><p>Markers and issues will appear here after the site is analyzed.<\/p><div class=\"sd-issue-meta\"><b>Why this matters:<\/b> The goal is to make every problem understandable even for a non-technical site owner.<\/div><\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t<div class=\"sd-two\">\n\t\t\t\t\t\t<div class=\"sd-section\">\n\t\t\t\t\t\t\t<h3>Infrastructure & Deliverability<\/h3>\n\t\t\t\t\t\t\t<ul class=\"sd-list\" id=\"sd-list-infra\"><\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<div class=\"sd-section\">\n\t\t\t\t\t\t\t<h3>Content, AI & Stack<\/h3>\n\t\t\t\t\t\t\t<ul class=\"sd-list\" id=\"sd-list-content\"><\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t<script>\n\t\t(function(){\n\t\t\tconst ajaxUrl = \"https:\\\/\\\/sitedoctor.gh-fs.com\\\/wp-admin\\\/admin-ajax.php\";\n\t\t\tconst nonce = \"df53e7797d\";\n\t\t\tconst btn = document.getElementById('sd-run');\n\t\t\tconst input = document.getElementById('sd-domain');\n\t\t\tconst statusBox = document.getElementById('sd-status');\n\t\t\tconst previewBox = document.getElementById('sd-preview-box');\n\t\t\tconst fallbackBox = document.getElementById('sd-preview-fallback');\n\t\t\tconst issueList = document.getElementById('sd-issue-list');\n\t\t\tconst fixGrid = document.getElementById('sd-fix-grid');\n\t\t\tconst fixToggle = document.getElementById('sd-fix-toggle');\n\t\t\tconst fixPack = document.getElementById('sd-fix-pack');\n\t\t\tconst badgesBox = document.getElementById('sd-badges');\n\t\t\tconst scoreNotesBox = document.getElementById('sd-score-notes');\n\t\t\tconst ownerSummaryBox = document.getElementById('sd-owner-summary');\n\t\t\tconst infraList = document.getElementById('sd-list-infra');\n\t\t\tconst contentList = document.getElementById('sd-list-content');\n\t\t\tconst radarCanvas = document.getElementById('sd-radar');\n\t\t\tconst pulseCanvas = document.getElementById('sd-pulse');\n\t\t\tconst currentMs = document.getElementById('sd-current-ms');\n\t\t\tconst pingList = document.getElementById('sd-ping-list');\n\t\t\tconst statCurrent = document.getElementById('sd-stat-current');\n\t\t\tconst statMin = document.getElementById('sd-stat-min');\n\t\t\tconst statAvg = document.getElementById('sd-stat-avg');\n\t\t\tconst statMax = document.getElementById('sd-stat-max');\n\t\t\tconst outputWord = document.getElementById('sd-output-word');\n\n\t\t\tlet lastReport = null;\n\t\t\tlet pingHistory = [];\n\t\t\tlet pingTimer = null;\n\t\t\tlet radarState = {response:0, trust:0, mail:0, index:0, points:[]};\n\t\t\tlet sweepAngle = 0;\n\n\t\t\tfunction esc(str){\n\t\t\t\treturn String(str || '')\n\t\t\t\t\t.replace(\/&\/g, '&amp;')\n\t\t\t\t\t.replace(\/<\/g, '&lt;')\n\t\t\t\t\t.replace(\/>\/g, '&gt;')\n\t\t\t\t\t.replace(\/\"\/g, '&quot;')\n\t\t\t\t\t.replace(\/'\/g, '&#039;');\n\t\t\t}\n\n\t\t\tfunction setBar(id, valId, value){\n\t\t\t\tconst bar = document.getElementById(id);\n\t\t\t\tconst val = document.getElementById(valId);\n\t\t\t\tif (bar) bar.style.width = Math.max(0, Math.min(100, value)) + '%';\n\t\t\t\tif (val) val.textContent = value + '\/100';\n\t\t\t}\n\n\t\t\tfunction renderBadges(report){\n\t\t\t\tbadgesBox.innerHTML = [\n\t\t\t\t\t'Site: ' + report.domain,\n\t\t\t\t\t'IP: ' + (report.ip || 'Not found'),\n\t\t\t\t\t'Build: ' + report.build_type,\n\t\t\t\t\t'Risk: ' + report.grade,\n\t\t\t\t\t'WHOIS: ' + (report.whois_status || 'Unavailable')\n\t\t\t\t].map(t => `<div class=\"sd-chip\">${esc(t)}<\/div>`).join('');\n\t\t\t}\n\n\t\t\tfunction renderIssues(report){\n\t\t\t\tissueList.innerHTML = (report.leak_map || []).map((item, index) => `\n\t\t\t\t\t<div class=\"sd-issue\">\n\t\t\t\t\t\t<strong>${index + 1}. ${esc(item.title)}<\/strong>\n\t\t\t\t\t\t<p>${esc(item.detail)}<\/p>\n\t\t\t\t\t\t${item.impact ? `<div class=\"sd-issue-meta\"><b>What this can cause:<\/b> ${esc(item.impact)}<\/div>` : ''}\n\t\t\t\t\t\t${item.why_owner_cares ? `<div class=\"sd-issue-meta\"><b>Why a normal site owner should care:<\/b> ${esc(item.why_owner_cares)}<\/div>` : ''}\n\t\t\t\t\t<\/div>\n\t\t\t\t`).join('');\n\t\t\t}\n\n\t\t\tfunction renderLists(report){\n\t\t\t\tinfraList.innerHTML = (report.sections.infra || []).map(i => `<li>${esc(i)}<\/li>`).join('');\n\t\t\t\tcontentList.innerHTML = (report.sections.content || []).map(i => `<li>${esc(i)}<\/li>`).join('');\n\t\t\t}\n\n\t\t\tfunction renderScoreNotes(report){\n\t\t\t\tconst order = ['performance','revenue','trust','ai','stack'];\n\t\t\t\tscoreNotesBox.innerHTML = order.map(key => {\n\t\t\t\t\tconst item = (report.score_notes || {})[key];\n\t\t\t\t\tif (!item) return '';\n\t\t\t\t\treturn `\n\t\t\t\t\t\t<div class=\"sd-score-note\">\n\t\t\t\t\t\t\t<b>${esc(item.title)} \u2014 ${esc(item.score + '\/100')}<\/b>\n\t\t\t\t\t\t\t<div>${esc(item.summary)}<\/div>\n\t\t\t\t\t\t\t<div class=\"sd-issue-meta\"><b>What low numbers usually lead to:<\/b> ${esc(item.effect)}<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t`;\n\t\t\t\t}).join('');\n\t\t\t}\n\n\t\t\tfunction renderOwnerSummary(report){\n\t\t\t\tconst lines = report.owner_summary || [];\n\t\t\t\townerSummaryBox.innerHTML = '<h3>Plain-English Diagnostic<\/h3>' + lines.map(line => `<p>${esc(line)}<\/p>`).join('');\n\t\t\t}\n\n\t\t\tfunction renderFixPack(report){\n\t\t\t\tfixGrid.innerHTML = (report.fix_pack || []).map(item => `\n\t\t\t\t\t<div class=\"sd-fix-item\">\n\t\t\t\t\t\t<b>${esc(item.title)}<\/b>\n\t\t\t\t\t\t<div>${esc(item.value)}<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t`).join('');\n\t\t\t}\n\n\t\t\tfunction clearMarkers(){\n\t\t\t\tpreviewBox.querySelectorAll('.sd-marker, .sd-preview-image').forEach(el => el.remove());\n\t\t\t}\n\n\t\t\tfunction renderPreview(report){\n\t\t\t\tclearMarkers();\n\t\t\t\tfallbackBox.classList.add('sd-hidden');\n\t\t\t\tif (report.screenshot_url) {\n\t\t\t\t\tconst img = document.createElement('img');\n\t\t\t\t\timg.className = 'sd-preview-image';\n\t\t\t\t\timg.alt = 'Website preview';\n\t\t\t\t\timg.src = report.screenshot_url;\n\t\t\t\t\timg.onerror = function(){\n\t\t\t\t\t\timg.remove();\n\t\t\t\t\t\tfallbackBox.classList.remove('sd-hidden');\n\t\t\t\t\t\trenderMarkers(report.leak_map || []);\n\t\t\t\t\t};\n\t\t\t\t\tpreviewBox.prepend(img);\n\t\t\t\t\tsetTimeout(() => renderMarkers(report.leak_map || []), 120);\n\t\t\t\t} else {\n\t\t\t\t\tfallbackBox.classList.remove('sd-hidden');\n\t\t\t\t\trenderMarkers(report.leak_map || []);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction renderMarkers(items){\n\t\t\t\t(items || []).forEach((item, index) => {\n\t\t\t\t\tconst marker = document.createElement('div');\n\t\t\t\t\tmarker.className = 'sd-marker';\n\t\t\t\t\tmarker.textContent = String(index + 1);\n\t\t\t\t\tmarker.style.left = (item.x || 50) + '%';\n\t\t\t\t\tmarker.style.top = (item.y || 50) + '%';\n\t\t\t\t\tmarker.title = item.title || '';\n\t\t\t\t\tpreviewBox.appendChild(marker);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tfunction scoreToWord(score){\n\t\t\t\tif (score >= 85) return 'Strong';\n\t\t\t\tif (score >= 70) return 'Sharp';\n\t\t\t\tif (score >= 55) return 'Average';\n\t\t\t\treturn 'Fragile';\n\t\t\t}\n\n\t\t\tfunction updatePulseStats(){\n\t\t\t\tif (!pingHistory.length) return;\n\t\t\t\tconst current = pingHistory[pingHistory.length - 1];\n\t\t\t\tconst min = Math.min(...pingHistory);\n\t\t\t\tconst max = Math.max(...pingHistory);\n\t\t\t\tconst avg = Math.round(pingHistory.reduce((a,b)=>a+b,0) \/ pingHistory.length);\n\t\t\t\tstatCurrent.textContent = current + ' ms';\n\t\t\t\tstatMin.textContent = min + ' ms';\n\t\t\t\tstatAvg.textContent = avg + ' ms';\n\t\t\t\tstatMax.textContent = max + ' ms';\n\t\t\t\tcurrentMs.textContent = current + ' ms';\n\t\t\t\tpingList.innerHTML = pingHistory.slice(-12).map(v => `<span>${esc(v + ' ms')}<\/span>`).join('');\n\t\t\t\tdrawPulse();\n\t\t\t}\n\n\t\t\tfunction drawPulse(){\n\t\t\t\tconst ctx = pulseCanvas.getContext('2d');\n\t\t\t\tconst w = pulseCanvas.width;\n\t\t\t\tconst h = pulseCanvas.height;\n\t\t\t\tctx.clearRect(0,0,w,h);\n\t\t\t\tctx.fillStyle = 'rgba(255,255,255,0.02)';\n\t\t\t\tctx.fillRect(0,0,w,h);\n\t\t\t\tctx.strokeStyle = 'rgba(124,172,255,0.18)';\n\t\t\t\tctx.lineWidth = 1;\n\t\t\t\tfor (let i=1;i<4;i++) {\n\t\t\t\t\tconst y = (h\/4)*i;\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(0,y);\n\t\t\t\t\tctx.lineTo(w,y);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t\tif (!pingHistory.length) return;\n\t\t\t\tconst max = Math.max(...pingHistory, 400);\n\t\t\t\tconst min = Math.min(...pingHistory, 0);\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.lineWidth = 4;\n\t\t\t\tctx.strokeStyle = '#6ed0ff';\n\t\t\t\tpingHistory.forEach((val, idx) => {\n\t\t\t\t\tconst x = (w \/ Math.max(1, pingHistory.length - 1)) * idx;\n\t\t\t\t\tconst norm = (val - min) \/ Math.max(1, max - min);\n\t\t\t\t\tconst y = h - 22 - norm * (h - 44);\n\t\t\t\t\tif (idx === 0) ctx.moveTo(x, y); else ctx.lineTo(x, y);\n\t\t\t\t});\n\t\t\t\tctx.stroke();\n\t\t\t}\n\n\t\t\tfunction radarPointsFromReport(report){\n\t\t\t\treturn [\n\t\t\t\t\t{zone:'response', severity:100 - report.scores.performance},\n\t\t\t\t\t{zone:'trust', severity:100 - report.scores.trust},\n\t\t\t\t\t{zone:'mail', severity:report.mail_risk},\n\t\t\t\t\t{zone:'index', severity:100 - report.scores.ai}\n\t\t\t\t];\n\t\t\t}\n\n\t\t\tfunction drawRadar(){\n\t\t\t\tconst ctx = radarCanvas.getContext('2d');\n\t\t\t\tconst w = radarCanvas.width;\n\t\t\t\tconst h = radarCanvas.height;\n\t\t\t\tconst cx = w \/ 2;\n\t\t\t\tconst cy = h \/ 2;\n\t\t\t\tconst r = Math.min(w,h) * 0.38;\n\t\t\t\tctx.clearRect(0,0,w,h);\n\t\t\t\tctx.fillStyle = 'rgba(0,0,0,0)';\n\t\t\t\tctx.fillRect(0,0,w,h);\n\n\t\t\t\tctx.strokeStyle = 'rgba(105,183,255,0.2)';\n\t\t\t\tctx.lineWidth = 2;\n\t\t\t\t[1,.75,.5,.25].forEach(scale => {\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.arc(cx, cy, r * scale, 0, Math.PI * 2);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t});\n\t\t\t\tctx.beginPath(); ctx.moveTo(cx-r, cy); ctx.lineTo(cx+r, cy); ctx.stroke();\n\t\t\t\tctx.beginPath(); ctx.moveTo(cx, cy-r); ctx.lineTo(cx, cy+r); ctx.stroke();\n\n\t\t\t\tconst grad = ctx.createRadialGradient(cx,cy,10,cx,cy,r);\n\t\t\t\tgrad.addColorStop(0,'rgba(132,174,255,0.18)');\n\t\t\t\tgrad.addColorStop(1,'rgba(3,12,25,0)');\n\t\t\t\tctx.fillStyle = grad;\n\t\t\t\tctx.beginPath(); ctx.arc(cx, cy, r, 0, Math.PI * 2); ctx.fill();\n\n\t\t\t\tconst sweep = sweepAngle;\n\t\t\t\tconst sweepGrad = ctx.createRadialGradient(cx,cy,0,cx,cy,r);\n\t\t\t\tsweepGrad.addColorStop(0,'rgba(110,225,255,0.0)');\n\t\t\t\tsweepGrad.addColorStop(1,'rgba(110,225,255,0.0)');\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(cx, cy);\n\t\t\t\tctx.arc(cx, cy, r, sweep - 0.18, sweep + 0.18);\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.fillStyle = 'rgba(102,248,255,0.08)';\n\t\t\t\tctx.fill();\n\t\t\t\tctx.strokeStyle = 'rgba(107,237,255,0.7)';\n\t\t\t\tctx.lineWidth = 3;\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(cx, cy);\n\t\t\t\tctx.lineTo(cx + Math.cos(sweep) * r, cy + Math.sin(sweep) * r);\n\t\t\t\tctx.stroke();\n\n\t\t\t\tconst labelCfg = [\n\t\t\t\t\t{t:'RESPONSE', a:-Math.PI\/2, x:0, y:-r-32},\n\t\t\t\t\t{t:'TRUST', a:0, x:r+34, y:0},\n\t\t\t\t\t{t:'MAIL', a:Math.PI\/2, x:0, y:r+38},\n\t\t\t\t\t{t:'INDEX', a:Math.PI, x:-r-34, y:0}\n\t\t\t\t];\n\t\t\t\tctx.font = '700 18px Inter, sans-serif';\n\t\t\t\tctx.fillStyle = '#e9f6ff';\n\t\t\t\tlabelCfg.forEach(l => {\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\tctx.fillText(l.t, cx + l.x, cy + l.y);\n\t\t\t\t\tctx.restore();\n\t\t\t\t});\n\n\t\t\t\t(radarState.points || []).forEach((point, idx) => {\n\t\t\t\t\tconst zoneAngles = {response:-Math.PI\/2, trust:0, mail:Math.PI\/2, index:Math.PI};\n\t\t\t\t\tconst a = zoneAngles[point.zone] || 0;\n\t\t\t\t\tconst dist = r * (0.35 + (Math.min(100, point.severity) \/ 100) * 0.55);\n\t\t\t\t\tconst x = cx + Math.cos(a) * dist;\n\t\t\t\t\tconst y = cy + Math.sin(a) * dist;\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.fillStyle = point.severity > 65 ? 'rgba(255,106,146,0.95)' : 'rgba(255,208,92,0.9)';\n\t\t\t\t\tctx.shadowBlur = 18;\n\t\t\t\t\tctx.shadowColor = point.severity > 65 ? 'rgba(255,106,146,0.7)' : 'rgba(255,208,92,0.7)';\n\t\t\t\t\tctx.arc(x, y, point.severity > 65 ? 10 : 7, 0, Math.PI * 2);\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tctx.shadowBlur = 0;\n\t\t\t\t\tctx.font = '700 11px Inter, sans-serif';\n\t\t\t\t\tctx.fillStyle = '#fff';\n\t\t\t\t\tctx.textAlign = 'center';\n\t\t\t\t\tctx.fillText(String(idx + 1), x, y + 4);\n\t\t\t\t});\n\n\t\t\t\tsweepAngle += 0.02;\n\t\t\t\trequestAnimationFrame(drawRadar);\n\t\t\t}\n\n\t\t\tfunction startPings(domain){\n\t\t\t\tstopPings();\n\t\t\t\tpingHistory = [];\n\t\t\t\tupdatePulseStats();\n\n\t\t\t\tasync function pingOnce(){\n\t\t\t\t\tif (!domain) return;\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst fd = new FormData();\n\t\t\t\t\t\tfd.append('action', 'site_doctor_ping');\n\t\t\t\t\t\tfd.append('nonce', nonce);\n\t\t\t\t\t\tfd.append('domain', domain);\n\t\t\t\t\t\tconst res = await fetch(ajaxUrl, {method:'POST', body:fd, credentials:'same-origin'});\n\t\t\t\t\t\tconst json = await res.json();\n\t\t\t\t\t\tif (json.success && json.data && json.data.ms) {\n\t\t\t\t\t\t\tpingHistory.push(Number(json.data.ms));\n\t\t\t\t\t\t\tif (pingHistory.length > 20) pingHistory.shift();\n\t\t\t\t\t\t\tupdatePulseStats();\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (e) {}\n\t\t\t\t}\n\n\t\t\t\tpingOnce();\n\t\t\t\tpingTimer = setInterval(pingOnce, 4000);\n\t\t\t}\n\n\t\t\tfunction stopPings(){\n\t\t\t\tif (pingTimer) clearInterval(pingTimer);\n\t\t\t\tpingTimer = null;\n\t\t\t}\n\n\t\t\tfunction renderReport(report){\n\t\t\t\tlastReport = report;\n\t\t\t\toutputWord.textContent = scoreToWord(report.total_score);\n\t\t\t\trenderBadges(report);\n\t\t\t\trenderIssues(report);\n\t\t\t\trenderLists(report);\n\t\t\t\trenderScoreNotes(report);\n\t\t\t\trenderOwnerSummary(report);\n\t\t\t\trenderFixPack(report);\n\t\t\t\trenderPreview(report);\n\t\t\t\tsetBar('sd-bar-performance', 'sd-val-performance', report.scores.performance);\n\t\t\t\tsetBar('sd-bar-revenue', 'sd-val-revenue', report.scores.revenue);\n\t\t\t\tsetBar('sd-bar-trust', 'sd-val-trust', report.scores.trust);\n\t\t\t\tsetBar('sd-bar-ai', 'sd-val-ai', report.scores.ai);\n\t\t\t\tsetBar('sd-bar-stack', 'sd-val-stack', report.scores.stack);\n\t\t\t\tradarState = {\n\t\t\t\t\tresponse: report.scores.performance,\n\t\t\t\t\ttrust: report.scores.trust,\n\t\t\t\t\tmail: 100 - report.mail_risk,\n\t\t\t\t\tindex: report.scores.ai,\n\t\t\t\t\tpoints: radarPointsFromReport(report)\n\t\t\t\t};\n\t\t\t\tstartPings(report.domain);\n\t\t\t}\n\n\t\t\tasync function run(){\n\t\t\t\tconst domain = input.value.trim();\n\t\t\t\tif (!domain) {\n\t\t\t\t\tstatusBox.textContent = 'Please enter a valid domain.';\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tbtn.disabled = true;\n\t\t\t\tstatusBox.textContent = 'Scanning website and building live diagnostics...';\n\n\t\t\t\ttry {\n\t\t\t\t\tconst fd = new FormData();\n\t\t\t\t\tfd.append('action', 'site_doctor_analyze');\n\t\t\t\t\tfd.append('nonce', nonce);\n\t\t\t\t\tfd.append('domain', domain);\n\n\t\t\t\t\tconst res = await fetch(ajaxUrl, {method:'POST', body:fd, credentials:'same-origin'});\n\t\t\t\t\tconst json = await res.json();\n\t\t\t\t\tif (!json.success) throw new Error((json.data && json.data.message) ? json.data.message : 'Scan failed.');\n\t\t\t\t\trenderReport(json.data);\n\t\t\t\t\tstatusBox.textContent = 'Scan completed.';\n\t\t\t\t} catch (err) {\n\t\t\t\t\tstatusBox.textContent = err.message || 'An unexpected error occurred.';\n\t\t\t\t} finally {\n\t\t\t\t\tbtn.disabled = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (fixToggle && fixPack) {\n\t\t\t\tfixToggle.addEventListener('click', function(){\n\t\t\t\t\tfixPack.classList.toggle('show');\n\t\t\t\t});\n\t\t\t}\n\t\t\tbtn.addEventListener('click', run);\n\t\t\tinput.addEventListener('keydown', function(e){ if (e.key === 'Enter') run(); });\n\t\t\tdrawRadar();\n\t\t\tdrawPulse();\n\t\t})();\n\t\t<\/script>\n\t<\/div>\n\t\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6","page","type-page","status-publish","hentry"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/sitedoctor.gh-fs.com\/index.php?rest_route=\/wp\/v2\/pages\/6","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sitedoctor.gh-fs.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sitedoctor.gh-fs.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sitedoctor.gh-fs.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sitedoctor.gh-fs.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6"}],"version-history":[{"count":1,"href":"https:\/\/sitedoctor.gh-fs.com\/index.php?rest_route=\/wp\/v2\/pages\/6\/revisions"}],"predecessor-version":[{"id":11,"href":"https:\/\/sitedoctor.gh-fs.com\/index.php?rest_route=\/wp\/v2\/pages\/6\/revisions\/11"}],"wp:attachment":[{"href":"https:\/\/sitedoctor.gh-fs.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}