{"id":1074,"date":"2026-06-03T22:17:52","date_gmt":"2026-06-03T22:17:52","guid":{"rendered":"https:\/\/360bizbrokers.com\/?page_id=1074"},"modified":"2026-06-04T14:34:29","modified_gmt":"2026-06-04T14:34:29","slug":"sellers-prospect-sourcing","status":"publish","type":"page","link":"https:\/\/360bizbrokers.com\/pt\/sellers-prospect-sourcing\/","title":{"rendered":"Sellers&#8217; Prospect Sourcing"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1074\" class=\"elementor elementor-1074\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a47b919 e-flex e-con-boxed e-con e-parent\" data-id=\"a47b919\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-91f001c elementor-widget elementor-widget-html\" data-id=\"91f001c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n<title>AI Assisted Deal Sourcing V22 \u2014 Deal Origination Command Center<\/title>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Anton&family=Lato:ital,wght@0,400;0,700;0,900;1,400;1,700&display=swap\" rel=\"stylesheet\">\n<style>\n*{box-sizing:border-box;margin:0;padding:0}\n:root{--G:#B8960C;--G2:#C9A84C;--Gbg:#f5eed5;--B:#111;--W:#fff;--bg:#f0ede6;--card:#fff;--card2:#f7f5f0;--txt:#1a1a18;--txt2:#5a5a55;--txt3:#9a9a95;--bdr:rgba(0,0,0,.09);--bdrm:rgba(0,0,0,.16);--green:#2d7a4f;--red:#b33a2f;--blue:#185FA5;--amber:#8a5a00;--r:9px;--rl:14px;--fH:'Anton',Impact,sans-serif;--fB:'Lato',Arial,sans-serif}\nbody{font-family:var(--fB);background:var(--bg);color:var(--txt);font-size:14px;line-height:1.55;min-height:100vh}\n.wrap{max-width:1240px;margin:0 auto;padding:18px 14px 60px}\n.topbar{background:var(--B);border-radius:var(--rl);padding:14px 18px;display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px}\n.brand h1{font:900 24px var(--fH);color:var(--G2);letter-spacing:.04em;text-transform:uppercase;line-height:1}\n.brand p{color:rgba(255,255,255,.62);font-size:12px;letter-spacing:.08em;text-transform:uppercase;margin-top:4px}\n.badge{background:rgba(201,168,76,.15);border:1px solid rgba(201,168,76,.45);color:var(--G2);border-radius:999px;padding:6px 12px;font-weight:900;font-size:11px;text-transform:uppercase;letter-spacing:.06em}\n.nav{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}\n.tab{border:1px solid var(--bdrm);background:#fff;border-radius:999px;padding:8px 13px;font-weight:900;font-size:12px;cursor:pointer}\n.tab.active{background:var(--B);color:var(--G2);border-color:var(--G2)}\n.grid{display:grid;grid-template-columns:360px 1fr;gap:16px}\n.card{background:var(--card);border:1px solid var(--bdr);border-radius:var(--rl);padding:18px;margin-bottom:16px;box-shadow:0 8px 22px rgba(0,0,0,.04)}\n.card h2{font:900 18px var(--fH);text-transform:uppercase;letter-spacing:.04em;margin-bottom:8px}\n.card h3{font-size:14px;text-transform:uppercase;letter-spacing:.06em;color:#654d00;border-bottom:2px solid var(--G2);padding-bottom:6px;margin:16px 0 10px}\n.help{background:var(--Gbg);border-left:4px solid var(--G2);padding:11px 13px;border-radius:0 var(--r) var(--r) 0;color:var(--txt2);font-size:13px;margin-bottom:14px}\n.notice{background:#fff8e6;border:1px solid var(--G2);border-radius:var(--r);padding:10px 12px;color:#6c4b00;font-weight:700;font-size:12px;margin-bottom:12px}\n.field{margin-bottom:11px}\n.field label{display:block;font-weight:900;font-size:12px;color:var(--txt2);margin-bottom:4px}\ninput,select,textarea{width:100%;border:1px solid var(--bdrm);border-radius:var(--r);padding:9px 10px;font:400 13px var(--fB);background:#fff;color:var(--txt)}\ntextarea{min-height:86px;resize:vertical}\n.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}\n.three{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}\n.actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}\nbutton{border:0;border-radius:var(--r);padding:10px 15px;font-weight:900;cursor:pointer;font-family:var(--fB)}\n.primary{background:var(--B);color:var(--G2);border:2px solid var(--G2)}\n.secondary{background:var(--Gbg);color:var(--B);border:1px solid var(--G2)}\n.light{background:#fff;color:var(--B);border:1px solid var(--bdrm)}\n.danger{background:#fff0ee;color:var(--red);border:1px solid #e0aaa3}\n.prospect-list{display:grid;gap:8px}\n.prospect{border:1px solid var(--bdr);border-radius:var(--r);padding:11px;background:#fff;cursor:pointer}\n.prospect.active{border:2px solid var(--G2);background:var(--Gbg)}\n.prospect b{display:block}.prospect small{color:var(--txt3)}\n.pill{display:inline-block;border-radius:999px;padding:5px 10px;font-weight:900;font-size:11px;margin:2px;background:var(--Gbg);color:#654d00}\n.pill.green{background:#e4f4e9;color:var(--green)}.pill.red{background:#fff0ee;color:var(--red)}.pill.blue{background:#e6f1fb;color:#0c447c}.pill.amber{background:#fff3d5;color:#7a5100}\n.output{background:var(--card2);border-radius:var(--r);padding:14px;white-space:pre-wrap;line-height:1.55;font-size:13px;border-left:4px solid var(--G2)}\n.outgrid{display:grid;grid-template-columns:1fr;gap:10px}\n.langs{display:flex;gap:7px;margin-bottom:10px;flex-wrap:wrap}\n.lang{padding:6px 11px;border-radius:999px;border:1px solid var(--bdrm);background:#fff;cursor:pointer;font-weight:900;font-size:11px}\n.lang.active{background:var(--B);color:var(--G2);border-color:var(--G2)}\n.metric-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}\n.metric{background:var(--card2);border-radius:var(--r);padding:13px;text-align:center}\n.metric span{display:block;color:var(--txt3);font-size:10px;text-transform:uppercase;font-weight:900;letter-spacing:.06em}\n.metric b{display:block;font-size:26px;margin-top:4px}\n.scorebox{background:var(--B);border-radius:var(--rl);padding:18px;color:#fff;display:flex;justify-content:space-between;align-items:center;gap:20px;margin-bottom:14px}\n.scorebox .score{font:900 54px var(--fH);color:var(--G2);line-height:1}\n.q{display:grid;grid-template-columns:1fr 150px;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--bdr)}\n.q:last-child{border-bottom:0}.q p{font-weight:700;font-size:13px;line-height:1.35}.q small{display:block;color:var(--txt3);font-weight:400;margin-top:2px}\n.stage{display:flex;gap:6px;flex-wrap:wrap}.stage button{padding:7px 9px;font-size:11px}\n.history{display:grid;gap:8px}.hist{background:#fff;border:1px solid var(--bdr);border-radius:var(--r);padding:10px}\n.report{background:#fff;border-radius:var(--rl);padding:24px;border:1px solid var(--bdr)}\n.report h2{font:900 24px var(--fH);color:#111;text-transform:uppercase;border-bottom:4px solid var(--G2);padding-bottom:8px;margin-bottom:14px}\n.hide{display:none}\n@media(max-width:900px){.grid{grid-template-columns:1fr}.metric-grid{grid-template-columns:1fr 1fr}.two,.three{grid-template-columns:1fr}.q{grid-template-columns:1fr}.scorebox{display:block}.scorebox .score{margin-top:10px}}\n@media print{body{background:#fff}.topbar,.nav,.leftcol,.actions,.langs,.notice{display:none!important}.wrap{max-width:none;padding:0}.grid{display:block}.card{box-shadow:none;border:none}.report{border:none;padding:0}}\n\n.kanban{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:12px}\n.kanban-col{background:var(--card2);border:1px solid var(--bdr);border-radius:var(--r);padding:10px;min-height:120px}\n.kanban-col h4{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--txt2);margin-bottom:8px}\n.kcard{background:#fff;border:1px solid var(--bdr);border-radius:8px;padding:9px;margin-bottom:8px;cursor:pointer}\n.kcard b{display:block;font-size:13px}\n.kcard small{color:var(--txt3)}\n.queue{display:grid;gap:8px;margin-top:10px}\n.queue-item{display:grid;grid-template-columns:52px 1fr auto;gap:10px;align-items:center;background:#fff;border:1px solid var(--bdr);border-radius:var(--r);padding:10px}\n.priority-score{width:42px;height:42px;border-radius:50%;background:var(--B);color:var(--G2);display:flex;align-items:center;justify-content:center;font-weight:900}\n.alert-row{display:grid;gap:8px;margin-top:10px}\n.alert{border-left:4px solid var(--G2);background:#fff8e6;border-radius:0 var(--r) var(--r) 0;padding:10px}\n.quick-actions{display:flex;gap:6px;flex-wrap:wrap}\n.quick-actions button{padding:6px 9px;font-size:11px}\n@media(max-width:900px){.kanban{grid-template-columns:1fr}.queue-item{grid-template-columns:1fr}.priority-score{width:auto;border-radius:999px;padding:7px 10px}}\n\n\n.copybar{display:flex;justify-content:flex-end;margin:6px 0}\n.copybtn{padding:5px 9px;font-size:10px;background:#fff;border:1px solid var(--bdrm);color:var(--txt2)}\n.copybtn:hover{background:var(--Gbg);color:var(--B)}\n.empty-state{background:#fff;border:1px dashed var(--bdrm);border-radius:var(--r);padding:16px;color:var(--txt3);text-align:center}\n.toolbar-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}\n.demo-note{font-size:11px;color:var(--txt3);margin-top:8px}\n.report-cover{background:var(--B);color:#fff;border-radius:var(--rl);padding:22px;margin-bottom:20px;border-bottom:5px solid var(--G2)}\n.report-cover h2{color:var(--G2)!important;border-bottom:0!important;margin-bottom:4px!important;padding-bottom:0!important}\n.report-meta-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin:14px 0}\n.report-meta-grid div{background:#fffdf7;border:1px solid var(--G2);border-radius:var(--r);padding:10px}\n.section-kicker{font-size:10px;font-weight:900;text-transform:uppercase;letter-spacing:.08em;color:var(--txt3);margin-bottom:2px}\n.status-good{color:var(--green);font-weight:900}\n.status-warn{color:var(--amber);font-weight:900}\n.status-risk{color:var(--red);font-weight:900}\n@media print{.copybar,.toolbar-row,.demo-note{display:none!important}.report-cover{background:#111!important;color:#fff!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}}\n\n\n.analytics-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:14px 0}\n.chart-card{background:var(--card2);border:1px solid var(--bdr);border-radius:var(--r);padding:14px}\n.chart-card h4{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--txt2);margin-bottom:10px}\n.bar-row{display:grid;grid-template-columns:140px 1fr 42px;gap:8px;align-items:center;margin:8px 0;font-size:12px}\n.bar-track{height:12px;background:#e9e4d7;border-radius:999px;overflow:hidden}\n.bar-fill{height:100%;background:var(--G2);border-radius:999px}\n.report-table{width:100%;border-collapse:collapse;background:#fff;border-radius:var(--r);overflow:hidden;margin-top:10px}\n.report-table th,.report-table td{border-bottom:1px solid var(--bdr);padding:9px 10px;text-align:left;font-size:12px}\n.report-table th{background:var(--B);color:var(--G2);text-transform:uppercase;letter-spacing:.05em;font-size:10px}\n.report-table tr:last-child td{border-bottom:0}\n.analytics-summary{background:#111;color:#fff;border-radius:var(--rl);padding:16px;margin-bottom:14px}\n.analytics-summary h3{color:var(--G2)!important;border-bottom:0!important;margin:0 0 8px!important;padding:0!important}\n.analytics-summary p{color:rgba(255,255,255,.78)}\n@media(max-width:900px){.analytics-grid{grid-template-columns:1fr}.bar-row{grid-template-columns:1fr}}\n\n\n.workflow-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n.task-card{background:#fff;border:1px solid var(--bdr);border-left:4px solid var(--G2);border-radius:0 var(--r) var(--r) 0;padding:12px;margin-bottom:8px}\n.task-card.high{border-left-color:var(--red)}\n.task-card.medium{border-left-color:var(--amber)}\n.task-card.low{border-left-color:var(--blue)}\n.task-card b{display:block;margin-bottom:4px}\n.task-meta{font-size:11px;color:var(--txt3);margin-bottom:6px}\n.task-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}\n.task-actions button{padding:5px 8px;font-size:10px}\n.workflow-rule{background:var(--card2);border:1px solid var(--bdr);border-radius:var(--r);padding:12px;margin-bottom:8px}\n.workflow-rule h4{font-size:12px;text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px;color:var(--txt2)}\n.automation-banner{background:linear-gradient(135deg,#111,#2a2206);color:#fff;border-radius:var(--rl);padding:16px;margin-bottom:14px;border-bottom:4px solid var(--G2)}\n.automation-banner h3{color:var(--G2)!important;border-bottom:0!important;margin:0 0 6px!important;padding:0!important}\n@media(max-width:900px){.workflow-grid{grid-template-columns:1fr}}\n\n\n.discovery-layout{display:grid;grid-template-columns:330px 1fr;gap:14px}\n.discovery-card{background:#fff;border:1px solid var(--bdr);border-radius:var(--r);padding:14px;margin-bottom:10px}\n.discovery-result{background:#fff;border:1px solid var(--bdr);border-radius:var(--r);padding:14px;margin-bottom:10px;display:grid;grid-template-columns:1fr auto;gap:12px}\n.discovery-result:hover{border-color:var(--G2);box-shadow:0 6px 18px rgba(0,0,0,.06)}\n.seller-score{width:70px;height:70px;border-radius:50%;background:var(--B);color:var(--G2);display:flex;align-items:center;justify-content:center;font:900 24px var(--fH)}\n.discovery-meta{display:flex;gap:6px;flex-wrap:wrap;margin:7px 0}\n.api-status{font-size:12px;border-radius:var(--r);padding:9px 11px;background:#fff8e6;border:1px solid var(--G2);color:#6c4b00;margin-top:10px}\n.discovery-actions{display:flex;gap:6px;flex-wrap:wrap;margin-top:10px}\n.discovery-actions button{padding:7px 10px;font-size:11px}\n.source-pill{display:inline-block;border-radius:999px;background:#e6f1fb;color:#0c447c;font-weight:900;font-size:10px;padding:4px 8px;margin-left:4px}\n@media(max-width:900px){.discovery-layout{grid-template-columns:1fr}.discovery-result{grid-template-columns:1fr}.seller-score{width:auto;border-radius:999px;padding:7px 12px}}\n\n\n.presentation-doc{background:#fff;border:1px solid var(--bdr);border-radius:var(--rl);padding:28px;max-width:900px;margin:auto}\n.pres-cover{background:#111;color:#fff;border-radius:var(--rl);padding:28px;margin-bottom:22px;border-bottom:6px solid var(--G2)}\n.pres-cover h1{font:900 32px var(--fH);color:var(--G2);text-transform:uppercase;letter-spacing:.04em;margin-bottom:8px}\n.pres-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:14px 0}\n.pres-box{background:var(--card2);border:1px solid var(--bdr);border-radius:var(--r);padding:14px}\n.pres-score{font:900 38px var(--fH);color:var(--G);line-height:1}\n.pres-section{margin-top:20px;padding-top:12px;border-top:2px solid var(--G2)}\n.pres-section h3{border-bottom:0!important;margin:0 0 8px!important;padding:0!important;color:#111!important}\n@media(max-width:900px){.pres-grid{grid-template-columns:1fr}}\n@media print{.presentation-doc{border:none;padding:0}.pres-cover{background:#111!important;color:#fff!important;-webkit-print-color-adjust:exact;print-color-adjust:exact}}\n\n\n.qa-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n.qa-item{background:#fff;border:1px solid var(--bdr);border-radius:var(--r);padding:12px;display:flex;gap:10px;align-items:flex-start}\n.qa-status{width:24px;height:24px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:900;flex-shrink:0}\n.qa-status.pass{background:#e4f4e9;color:var(--green)}\n.qa-status.warn{background:#fff3d5;color:var(--amber)}\n.release-box{background:var(--card2);border:1px solid var(--bdr);border-radius:var(--r);padding:14px;margin:10px 0}\n.release-box h4{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--txt2);margin-bottom:6px}\n.codebox{background:#111;color:#fff;border-radius:var(--r);padding:12px;font-family:monospace;font-size:12px;white-space:pre-wrap}\n@media(max-width:900px){.qa-grid{grid-template-columns:1fr}}\n\n.api-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n.api-card{background:#fff;border:1px solid var(--bdr);border-radius:var(--r);padding:14px;margin-bottom:10px}\n.api-card h4{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--txt2);margin-bottom:6px}\n.endpoint-test{background:#111;color:#fff;border-radius:var(--r);padding:12px;font-family:monospace;font-size:12px;white-space:pre-wrap;overflow:auto}\n.status-box{border-radius:var(--r);padding:12px;margin-top:10px;background:#fff8e6;border:1px solid var(--G2);color:#6c4b00}\n@media(max-width:900px){.api-grid{grid-template-columns:1fr}}\n\n.scanner-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n.scanner-card{background:#fff;border:1px solid var(--bdr);border-radius:var(--r);padding:14px;margin-bottom:10px}\n.scanner-rank{font:900 52px var(--fH);color:var(--G);line-height:1}\n.scanner-scorebox{background:#111;color:#fff;border-radius:var(--rl);padding:18px;display:grid;grid-template-columns:120px 1fr;gap:18px;align-items:center;margin-bottom:14px}\n.scanner-scorebox h3{color:var(--G2)!important;border-bottom:0!important;margin:0!important;padding:0!important}\n.scanner-list{display:grid;gap:8px}\n.scanner-item{background:#fff;border:1px solid var(--bdr);border-left:5px solid var(--G2);border-radius:0 var(--r) var(--r) 0;padding:12px;cursor:pointer}\n.scanner-item.aplus{border-left-color:#2d7a4f}.scanner-item.a{border-left-color:#5fa35f}.scanner-item.b{border-left-color:#c9a84c}.scanner-item.c{border-left-color:#b36b2f}.scanner-item.d{border-left-color:#b33a2f}\n.scanner-badge{display:inline-block;border-radius:999px;background:var(--Gbg);color:#654d00;font-weight:900;font-size:10px;padding:4px 8px;margin:2px}\n.scanner-badge.hot{background:#e4f4e9;color:var(--green)}.scanner-badge.warn{background:#fff3d5;color:var(--amber)}.scanner-badge.risk{background:#fff0ee;color:var(--red)}\n@media(max-width:900px){.scanner-grid{grid-template-columns:1fr}.scanner-scorebox{grid-template-columns:1fr}}\n\n\n.sequence-grid{display:grid;grid-template-columns:330px 1fr;gap:14px}\n.sequence-card{background:#fff;border:1px solid var(--bdr);border-radius:var(--r);padding:14px;margin-bottom:10px}\n.sequence-output{background:var(--card2);border-left:4px solid var(--G2);border-radius:0 var(--r) var(--r) 0;padding:14px;white-space:pre-wrap;margin-bottom:10px}\n.sequence-actions{display:flex;gap:6px;flex-wrap:wrap;margin:6px 0 12px}\n.sequence-actions button{padding:6px 9px;font-size:10px}\n.angle-pill{display:inline-block;border-radius:999px;background:#111;color:var(--G2);font-weight:900;font-size:10px;padding:5px 9px;margin:2px}\n@media(max-width:900px){.sequence-grid{grid-template-columns:1fr}}\n\n\n.succession-grid{display:grid;grid-template-columns:330px 1fr;gap:14px}\n.succession-card{background:#fff;border:1px solid var(--bdr);border-radius:var(--r);padding:14px;margin-bottom:10px}\n.persona-card{background:#111;color:#fff;border-radius:var(--rl);padding:18px;border-bottom:5px solid var(--G2);margin-bottom:14px}\n.persona-card h3{color:var(--G2)!important;border-bottom:0!important;margin:0 0 6px!important;padding:0!important}\n.persona-score{font:900 48px var(--fH);color:var(--G2);line-height:1}\n.intel-pill{display:inline-block;border-radius:999px;background:var(--Gbg);color:#654d00;font-weight:900;font-size:10px;padding:5px 9px;margin:2px}\n.intel-pill.hot{background:#e4f4e9;color:var(--green)}\n.intel-pill.risk{background:#fff0ee;color:var(--red)}\n.intel-pill.blue{background:#e6f1fb;color:#0c447c}\n.question-list{background:var(--card2);border-left:4px solid var(--G2);border-radius:0 var(--r) var(--r) 0;padding:14px;white-space:pre-wrap}\n@media(max-width:900px){.succession-grid{grid-template-columns:1fr}}\n\n\n.buyer-grid{display:grid;grid-template-columns:340px 1fr;gap:14px}\n.buyer-card{background:#fff;border:1px solid var(--bdr);border-radius:var(--r);padding:14px;margin-bottom:10px}\n.match-card{background:#fff;border:1px solid var(--bdr);border-left:5px solid var(--G2);border-radius:0 var(--r) var(--r) 0;padding:13px;margin-bottom:10px}\n.match-score{font:900 34px var(--fH);color:var(--G);line-height:1}\n.match-pill{display:inline-block;border-radius:999px;background:var(--Gbg);color:#654d00;font-weight:900;font-size:10px;padding:5px 9px;margin:2px}\n.match-pill.hot{background:#e4f4e9;color:var(--green)}\n.match-pill.blue{background:#e6f1fb;color:#0c447c}\n.match-pill.risk{background:#fff0ee;color:var(--red)}\n@media(max-width:900px){.buyer-grid{grid-template-columns:1fr}}\n\n\n.rollup-grid{display:grid;grid-template-columns:340px 1fr;gap:14px}\n.rollup-card{background:#fff;border:1px solid var(--bdr);border-radius:var(--r);padding:14px;margin-bottom:10px}\n.cluster-card{background:#fff;border:1px solid var(--bdr);border-left:5px solid var(--G2);border-radius:0 var(--r) var(--r) 0;padding:13px;margin-bottom:10px}\n.cluster-score{font:900 34px var(--fH);color:var(--G);line-height:1}\n.rollup-pill{display:inline-block;border-radius:999px;background:var(--Gbg);color:#654d00;font-weight:900;font-size:10px;padding:5px 9px;margin:2px}\n.rollup-pill.hot{background:#e4f4e9;color:var(--green)}\n.rollup-pill.blue{background:#e6f1fb;color:#0c447c}\n.rollup-pill.risk{background:#fff0ee;color:var(--red)}\n@media(max-width:900px){.rollup-grid{grid-template-columns:1fr}}\n\n<\/style>\n<\/head>\n<body>\n<div id=\"dealOriginationCommandCenter\" style=\"padding:20px;border:2px solid #c9a84c;margin:12px 0;\">\n<h2>V22 Deal Origination Command Center<\/h2>\n<p>Unified dashboard combining Opportunity Scanner, Succession Intelligence, Buyer Matching, and Roll-Up Intelligence.<\/p>\n<ul>\n<li>Deal Origination Score<\/li>\n<li>A+ Opportunity Dashboard<\/li>\n<li>Recommended Next Action Engine<\/li>\n<li>Listing Probability<\/li>\n<li>Buyer Interest Probability<\/li>\n<li>Time-to-Opportunity Forecast<\/li>\n<\/ul>\n<\/div>\n\n<div class=\"wrap\">\n<div class=\"topbar\"><div class=\"brand\"><h1>AI Assisted Deal Sourcing<\/h1><p>Complete V11.1 \u00b7 Deal Origination Command Center \u00b7 Workflow Automation \u00b7 AI Intelligence \u00b7 Analytics \u00b7 Command Center<\/p><\/div><div class=\"badge\">360 Biz Brokers Academy<\/div><\/div>\n\n<div class=\"nav\">\n<button class=\"tab active\" onclick=\"showTab('dashboard',event)\">Command Center<\/button>\n<button class=\"tab\" onclick=\"showTab('discovery',event)\">Prospect Sourcing<\/button>\n<button class=\"tab\" onclick=\"showTab('scanner',event)\">Opportunity Scanner<\/button>\n<button class=\"tab\" onclick=\"showTab('sequence',event)\">AI Outreach Sequence<\/button>\n<button class=\"tab\" onclick=\"showTab('succession',event)\">Succession Intelligence<\/button>\n<button class=\"tab\" onclick=\"showTab('buyers',event)\">Buyer Match<\/button>\n<button class=\"tab\" onclick=\"showTab('rollup',event)\">Roll-Up Intelligence<\/button>\n<button class=\"tab\" onclick=\"showTab('outreach',event)\">Outreach Generator<\/button>\n<button class=\"tab\" onclick=\"showTab('pipeline',event)\">Pipeline<\/button>\n<button class=\"tab\" onclick=\"showTab('coach',event)\">Conversation Coach<\/button>\n<button class=\"tab\" onclick=\"showTab('scorecard',event)\">Opportunity Scorecard<\/button>\n<button class=\"tab\" onclick=\"showTab('assessment',event)\">Exit Assessment<\/button>\n<button class=\"tab\" onclick=\"showTab('report',event)\">Seller Report<\/button>\n<button class=\"tab\" onclick=\"showTab('analytics',event)\">Analytics<\/button>\n<button class=\"tab\" onclick=\"showTab('intelligence',event)\">AI Intelligence<\/button>\n<button class=\"tab\" onclick=\"showTab('workflow',event)\">Workflow<\/button>\n<button class=\"tab\" onclick=\"showTab('conversion',event)\">Conversion<\/button>\n<button class=\"tab\" onclick=\"showTab('presentation',event)\">Listing Presentation<\/button>\n<button class=\"tab\" onclick=\"showTab('release',event)\">Release QA<\/button>\n<button class=\"tab\" onclick=\"showTab('apiSetup',event)\">API Setup<\/button>\n<\/div>\n\n<div class=\"grid\">\n<div class=\"leftcol\">\n<div class=\"card\">\n<h2>Prospect Record<\/h2>\n<div class=\"help\">Create or select a prospect. All modules save to the same local browser record.<\/div>\n<div class=\"field\"><label>Business Name<\/label><input id=\"bizName\" placeholder=\"Tampa HVAC Services\"><\/div>\n<div class=\"two\"><div class=\"field\"><label>Industry<\/label><input id=\"industry\" placeholder=\"HVAC, restaurant, auto repair\"><\/div><div class=\"field\"><label>Location<\/label><input id=\"location\" placeholder=\"City, State\"><\/div><\/div>\n<div class=\"two\"><div class=\"field\"><label>Owner Name<\/label><input id=\"owner\" placeholder=\"Optional\"><\/div><div class=\"field\"><label>Revenue Range<\/label><select id=\"revenue\"><option>Under $500K<\/option><option>$500K\u2013$1M<\/option><option selected>$1M\u2013$3M<\/option><option>$3M\u2013$10M<\/option><option>$10M+<\/option><\/select><\/div><\/div>\n<div class=\"two\"><div class=\"field\"><label>Years in Business<\/label><input id=\"years\" type=\"number\" min=\"0\" placeholder=\"18\"><\/div><div class=\"field\"><label>Employees<\/label><input id=\"employees\" type=\"number\" min=\"0\" placeholder=\"12\"><\/div><\/div>\n<div class=\"field\"><label>Known Seller Signals \/ Context<\/label><textarea id=\"context\" placeholder=\"Retirement, burnout, declining reviews, succession issues, recent job posting, etc.\"><\/textarea><\/div>\n<div class=\"field\"><label>Pipeline Stage<\/label><select id=\"stage\"><option>Identified<\/option><option>Researched<\/option><option>Outreach Sent<\/option><option>Conversation Started<\/option><option>Meeting Booked<\/option><option>Listing Agreement<\/option><option>Under Contract<\/option><option>Closed<\/option><\/select><\/div>\n<div class=\"two\"><div class=\"field\"><label>Next Action<\/label><input id=\"nextAction\" placeholder=\"Call owner\"><\/div><div class=\"field\"><label>Due Date<\/label><input id=\"dueDate\" type=\"date\"><\/div><\/div>\n<div class=\"actions\"><button class=\"primary\" onclick=\"saveProspect()\">Save Prospect<\/button><button class=\"light\" onclick=\"clearForm()\">Clear<\/button><\/div>\n<\/div>\n\n<div class=\"card\">\n<h2>Saved Prospects<\/h2>\n<div id=\"prospectList\" class=\"prospect-list\"><\/div>\n<div class=\"actions\"><button class=\"secondary\" onclick=\"exportData()\">Export Backup<\/button><button class=\"light\" onclick=\"exportCSV()\">Export CSV<\/button><button class=\"light\" onclick=\"loadDemoData()\">Load Demo Data<\/button><button class=\"danger\" onclick=\"resetDemoData()\">Reset All<\/button><button class=\"light\" onclick=\"document.getElementById('importFile').click()\">Import<\/button><input id=\"importFile\" type=\"file\" accept=\".json\" style=\"display:none\" onchange=\"importData(event)\"><\/div><div class=\"demo-note\">Data is saved in this browser only. Use Export Backup before clearing browser storage or moving devices.<\/div>\n<\/div>\n<\/div>\n\n<div>\n\n\n\n\n\n\n<div id=\"rollupTab\" class=\"card hide\">\n<h2>Deal Origination Command Center<\/h2>\n<div class=\"notice\">Analyzes saved and sourced prospects to identify industries and markets where multiple businesses could support a buyer roll-up, add-on acquisition, or consolidation strategy.<\/div>\n\n<div class=\"metric-grid\">\n<div class=\"metric\"><span>Roll-Up Clusters<\/span><b id=\"ruClusters\">0<\/b><\/div>\n<div class=\"metric\"><span>Strong Add-Ons<\/span><b id=\"ruStrong\">0<\/b><\/div>\n<div class=\"metric\"><span>Platform Candidates<\/span><b id=\"ruPlatform\">0<\/b><\/div>\n<div class=\"metric\"><span>Avg Cluster Score<\/span><b id=\"ruAvg\">0<\/b><\/div>\n<\/div>\n\n<div class=\"actions\">\n<button class=\"primary\" onclick=\"generateRollupIntel()\">Generate Roll-Up Intelligence<\/button>\n<button class=\"secondary\" onclick=\"saveRollupIntel()\">Save Selected Cluster Insight<\/button>\n<button class=\"light\" onclick=\"exportRollupIntel()\">Export Roll-Up Report<\/button>\n<\/div>\n\n<div class=\"rollup-grid\" style=\"margin-top:14px\">\n<div>\n<div class=\"rollup-card\">\n<h3>Roll-Up Settings<\/h3>\n<div class=\"field\"><label>Cluster By<\/label><select id=\"rollupClusterBy\"><option value=\"industry\" selected>Industry<\/option><option value=\"location\">Location<\/option><option value=\"industryLocation\">Industry + Location<\/option><\/select><\/div>\n<div class=\"field\"><label>Minimum Cluster Size<\/label><select id=\"rollupMin\"><option value=\"2\" selected>2 Prospects<\/option><option value=\"3\">3 Prospects<\/option><option value=\"5\">5 Prospects<\/option><\/select><\/div>\n<div class=\"field\"><label>Buyer Strategy<\/label><select id=\"rollupStrategy\"><option value=\"addon\" selected>Add-On Acquisition<\/option><option value=\"platform\">Platform + Add-Ons<\/option><option value=\"territory\">Territory Consolidation<\/option><option value=\"strategic\">Strategic Buyer Expansion<\/option><\/select><\/div>\n<\/div>\n<div class=\"rollup-card\">\n<h3>Selected Cluster<\/h3>\n<div id=\"rollupSelected\" class=\"output\">Generate roll-up intelligence to view clusters.<\/div>\n<\/div>\n<\/div>\n\n<div>\n<h3>Roll-Up Clusters<\/h3>\n<div id=\"rollupClusters\"><\/div>\n\n<h3>Roll-Up Strategy Memo<\/h3>\n<div id=\"rollupMemo\" class=\"output\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div id=\"buyersTab\" class=\"card hide\">\n<h2>Deal Origination Command Center<\/h2>\n<div class=\"notice\">Matches the selected seller prospect to likely buyer types and recommends an acquisition positioning strategy.<\/div>\n\n<div class=\"metric-grid\">\n<div class=\"metric\"><span>Strategic Buyers<\/span><b id=\"bmStrategic\">0<\/b><\/div>\n<div class=\"metric\"><span>Owner Operators<\/span><b id=\"bmOwnerOps\">0<\/b><\/div>\n<div class=\"metric\"><span>Search Funds<\/span><b id=\"bmSearch\">0<\/b><\/div>\n<div class=\"metric\"><span>PE \/ Family Office<\/span><b id=\"bmPE\">0<\/b><\/div>\n<\/div>\n\n<div class=\"actions\">\n<button class=\"primary\" onclick=\"generateBuyerMatches()\">Generate Buyer Matches<\/button>\n<button class=\"secondary\" onclick=\"saveBuyerMatch()\">Save Buyer Match Insight<\/button>\n<button class=\"light\" onclick=\"exportBuyerMatch()\">Export Buyer Match<\/button>\n<\/div>\n\n<div class=\"buyer-grid\" style=\"margin-top:14px\">\n<div>\n<div class=\"buyer-card\">\n<h3>Selected Prospect<\/h3>\n<div id=\"buyerSelected\" class=\"output\">Select a prospect first.<\/div>\n<\/div>\n<div class=\"buyer-card\">\n<h3>Buyer Match Settings<\/h3>\n<div class=\"field\"><label>Preferred Buyer Strategy<\/label><select id=\"buyerStrategy\"><option value=\"best\" selected>Best Fit<\/option><option value=\"strategic\">Strategic Buyer<\/option><option value=\"owneroperator\">Owner Operator<\/option><option value=\"searchfund\">Search Fund<\/option><option value=\"pe\">Private Equity \/ Family Office<\/option><\/select><\/div>\n<div class=\"field\"><label>Geography Preference<\/label><select id=\"buyerGeo\"><option value=\"local\" selected>Local \/ Regional<\/option><option value=\"state\">Statewide<\/option><option value=\"national\">National<\/option><\/select><\/div>\n<\/div>\n<\/div>\n\n<div>\n<h3>Recommended Buyer Types<\/h3>\n<div id=\"buyerMatches\"><\/div>\n\n<h3>Buyer Positioning Memo<\/h3>\n<div id=\"buyerMemo\" class=\"output\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div id=\"successionTab\" class=\"card hide\">\n<h2>Deal Origination Command Center<\/h2>\n<div class=\"notice\">Classifies the selected prospect into an owner exit persona, estimates transition timeline, and generates conversation intelligence for succession, retirement, lifestyle, and legacy discussions.<\/div>\n\n<div class=\"metric-grid\">\n<div class=\"metric\"><span>Retirement Candidates<\/span><b id=\"succRetire\">0<\/b><\/div>\n<div class=\"metric\"><span>Legacy Sellers<\/span><b id=\"succLegacy\">0<\/b><\/div>\n<div class=\"metric\"><span>Strategic Sellers<\/span><b id=\"succStrategic\">0<\/b><\/div>\n<div class=\"metric\"><span>Exit Ready<\/span><b id=\"succReady\">0<\/b><\/div>\n<\/div>\n\n<div class=\"actions\">\n<button class=\"primary\" onclick=\"generateSuccessionIntel()\">Generate Succession Intelligence<\/button>\n<button class=\"secondary\" onclick=\"saveSuccessionIntel()\">Save to Prospect<\/button>\n<button class=\"light\" onclick=\"exportSuccessionIntel()\">Export Intelligence<\/button>\n<\/div>\n\n<div class=\"succession-grid\" style=\"margin-top:14px\">\n<div>\n<div class=\"succession-card\">\n<h3>Selected Prospect<\/h3>\n<div id=\"successionSelected\" class=\"output\">Select a prospect first.<\/div>\n<\/div>\n<div class=\"succession-card\">\n<h3>Conversation Settings<\/h3>\n<div class=\"field\"><label>Conversation Style<\/label><select id=\"succStyle\"><option value=\"relationship\" selected>Relationship First<\/option><option value=\"education\">Educational Advisor<\/option><option value=\"valuation\">Valuation Led<\/option><option value=\"succession\">Succession Planning<\/option><\/select><\/div>\n<div class=\"field\"><label>Broker Goal<\/label><select id=\"succGoal\"><option value=\"discovery\" selected>Discovery Call<\/option><option value=\"valuation\">Valuation Meeting<\/option><option value=\"assessment\">Exit Readiness Assessment<\/option><option value=\"listing\">Listing Strategy Conversation<\/option><\/select><\/div>\n<\/div>\n<\/div>\n\n<div>\n<div id=\"successionPersona\" class=\"persona-card\">\n<h3>Exit Persona<\/h3>\n<p>Generate intelligence to classify the prospect.<\/p>\n<\/div>\n\n<h3>Broker Guidance<\/h3>\n<div id=\"successionGuidance\" class=\"question-list\"><\/div>\n\n<h3>Conversation Questions<\/h3>\n<div id=\"successionQuestions\" class=\"question-list\"><\/div>\n\n<h3>Likely Objections & Responses<\/h3>\n<div id=\"successionObjections\" class=\"question-list\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div id=\"sequenceTab\" class=\"card hide\">\n<h2>Deal Origination Command Center<\/h2>\n<div class=\"notice\">Generates outreach based on the selected prospect's Opportunity Scanner profile, seller probability, opportunity type, and recommended broker approach.<\/div>\n\n<div class=\"sequence-grid\">\n<div>\n<div class=\"sequence-card\">\n<h3>Outreach Strategy<\/h3>\n<div id=\"sequenceStrategy\" class=\"output\">Select a prospect and click Generate Sequence.<\/div>\n<div class=\"actions\">\n<button class=\"primary\" onclick=\"generateSmartSequence()\">Generate Sequence<\/button>\n<button class=\"secondary\" onclick=\"saveSmartSequence()\">Save to Prospect<\/button>\n<button class=\"light\" onclick=\"exportSmartSequence()\">Export Text<\/button>\n<\/div>\n<\/div>\n\n<div class=\"sequence-card\">\n<h3>Sequence Settings<\/h3>\n<div class=\"field\"><label>Tone<\/label><select id=\"seqTone\"><option value=\"professional\" selected>Professional<\/option><option value=\"warm\">Warm \/ Relationship-Based<\/option><option value=\"direct\">Direct<\/option><option value=\"educational\">Educational<\/option><\/select><\/div>\n<div class=\"field\"><label>Primary Goal<\/label><select id=\"seqGoal\"><option value=\"conversation\" selected>Start a Conversation<\/option><option value=\"valuation\">Schedule Valuation Discussion<\/option><option value=\"succession\">Discuss Succession Planning<\/option><option value=\"listing\">Move Toward Listing Strategy<\/option><\/select><\/div>\n<div class=\"field\"><label>Follow-Up Cadence<\/label><select id=\"seqCadence\"><option value=\"7\" selected>Every 7 Days<\/option><option value=\"10\">Every 10 Days<\/option><option value=\"14\">Every 14 Days<\/option><option value=\"30\">Monthly Nurture<\/option><\/select><\/div>\n<\/div>\n<\/div>\n\n<div>\n<h3>Email #1 \u2014 Initial Contact<\/h3>\n<div class=\"sequence-actions\"><button class=\"copybtn\" onclick=\"copyText('seqEmail1')\">Copy<\/button><\/div>\n<div id=\"seqEmail1\" class=\"sequence-output\"><\/div>\n\n<h3>Email #2 \u2014 Educational Follow-Up<\/h3>\n<div class=\"sequence-actions\"><button class=\"copybtn\" onclick=\"copyText('seqEmail2')\">Copy<\/button><\/div>\n<div id=\"seqEmail2\" class=\"sequence-output\"><\/div>\n\n<h3>Email #3 \u2014 Final Soft Follow-Up<\/h3>\n<div class=\"sequence-actions\"><button class=\"copybtn\" onclick=\"copyText('seqEmail3')\">Copy<\/button><\/div>\n<div id=\"seqEmail3\" class=\"sequence-output\"><\/div>\n\n<h3>LinkedIn Message<\/h3>\n<div class=\"sequence-actions\"><button class=\"copybtn\" onclick=\"copyText('seqLinkedIn')\">Copy<\/button><\/div>\n<div id=\"seqLinkedIn\" class=\"sequence-output\"><\/div>\n\n<h3>Phone Script<\/h3>\n<div class=\"sequence-actions\"><button class=\"copybtn\" onclick=\"copyText('seqPhone')\">Copy<\/button><\/div>\n<div id=\"seqPhone\" class=\"sequence-output\"><\/div>\n\n<h3>Voicemail Script<\/h3>\n<div class=\"sequence-actions\"><button class=\"copybtn\" onclick=\"copyText('seqVoicemail')\">Copy<\/button><\/div>\n<div id=\"seqVoicemail\" class=\"sequence-output\"><\/div>\n\n<h3>Succession \/ Exit Conversation Guide<\/h3>\n<div class=\"sequence-actions\"><button class=\"copybtn\" onclick=\"copyText('seqGuide')\">Copy<\/button><\/div>\n<div id=\"seqGuide\" class=\"sequence-output\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div id=\"scannerTab\" class=\"card hide\">\n<h2>Deal Origination Command Center<\/h2>\n<div class=\"notice\">This scanner ranks sourced and saved prospects by seller probability, opportunity type, priority grade, and recommended broker approach.<\/div>\n\n<div class=\"metric-grid\">\n<div class=\"metric\"><span>High Probability Sellers<\/span><b id=\"scanHigh\">0<\/b><\/div>\n<div class=\"metric\"><span>Succession Candidates<\/span><b id=\"scanSuccession\">0<\/b><\/div>\n<div class=\"metric\"><span>Strategic Acquisitions<\/span><b id=\"scanStrategic\">0<\/b><\/div>\n<div class=\"metric\"><span>A+ Opportunities<\/span><b id=\"scanAplus\">0<\/b><\/div>\n<\/div>\n\n<div class=\"actions\">\n<button class=\"primary\" onclick=\"runOpportunityScanner()\">Run Scanner<\/button>\n<button class=\"secondary\" onclick=\"saveScannerInsight()\">Save Insight to Selected Prospect<\/button>\n<button class=\"light\" onclick=\"exportScannerCSV()\">Export Scanner CSV<\/button>\n<\/div>\n\n<div class=\"scanner-grid\" style=\"margin-top:14px\">\n<div>\n<h3>Ranked Seller Opportunities<\/h3>\n<div id=\"scannerResults\" class=\"scanner-list\"><\/div>\n<\/div>\n<div>\n<h3>Selected Prospect Scan<\/h3>\n<div id=\"scannerDetail\" class=\"output\">Select a prospect or run the scanner.<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div id=\"discoveryTab\" class=\"card hide\">\n<h2>AI Deal Origination Command Center <span class=\"source-pill\">V11<\/span><\/h2>\n<div class=\"notice\">Search for local businesses using any combination of fields. You can use only one field, such as ZIP code, or combine multiple fields, such as County + Industry + Radius. Blank fields are ignored.<\/div>\n\n<div class=\"discovery-layout\">\n<div>\n<div class=\"discovery-card\">\n<h3>Search Criteria<\/h3>\n<div class=\"field\"><label>Industry \/ Category<\/label><input id=\"discIndustry\" placeholder=\"HVAC, plumbing, auto repair, restaurant\"><\/div>\n<div class=\"two\"><div class=\"field\"><label>City<\/label><input id=\"discCity\" placeholder=\"Tampa\"><\/div><div class=\"field\"><label>State<\/label><input id=\"discState\" placeholder=\"FL\"><\/div><\/div>\n<div class=\"two\"><div class=\"field\"><label>Zip Code<\/label><input id=\"discZip\" placeholder=\"33626\"><\/div><div class=\"field\"><label>County<\/label><input id=\"discCounty\" placeholder=\"Hillsborough County\"><\/div><\/div>\n<div class=\"two\"><div class=\"field\"><label>Search Radius<\/label><select id=\"discRadius\"><option value=\"5\">5 Miles<\/option><option value=\"10\">10 Miles<\/option><option value=\"25\" selected>25 Miles<\/option><option value=\"50\">50 Miles<\/option><option value=\"100\">100 Miles<\/option><\/select><\/div><div class=\"field\"><label>Result Count<\/label><select id=\"discCount\"><option>5<\/option><option selected>10<\/option><option>15<\/option><\/select><\/div><\/div>\n<div class=\"two\"><div class=\"field\"><label>Minimum Rating<\/label><select id=\"discRating\"><option value=\"0\">Any<\/option><option value=\"3.5\">3.5+<\/option><option value=\"4\" selected>4.0+<\/option><option value=\"4.5\">4.5+<\/option><\/select><\/div><div class=\"field\"><label>Minimum Years in Business<\/label><select id=\"discYearsMin\"><option value=\"0\" selected>Any<\/option><option value=\"5\">5+ Years<\/option><option value=\"10\">10+ Years<\/option><option value=\"15\">15+ Years<\/option><option value=\"20\">20+ Years<\/option><\/select><\/div><\/div>\n<div class=\"two\"><div class=\"field\"><label>Business Size<\/label><select id=\"discSize\"><option value=\"any\" selected>Any<\/option><option value=\"1-5\">1\u20135 Employees<\/option><option value=\"6-20\">6\u201320 Employees<\/option><option value=\"21-50\">21\u201350 Employees<\/option><option value=\"50+\">50+ Employees<\/option><\/select><\/div><div class=\"field\"><label>Mode<\/label><select id=\"discMode\"><option value=\"demo\" selected>Demo \/ Mock Results<\/option><option value=\"api\">API-Ready Endpoint<\/option><\/select><\/div><\/div>\n<div class=\"field\"><label>Future Backend Endpoint<\/label><input id=\"discEndpoint\" placeholder=\"\/wp-json\/ai-deal-sourcing\/v1\/prospect-search\"><\/div>\n<div class=\"api-status\"><strong>Security note:<\/strong> Google Places API keys should live on a backend\/server, not inside this HTML file.<\/div>\n<div class=\"actions\"><button class=\"primary\" onclick=\"runDiscovery()\">Source Prospects<\/button><button class=\"light\" onclick=\"clearDiscovery()\">Clear Results<\/button><\/div>\n<\/div>\n\n<div class=\"discovery-card\">\n<h3>Seller Readiness Formula<\/h3>\n<p style=\"font-size:12px;color:var(--txt2)\">Demo scoring considers rating quality, review count, estimated business age, local category, website presence, and possible owner-transition signals.<\/p>\n<\/div>\n<\/div>\n\n<div>\n<h3>Sourcing Results<\/h3>\n<div id=\"discoverySummary\" class=\"output\">Run a search to source business prospects.<\/div>\n<div id=\"discoveryResults\"><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div id=\"dashboardTab\" class=\"card\">\n<h2>Deal Sourcing Command Center<\/h2>\n<div class=\"notice\">This dashboard ranks prospects by priority using opportunity score, exit readiness score, pipeline status, follow-up date, and activity history.<\/div>\n\n<div class=\"metric-grid\">\n<div class=\"metric\"><span>Total Prospects<\/span><b id=\"mTotal\">0<\/b><\/div>\n<div class=\"metric\"><span>Hot Prospects<\/span><b id=\"mHot\">0<\/b><\/div>\n<div class=\"metric\"><span>Follow-Ups Due<\/span><b id=\"mDue\">0<\/b><\/div>\n<div class=\"metric\"><span>Assessments<\/span><b id=\"mAssess\">0<\/b><\/div>\n<\/div>\n\n<h3>Priority Work Queue<\/h3>\n<div id=\"priorityQueue\" class=\"queue\"><\/div>\n\n<h3>Hot Prospect Alerts<\/h3>\n<div id=\"hotAlerts\" class=\"alert-row\"><\/div>\n\n<h3>Pipeline Board<\/h3>\n<div id=\"pipelineBoard\" class=\"kanban\"><\/div>\n\n<h3>Upcoming Actions<\/h3>\n<div id=\"upcomingActions\" class=\"queue\"><\/div>\n\n<h3>Recent Activity Timeline<\/h3>\n<div id=\"recentActivity\" class=\"history\"><\/div>\n\n<h3>Selected Prospect Intelligence<\/h3>\n<div id=\"selectedSummary\" class=\"output\">Select a prospect to begin.<\/div>\n<\/div>\n\n<div id=\"outreachTab\" class=\"card hide\">\n<h2>AI Outreach Message Generator<\/h2>\n<div class=\"notice\">Generates English, Portuguese, and Spanish outreach content. Messages are draft-style and can be copied\/sent manually.<\/div>\n<div class=\"langs\"><button class=\"lang active\" onclick=\"setLang('en',event)\">English<\/button><button class=\"lang\" onclick=\"setLang('pt',event)\">Portugu\u00eas<\/button><button class=\"lang\" onclick=\"setLang('es',event)\">Espa\u00f1ol<\/button><\/div>\n<div class=\"actions\"><button class=\"primary\" onclick=\"generateOutreach()\">Generate Outreach Package<\/button><button class=\"secondary\" onclick=\"saveOutreach()\">Save to History<\/button><\/div>\n<h3>Email Variation 1 \u2014 Soft Introduction<\/h3><div class=\"copybar\"><button class=\"copybtn\" onclick=\"copyText('email1')\">Copy<\/button><\/div><div id=\"email1\" class=\"output\"><\/div>\n<h3>Email Variation 2 \u2014 Direct Value Proposition<\/h3><div class=\"copybar\"><button class=\"copybtn\" onclick=\"copyText('email2')\">Copy<\/button><\/div><div id=\"email2\" class=\"output\"><\/div>\n<h3>Email Variation 3 \u2014 Referral-Style Warm Approach<\/h3><div class=\"copybar\"><button class=\"copybtn\" onclick=\"copyText('email3')\">Copy<\/button><\/div><div id=\"email3\" class=\"output\"><\/div>\n<h3>LinkedIn Connection Note<\/h3><div class=\"copybar\"><button class=\"copybtn\" onclick=\"copyText('linkedin1')\">Copy<\/button><\/div><div id=\"linkedin1\" class=\"output\"><\/div>\n<h3>LinkedIn Follow-Up DM<\/h3><div class=\"copybar\"><button class=\"copybtn\" onclick=\"copyText('linkedin2')\">Copy<\/button><\/div><div id=\"linkedin2\" class=\"output\"><\/div>\n<h3>Direct Mail Letter<\/h3><div class=\"copybar\"><button class=\"copybtn\" onclick=\"copyText('letter')\">Copy<\/button><\/div><div id=\"letter\" class=\"output\"><\/div>\n<h3>4-Message Follow-Up Sequence<\/h3><div class=\"copybar\"><button class=\"copybtn\" onclick=\"copyText('sequence')\">Copy<\/button><\/div><div id=\"sequence\" class=\"output\"><\/div>\n<\/div>\n\n<div id=\"pipelineTab\" class=\"card hide\">\n<h2>Prospect Pipeline & History<\/h2>\n<div id=\"pipelineDetail\" class=\"output\">Select a prospect to view pipeline history.<\/div>\n<h3>Quick Stage Update<\/h3>\n<div class=\"stage\" id=\"stageBtns\"><\/div>\n<h3>Internal Notes<\/h3>\n<div class=\"field\"><textarea id=\"noteText\" placeholder=\"Add call notes, next steps, seller feedback, etc.\"><\/textarea><\/div>\n<div class=\"actions\"><button class=\"primary\" onclick=\"saveNote()\">Save Note<\/button><\/div>\n<h3>History<\/h3><div id=\"historyList\" class=\"history\"><\/div>\n<\/div>\n\n<div id=\"coachTab\" class=\"card hide\">\n<h2>AI Seller Conversation Coach<\/h2>\n<div class=\"actions\"><button class=\"primary\" onclick=\"generateCoach()\">Generate Call Prep<\/button><button class=\"secondary\" onclick=\"saveCoach()\">Save Coach Output<\/button><\/div>\n<h3>Customized Call Script<\/h3><div class=\"copybar\"><button class=\"copybtn\" onclick=\"copyText('callScript')\">Copy<\/button><\/div><div id=\"callScript\" class=\"output\"><\/div>\n<h3>Likely Objections & Responses<\/h3><div class=\"copybar\"><button class=\"copybtn\" onclick=\"copyText('objections')\">Copy<\/button><\/div><div id=\"objections\" class=\"output\"><\/div>\n<h3>Qualification Questions<\/h3><div class=\"copybar\"><button class=\"copybtn\" onclick=\"copyText('qualQuestions')\">Copy<\/button><\/div><div id=\"qualQuestions\" class=\"output\"><\/div>\n<h3>Post-Call Follow-Up Email<\/h3><div class=\"copybar\"><button class=\"copybtn\" onclick=\"copyText('postEmail')\">Copy<\/button><\/div><div id=\"postEmail\" class=\"output\"><\/div>\n<\/div>\n\n<div id=\"scorecardTab\" class=\"card hide\">\n<h2>Seller Opportunity Scorecard<\/h2>\n<div class=\"three\"><div class=\"field\"><label>Seller Motivation<\/label><select id=\"motivation\"><option value=\"20\">Low<\/option><option value=\"50\" selected>Moderate<\/option><option value=\"85\">High<\/option><\/select><\/div><div class=\"field\"><label>Business Quality<\/label><select id=\"quality\"><option value=\"30\">Weak<\/option><option value=\"60\" selected>Average<\/option><option value=\"90\">Strong<\/option><\/select><\/div><div class=\"field\"><label>Deal Potential<\/label><select id=\"dealpot\"><option value=\"30\">Low<\/option><option value=\"60\" selected>Medium<\/option><option value=\"90\">High<\/option><\/select><\/div><\/div>\n<div class=\"actions\"><button class=\"primary\" onclick=\"calculateOpportunity()\">Calculate Opportunity<\/button><button class=\"secondary\" onclick=\"saveOpportunity()\">Save Scorecard<\/button><\/div>\n<div id=\"oppResults\" class=\"hide\"><div class=\"scorebox\"><div><p>Combined Opportunity Score<\/p><div class=\"score\" id=\"oppScore\">0<\/div><\/div><div><p><strong id=\"oppCat\">\u2014<\/strong><\/p><p id=\"oppApproach\">\u2014<\/p><\/div><\/div><h3>Suggested Messaging Angle<\/h3><div id=\"oppAngle\" class=\"output\"><\/div><\/div>\n<\/div>\n\n<div id=\"assessmentTab\" class=\"card hide\">\n<h2>Exit Readiness Assessment<\/h2>\n<div class=\"notice\">Use 1 for weak\/not ready and 5 for strong\/ready.<\/div>\n<h3>Financial Readiness<\/h3><div id=\"financialQs\"><\/div>\n<h3>Operational Readiness<\/h3><div id=\"operationalQs\"><\/div>\n<h3>Market Readiness<\/h3><div id=\"marketQs\"><\/div>\n<h3>Personal Exit Readiness<\/h3><div id=\"personalQs\"><\/div>\n<div class=\"actions\"><button class=\"primary\" onclick=\"calculateAssessment()\">Generate Exit Readiness Analysis<\/button><button class=\"secondary\" onclick=\"saveAssessment()\">Save Assessment<\/button><\/div>\n<div id=\"assessmentResults\" class=\"hide\" style=\"margin-top:18px\">\n<div class=\"scorebox\"><div><p>Exit Readiness Score<\/p><div class=\"score\" id=\"exitScore\">0<\/div><\/div><div><p><strong id=\"exitCat\">\u2014<\/strong><\/p><p id=\"exitTimeline\">\u2014<\/p><\/div><\/div>\n<div class=\"metric-grid\"><div class=\"metric\"><span>Financial<\/span><b id=\"financialScore\">0<\/b><\/div><div class=\"metric\"><span>Operational<\/span><b id=\"operationalScore\">0<\/b><\/div><div class=\"metric\"><span>Market<\/span><b id=\"marketScore\">0<\/b><\/div><div class=\"metric\"><span>Personal<\/span><b id=\"personalScore\">0<\/b><\/div><\/div>\n<h3>Broker Opportunity Summary<\/h3><div id=\"assessmentSummary\" class=\"output\"><\/div>\n<h3>Recommended Value Enhancement Plan<\/h3><div id=\"assessmentRecs\" class=\"output\"><\/div>\n<\/div>\n<\/div>\n\n\n\n\n\n\n\n\n<div id=\"apiSetupTab\" class=\"card hide\">\n<h2>API Integration Setup<\/h2>\n<div class=\"notice\">This tab prepares the tool for secure Prospect Sourcing API integration. API keys should never be stored inside this HTML file. Use a backend endpoint that stores keys securely and returns clean prospect data.<\/div>\n\n<div class=\"api-grid\">\n<div>\n<div class=\"api-card\">\n<h4>Backend Endpoint<\/h4>\n<div class=\"field\"><label>Prospect Search Endpoint<\/label><input id=\"apiEndpointTest\" value=\"\/wp-json\/ai-deal-sourcing\/v1\/prospect-search\"><\/div>\n<div class=\"two\"><div class=\"field\"><label>Industry<\/label><input id=\"apiTestIndustry\" value=\"HVAC\"><\/div><div class=\"field\"><label>Zip Code<\/label><input id=\"apiTestZip\" value=\"33626\"><\/div><\/div>\n<div class=\"two\"><div class=\"field\"><label>County<\/label><input id=\"apiTestCounty\" value=\"Hillsborough\"><\/div><div class=\"field\"><label>Radius<\/label><select id=\"apiTestRadius\"><option>5<\/option><option>10<\/option><option selected>25<\/option><option>50<\/option><option>100<\/option><\/select><\/div><\/div>\n<div class=\"actions\">\n<button class=\"primary\" onclick=\"testApiEndpoint()\">Test Endpoint<\/button>\n<button class=\"secondary\" onclick=\"copyApiSpec()\">Copy API Spec<\/button>\n<\/div>\n<div id=\"apiTestStatus\" class=\"status-box\">Endpoint not tested yet.<\/div>\n<\/div>\n\n<div class=\"api-card\">\n<h4>Recommended API Build Order<\/h4>\n<ol>\n<li>Google Places API backend proxy<\/li>\n<li>Business website enrichment<\/li>\n<li>Review\/signal enrichment<\/li>\n<li>Domain\/website age checks<\/li>\n<li>Marketplace monitoring integrations<\/li>\n<\/ol>\n<\/div>\n<\/div>\n\n<div>\n<div class=\"api-card\">\n<h4>Expected JSON Response<\/h4>\n<div class=\"endpoint-test\" id=\"apiSpecBox\">[\n  {\n    \"name\": \"ABC HVAC Services\",\n    \"industry\": \"HVAC\",\n    \"address\": \"123 Main St, Tampa, FL 33626\",\n    \"city\": \"Tampa\",\n    \"state\": \"FL\",\n    \"zip\": \"33626\",\n    \"county\": \"Hillsborough\",\n    \"phone\": \"(813) 555-1212\",\n    \"website\": \"https:\/\/example.com\",\n    \"rating\": 4.6,\n    \"reviews\": 187,\n    \"years\": 18,\n    \"employees\": 14,\n    \"signal\": \"Long operating history; possible succession angle\",\n    \"source\": \"Google Places\",\n    \"score\": 82\n  }\n]<\/div>\n<\/div>\n\n<div class=\"api-card\">\n<h4>Security Rules<\/h4>\n<ul>\n<li>Never place Google Places API keys in this HTML file.<\/li>\n<li>Use a server-side endpoint to call Google Places.<\/li>\n<li>Restrict API keys by domain\/IP in Google Cloud.<\/li>\n<li>Rate-limit searches by user\/account.<\/li>\n<li>Log usage for cost control.<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<div id=\"releaseTab\" class=\"card hide\">\n<h2>Deal Origination Command Center QA & WordPress Deployment<\/h2>\n<div class=\"notice\">Use this screen before installing the tool in the Agents Tools Portal. It checks local browser functionality and gives you a deployment checklist.<\/div>\n\n<div class=\"metric-grid\">\n<div class=\"metric\"><span>Version<\/span><b>V14<\/b><\/div>\n<div class=\"metric\"><span>Storage<\/span><b id=\"qaStorage\">\u2014<\/b><\/div>\n<div class=\"metric\"><span>Prospects<\/span><b id=\"qaProspects\">0<\/b><\/div>\n<div class=\"metric\"><span>Modules<\/span><b>13<\/b><\/div>\n<\/div>\n\n<div class=\"actions\">\n<button class=\"primary\" onclick=\"runReleaseQA()\">Run QA Check<\/button>\n<button class=\"secondary\" onclick=\"downloadReleaseNotes()\">Download Release Notes<\/button>\n<button class=\"light\" onclick=\"loadDemoData()\">Load Demo Data<\/button>\n<\/div>\n\n<h3>Functional QA Checklist<\/h3>\n<div id=\"qaChecklist\" class=\"qa-grid\"><\/div>\n\n<h3>WordPress Deployment Checklist<\/h3>\n<div class=\"release-box\"><h4>Recommended installation method<\/h4><p>Create a hidden WordPress test page first. Paste the full HTML into the same type of block or page method used for the other portal tools. Test it before adding it to the public tools menu.<\/p><\/div>\n<div class=\"release-box\"><h4>Test steps<\/h4><ol><li>Open the tool in WordPress.<\/li><li>Load demo data.<\/li><li>Confirm Command Center metrics populate.<\/li><li>Run Prospect Sourcing and add a prospect to pipeline.<\/li><li>Generate Outreach, Coach, Scorecard, Exit Assessment, Workflow, Conversion, and Listing Presentation.<\/li><li>Print or save the seller report as PDF.<\/li><li>Reload the page and confirm saved data persists.<\/li><\/ol><\/div>\n<div class=\"release-box\"><h4>Important storage note<\/h4><p>This standalone HTML version stores records in the user's browser localStorage. It is appropriate for demo and first release, but it is not a shared cloud database. Later, we can connect it to WordPress users, a secure backend, and Google Places API.<\/p><\/div>\n<div class=\"release-box\"><h4>Future API endpoint target<\/h4><div class=\"codebox\">\/wp-json\/ai-deal-sourcing\/v1\/prospect-search?industry=HVAC&zip=33626&county=Hillsborough&radius=25<\/div><\/div>\n<\/div>\n\n<div id=\"presentationTab\" class=\"card hide\">\n<h2>Deal Origination Command Center<\/h2>\n<div class=\"notice\">Generate a seller-facing presentation using the selected prospect's sourcing, scoring, intelligence, workflow, and conversion data.<\/div>\n<div class=\"actions\">\n<button class=\"primary\" onclick=\"generatePresentation()\">Generate Presentation<\/button>\n<button class=\"secondary\" onclick=\"copyPresentation()\">Copy Presentation Text<\/button>\n<button class=\"light\" onclick=\"window.print()\">Print \/ Save as PDF<\/button>\n<\/div>\n<div id=\"presentationOutput\" class=\"presentation-doc\" style=\"margin-top:14px\">\n<div class=\"empty-state\">Select a prospect, then click Generate Presentation.<\/div>\n<\/div>\n<\/div>\n\n<div id=\"conversionTab\" class=\"card hide\">\n<h2>Deal Origination Command Center<\/h2>\n<div class=\"notice\">Identifies which prospects are closest to becoming signed listings and which are ready for valuation.<\/div>\n\n<div class=\"metric-grid\">\n<div class=\"metric\"><span>Listing Candidates<\/span><b id=\"cCandidates\">0<\/b><\/div>\n<div class=\"metric\"><span>Valuation Ready<\/span><b id=\"cValuation\">0<\/b><\/div>\n<div class=\"metric\"><span>Ready for Engagement<\/span><b id=\"cEngage\">0<\/b><\/div>\n<div class=\"metric\"><span>Avg Conversion %<\/span><b id=\"cAvg\">0%<\/b><\/div>\n<\/div>\n\n<h3>Conversion Queue<\/h3>\n<div id=\"conversionQueue\" class=\"output\"><\/div>\n\n<h3>Conversion Funnel<\/h3>\n<div id=\"conversionFunnel\" class=\"output\"><\/div>\n<\/div>\n\n<div id=\"workflowTab\" class=\"card hide\">\n<h2>Workflow Automation Layer<\/h2>\n<div class=\"automation-banner\">\n<h3>Virtual Deal Sourcing Assistant<\/h3>\n<p>This layer reviews each prospect's stage, scores, due dates, and activity history, then recommends the next workflow action.<\/p>\n<\/div>\n\n<div class=\"metric-grid\">\n<div class=\"metric\"><span>Open Tasks<\/span><b id=\"wOpen\">0<\/b><\/div>\n<div class=\"metric\"><span>High Priority<\/span><b id=\"wHigh\">0<\/b><\/div>\n<div class=\"metric\"><span>Due Today<\/span><b id=\"wDue\">0<\/b><\/div>\n<div class=\"metric\"><span>Auto Suggestions<\/span><b id=\"wSuggest\">0<\/b><\/div>\n<\/div>\n\n<div class=\"actions\">\n<button class=\"primary\" onclick=\"generateWorkflowTasks()\">Generate Workflow Tasks<\/button>\n<button class=\"secondary\" onclick=\"saveTopWorkflowTask()\">Save Top Task to Selected Prospect<\/button>\n<button class=\"light\" onclick=\"exportWorkflowCSV()\">Export Workflow CSV<\/button>\n<\/div>\n\n<div class=\"workflow-grid\">\n<div>\n<h3>Recommended Work Queue<\/h3>\n<div id=\"workflowQueue\"><\/div>\n<\/div>\n<div>\n<h3>Automation Rules Used<\/h3>\n<div id=\"workflowRules\">\n<div class=\"workflow-rule\"><h4>High Priority Listing Candidate<\/h4><p>Priority 80+ or strong opportunity + exit readiness \u2192 schedule valuation consultation.<\/p><\/div>\n<div class=\"workflow-rule\"><h4>Follow-Up Due<\/h4><p>Prospects with due dates today or overdue move to the top of the workflow queue.<\/p><\/div>\n<div class=\"workflow-rule\"><h4>Missing Assessment<\/h4><p>Prospects with opportunity scores but no exit readiness assessment get an assessment task.<\/p><\/div>\n<div class=\"workflow-rule\"><h4>Early Stage Prospect<\/h4><p>Identified or researched prospects get outreach, scoring, and conversation-prep tasks.<\/p><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<h3>Selected Prospect Workflow Guidance<\/h3>\n<div id=\"selectedWorkflow\" class=\"output\">Select a prospect or generate tasks to see workflow guidance.<\/div>\n<\/div>\n\n<div id=\"intelligenceTab\" class=\"card hide\">\n<h2>AI Deal Intelligence Engine<\/h2>\n<div class=\"notice\">This module combines Opportunity Score, Exit Readiness, Pipeline Stage, Follow-Up Status, and Activity History to recommend the next best action.<\/div>\n\n<div class=\"metric-grid\">\n<div class=\"metric\"><span>Priority Score<\/span><b id=\"aiPriority\">0<\/b><\/div>\n<div class=\"metric\"><span>Listing Probability<\/span><b id=\"aiListing\">0%<\/b><\/div>\n<div class=\"metric\"><span>Urgency<\/span><b id=\"aiUrgency\">Low<\/b><\/div>\n<div class=\"metric\"><span>Recommended Action<\/span><b id=\"aiAction\">\u2014<\/b><\/div>\n<\/div>\n\n<h3>AI Recommendation<\/h3>\n<div id=\"aiRecommendation\" class=\"output\">Select a prospect to generate AI intelligence.<\/div>\n\n<h3>Top Risks<\/h3>\n<div id=\"aiRisks\" class=\"output\">\u2014<\/div>\n\n<h3>Top Value Drivers<\/h3>\n<div id=\"aiDrivers\" class=\"output\">\u2014<\/div>\n\n<h3>Next Best Actions<\/h3>\n<div id=\"aiNextSteps\" class=\"output\">\u2014<\/div>\n<\/div>\n\n<div id=\"analyticsTab\" class=\"card hide\">\n<h2>Analytics & Broker Reporting<\/h2>\n<div class=\"analytics-summary\">\n<h3>Pipeline Health Summary<\/h3>\n<p id=\"analyticsNarrative\">Load or create prospect records to generate broker-level analytics.<\/p>\n<\/div>\n\n<div class=\"metric-grid\">\n<div class=\"metric\"><span>Average Priority<\/span><b id=\"aPriority\">0<\/b><\/div>\n<div class=\"metric\"><span>Average Opportunity<\/span><b id=\"aOpp\">0<\/b><\/div>\n<div class=\"metric\"><span>Average Exit<\/span><b id=\"aExit\">0<\/b><\/div>\n<div class=\"metric\"><span>Overdue Follow-Ups<\/span><b id=\"aOverdue\">0<\/b><\/div>\n<\/div>\n\n<div class=\"analytics-grid\">\n<div class=\"chart-card\">\n<h4>Pipeline by Stage<\/h4>\n<div id=\"stageChart\"><\/div>\n<\/div>\n<div class=\"chart-card\">\n<h4>Prospects by Industry<\/h4>\n<div id=\"industryChart\"><\/div>\n<\/div>\n<div class=\"chart-card\">\n<h4>Activity Mix<\/h4>\n<div id=\"activityChart\"><\/div>\n<\/div>\n<\/div>\n\n<h3>Top Opportunities<\/h3>\n<div id=\"topOpportunityTable\"><\/div>\n\n<h3>Broker Activity Report<\/h3>\n<div id=\"brokerActivityReport\" class=\"output\"><\/div>\n\n<div class=\"actions\">\n<button class=\"secondary\" onclick=\"exportAnalyticsCSV()\">Export Analytics CSV<\/button>\n<button class=\"light\" onclick=\"window.print()\">Print Broker Report<\/button>\n<\/div>\n<\/div>\n\n<div id=\"reportTab\" class=\"card hide\">\n<div class=\"report\" id=\"sellerReport\">\n<div class=\"report-cover\">\n<h2>AI Assisted Deal Sourcing Report<\/h2>\n<p>Confidential prospect intelligence summary prepared for broker review.<\/p>\n<\/div>\n<div class=\"report-meta-grid\">\n<div><div class=\"section-kicker\">Business<\/div><strong id=\"rBiz\">Not selected<\/strong><\/div>\n<div><div class=\"section-kicker\">Industry<\/div><strong id=\"rIndustry\">\u2014<\/strong><\/div>\n<div><div class=\"section-kicker\">Location<\/div><strong id=\"rLocation\">\u2014<\/strong><\/div>\n<div><div class=\"section-kicker\">Pipeline Stage<\/div><strong id=\"rStage\">\u2014<\/strong><\/div>\n<\/div>\n<h3>Latest Opportunity Score<\/h3><p id=\"rOpp\">\u2014<\/p>\n<h3>Latest Exit Readiness<\/h3><p id=\"rExit\">\u2014<\/p>\n<h3>Recommended Next Steps<\/h3><p id=\"rNext\">Generate scorecards and assessments to populate recommendations.<\/p>\n<h3>Broker Disclaimer<\/h3>\n<p style=\"font-size:12px;color:#666\">This report is a planning aid and does not constitute a formal valuation, appraisal, legal advice, tax advice, or a representation that a transaction will occur. All information should be verified before broker reliance or seller presentation.<\/p>\n<\/div>\n<div class=\"actions\"><button class=\"light\" onclick=\"window.print()\">Print \/ Save as PDF<\/button><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n<script>\nconst stages=['Identified','Researched','Outreach Sent','Conversation Started','Meeting Booked','Listing Agreement','Under Contract','Closed'];\nlet prospects=JSON.parse(localStorage.getItem('ads_v5_complete_prospects')||'[]');\nlet selectedId=null,lastOutreach=null,lastCoach=null,lastOpp=null,lastAssessment=null,currentLang='en';\n\nconst questions={\nfinancial:[['financials','Financial statements are current and available','P&L, balance sheet, and cash flow reports are accessible.'],['monthly','Monthly reporting is consistent','The owner can review performance monthly, not only at tax time.'],['books','Bookkeeping is clean and reliable','Income, expenses, payroll, and add-backs are organized.'],['tax','Tax returns are organized','At least three years of returns can be provided quickly.'],['addbacks','Owner add-backs are explainable','Personal\/discretionary expenses can be clearly documented.']],\noperational:[['sops','SOPs and processes are documented','A buyer can understand how the business runs.'],['management','Management team is in place','Business is not completely dependent on the owner.'],['employees','Key employee risk is controlled','Critical employees are stable and likely to remain.'],['systems','Systems and records are organized','CRM, billing, inventory, vendors, and customer records are usable.'],['ownerdep','Owner dependency is low','The owner does not need to be involved in every daily decision.']],\nmarket:[['recurring','Revenue is predictable or recurring','Repeat customers, contracts, subscriptions, or maintenance plans exist.'],['concentration','Customer concentration is low','No single customer creates excessive risk.'],['advantage','Competitive advantage is clear','Reputation, location, niche, relationships, licenses, or systems are defensible.'],['growth','Growth opportunities are identifiable','A buyer can see practical ways to grow revenue or margin.'],['reviews','Reputation supports buyer confidence','Reviews, referrals, and local reputation are positive.']],\npersonal:[['timeline','Owner has a realistic exit timeline','Seller has thought through when they want to transition.'],['price','Price expectations are realistic','Owner has a market-grounded view of business value.'],['transition','Owner is willing to support transition','Seller can stay for training or a defined handoff period.'],['motivation2','Motivation to sell is clear','Retirement, burnout, succession, diversification, or other motivation exists.'],['family','Family or partner issues are manageable','Decision makers are aligned enough to explore a sale.']]\n};\n\nfunction $(id){return document.getElementById(id)}\nfunction val(id){return $(id).value.trim()}\nfunction p(){return selectedId?prospects.find(x=>x.id===selectedId):null}\nfunction persist(){localStorage.setItem('ads_v5_complete_prospects',JSON.stringify(prospects))}\nfunction ensureArrays(x){['history','outreach','coach','opportunities','assessments'].forEach(k=>x[k]=x[k]||[]);return x}\n\nfunction saveProspect(){\n let data={id:selectedId||Date.now().toString(),bizName:val('bizName')||'Unnamed Prospect',industry:val('industry'),location:val('location'),owner:val('owner'),revenue:val('revenue'),years:val('years'),employees:val('employees'),context:val('context'),stage:val('stage'),nextAction:val('nextAction'),dueDate:val('dueDate')};\n let ex=prospects.find(x=>x.id===data.id);\n if(ex){Object.assign(ex,data);ensureArrays(ex)}else{ensureArrays(data);data.history.unshift(hist('Prospect Created','Initial prospect record created.'));prospects.unshift(data)}\n selectedId=data.id;persist();renderAll();selectProspect(data.id);\n}\nfunction hist(type,text){return{date:new Date().toLocaleString(),type,text}}\nfunction renderProspects(){\n const box=$('prospectList'); box.innerHTML=prospects.length?'':'<div class=\"notice\">No saved prospects yet.<\/div>';\n prospects.forEach(x=>{ensureArrays(x);let latest=x.assessments[0];box.innerHTML+=`<div class=\"prospect ${x.id===selectedId?'active':''}\" onclick=\"selectProspect('${x.id}')\"><b>${x.bizName}<\/b><small>${x.industry||'Industry not set'} \u00b7 ${x.location||'Location not set'}<\/small><br><span class=\"pill blue\">${x.stage||'Identified'}<\/span>${latest?`<span class=\"pill green\">Exit ${latest.score}<\/span>`:''}<\/div>`});\n}\nfunction selectProspect(id){selectedId=id;let x=p();if(!x)return;ensureArrays(x);['bizName','industry','location','owner','revenue','years','employees','context','stage','nextAction','dueDate'].forEach(k=>$(k).value=x[k]||'');lastOpp=x.opportunities[0]||lastOpp;lastAssessment=x.assessments[0]||lastAssessment;renderAll();}\nfunction clearForm(){selectedId=null;['bizName','industry','location','owner','years','employees','context','nextAction','dueDate'].forEach(k=>$(k).value='');renderAll()}\n\n\nfunction escapeCSV(v){\n  v=(v===undefined||v===null)?'':String(v);\n  return '\"' + v.replace(\/\"\/g,'\"\"') + '\"';\n}\nfunction copyText(id){\n  const el=$(id);\n  if(!el)return;\n  const text=el.innerText||el.textContent||'';\n  navigator.clipboard?.writeText(text).then(()=>alert('Copied.')).catch(()=>{\n    const t=document.createElement('textarea');t.value=text;document.body.appendChild(t);t.select();document.execCommand('copy');document.body.removeChild(t);alert('Copied.');\n  });\n}\nfunction exportCSV(){\n  const headers=['Business Name','Industry','Location','Owner','Revenue','Years','Employees','Stage','Next Action','Due Date','Priority Score','Latest Opportunity Score','Latest Exit Readiness Score'];\n  const rows=prospects.map(x=>{\n    ensureArrays(x);\n    return [\n      x.bizName,x.industry,x.location,x.owner,x.revenue,x.years,x.employees,x.stage,x.nextAction,x.dueDate,\n      priorityScore(x),x.opportunities?.[0]?.score||'',x.assessments?.[0]?.score||''\n    ].map(escapeCSV).join(',');\n  });\n  const csv=[headers.map(escapeCSV).join(','),...rows].join('\\n');\n  const blob=new Blob([csv],{type:'text\/csv;charset=utf-8'});\n  const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='ai-deal-sourcing-prospects.csv';a.click();\n}\nfunction loadDemoData(){\n  if(prospects.length && !confirm('Load demo data? This will add sample prospects to your existing records.'))return;\n  const now=new Date();\n  const today=now.toISOString().slice(0,10);\n  const tomorrow=new Date(now.getTime()+86400000).toISOString().slice(0,10);\n  const samples=[\n    {bizName:'Tampa Bay HVAC Services',industry:'HVAC',location:'Tampa, FL',owner:'Robert Miller',revenue:'$3M\u2013$10M',years:'22',employees:'18',context:'Owner nearing retirement; strong recurring maintenance contracts; possible succession gap.',stage:'Conversation Started',nextAction:'Schedule confidential valuation call',dueDate:today,opportunities:[{date:new Date().toLocaleString(),score:88,category:'Very High',approach:'Immediate Outreach',angle:'Lead with retirement planning, valuation, and buyer demand.'}],assessments:[{date:new Date().toLocaleString(),score:82,category:'Premium Exit Candidate',timeline:'Immediate to 6 months',summary:'Strong exit candidate with recurring revenue and retirement motivation.',recs:'Prepare valuation package and discuss confidential listing timeline.'}]},\n    {bizName:'Gulf Coast Auto Repair',industry:'Auto Repair',location:'St. Petersburg, FL',owner:'Maria Alvarez',revenue:'$1M\u2013$3M',years:'16',employees:'9',context:'Good reputation, owner fatigue, needs better financial cleanup before market.',stage:'Researched',nextAction:'Send exit readiness assessment',dueDate:tomorrow,opportunities:[{date:new Date().toLocaleString(),score:73,category:'High',approach:'Priority Follow-Up',angle:'Lead with preparation and value improvement.'}],assessments:[{date:new Date().toLocaleString(),score:61,category:'Developing',timeline:'1\u20132 years',summary:'Promising but needs preparation.',recs:'Improve reporting and reduce owner dependency.'}]},\n    {bizName:'Orlando Specialty Restaurant',industry:'Restaurant',location:'Orlando, FL',owner:'James Chen',revenue:'$500K\u2013$1M',years:'11',employees:'14',context:'Recent review decline and manager turnover. Owner may be burned out.',stage:'Outreach Sent',nextAction:'Follow up on LinkedIn manually',dueDate:today,opportunities:[{date:new Date().toLocaleString(),score:67,category:'High',approach:'Priority Follow-Up',angle:'Lead with burnout, transition planning, and confidential market perspective.'}],assessments:[]}\n  ].map(s=>ensureArrays({...s,id:'demo_'+Date.now()+Math.random().toString(16).slice(2),history:[hist('Demo Prospect','Sample record loaded for testing V7 workflow.')],outreach:[],coach:[]}));\n  prospects=[...samples,...prospects];\n  persist();renderAll();alert('Demo data loaded.');\n}\nfunction resetDemoData(){\n  if(!confirm('This will permanently clear all locally saved prospects in this browser. Continue?'))return;\n  prospects=[];selectedId=null;persist();clearForm();renderAll();\n}\n\nfunction todayDateOnly(){\n  const d=new Date(); d.setHours(0,0,0,0); return d;\n}\nfunction isDue(d){\n  if(!d)return false;\n  const due=new Date(d+\"T00:00:00\"); due.setHours(0,0,0,0);\n  return due<=todayDateOnly();\n}\nfunction daysUntil(d){\n  if(!d)return null;\n  const due=new Date(d+\"T00:00:00\"); due.setHours(0,0,0,0);\n  return Math.round((due-todayDateOnly())\/86400000);\n}\nfunction priorityScore(x){\n  ensureArrays(x);\n  let opp=x.opportunities?.[0]?.score||0;\n  let exit=x.assessments?.[0]?.score||0;\n  let stageBoost={'Identified':5,'Researched':10,'Outreach Sent':18,'Conversation Started':28,'Meeting Booked':35,'Listing Agreement':50,'Under Contract':60,'Closed':20}[x.stage||'Identified']||5;\n  let dueBoost=isDue(x.dueDate)?20:0;\n  let activityBoost=Math.min((x.history?.length||0)*2,12);\n  return Math.min(100,Math.round((opp*.36)+(exit*.34)+stageBoost+dueBoost+activityBoost));\n}\nfunction sortedByPriority(){\n  return [...prospects].map(x=>({p:x,score:priorityScore(x)})).sort((a,b)=>b.score-a.score);\n}\nfunction renderCommandCenter(){\n  renderPriorityQueue();\n  renderHotAlerts();\n  renderPipelineBoard();\n  renderUpcomingActions();\n  renderRecentActivity();\n}\nfunction goModule(tab,id){\n  if(id)selectProspect(id);\n  const fake={target:[...document.querySelectorAll('.tab')].find(b=>b.textContent.toLowerCase().includes(tab==='dashboard'?'command':tab))||document.querySelector('.tab')};\n  showTab(tab,fake);\n}\nfunction renderPriorityQueue(){\n  const box=$('priorityQueue'); if(!box)return;\n  const rows=sortedByPriority().slice(0,8);\n  if(!rows.length){box.innerHTML='<div class=\"notice\">No prospects yet. Add a prospect to build your daily work queue.<\/div>';return}\n  box.innerHTML=rows.map(r=>{\n    const x=r.p, opp=x.opportunities?.[0]?.score, ex=x.assessments?.[0]?.score;\n    return `<div class=\"queue-item\"><div class=\"priority-score\">${r.score}<\/div><div><b>${x.bizName}<\/b><br><small>${x.stage||'Identified'} \u00b7 ${x.industry||'Industry not set'} \u00b7 ${x.location||'Location not set'}<\/small><br><span class=\"pill blue\">Opp ${opp||'\u2014'}<\/span><span class=\"pill green\">Exit ${ex||'\u2014'}<\/span>${isDue(x.dueDate)?'<span class=\"pill red\">Follow-Up Due<\/span>':''}<\/div><div class=\"quick-actions\"><button class=\"light\" onclick=\"goModule('outreach','${x.id}')\">Outreach<\/button><button class=\"light\" onclick=\"goModule('coach','${x.id}')\">Coach<\/button><button class=\"light\" onclick=\"goModule('assessment','${x.id}')\">Assess<\/button><\/div><\/div>`\n  }).join('');\n}\nfunction renderHotAlerts(){\n  const box=$('hotAlerts'); if(!box)return;\n  const hot=sortedByPriority().filter(r=>r.score>=70).slice(0,5);\n  if(!hot.length){box.innerHTML='<div class=\"notice\">No hot alerts yet. Scores of 70+ will appear here.<\/div>';return}\n  box.innerHTML=hot.map(r=>{\n    const x=r.p;\n    let reason=[];\n    if((x.opportunities?.[0]?.score||0)>=70)reason.push('high opportunity score');\n    if((x.assessments?.[0]?.score||0)>=70)reason.push('strong exit readiness');\n    if(isDue(x.dueDate))reason.push('follow-up due');\n    return `<div class=\"alert\"><b>${x.bizName}<\/b> \u00b7 Priority ${r.score}<br><small>Reason: ${reason.join(', ')||'strong overall activity'}<\/small><br>Suggested action: ${isDue(x.dueDate)?'Complete the scheduled follow-up today.':'Open the prospect and move the next conversation forward.'}<\/div>`\n  }).join('');\n}\nfunction renderPipelineBoard(){\n  const box=$('pipelineBoard'); if(!box)return;\n  const showStages=['Identified','Researched','Outreach Sent','Conversation Started','Meeting Booked','Listing Agreement','Under Contract','Closed'];\n  box.innerHTML=showStages.map(s=>{\n    const items=prospects.filter(x=>(x.stage||'Identified')===s).slice(0,6);\n    return `<div class=\"kanban-col\"><h4>${s} (${prospects.filter(x=>(x.stage||'Identified')===s).length})<\/h4>${items.map(x=>`<div class=\"kcard\" onclick=\"selectProspect('${x.id}')\"><b>${x.bizName}<\/b><small>${x.industry||'\u2014'} \u00b7 Priority ${priorityScore(x)}<\/small><\/div>`).join('')||'<small>No prospects<\/small>'}<\/div>`\n  }).join('');\n}\nfunction renderUpcomingActions(){\n  const box=$('upcomingActions'); if(!box)return;\n  const rows=prospects.filter(x=>x.nextAction||x.dueDate).sort((a,b)=>(a.dueDate||'9999').localeCompare(b.dueDate||'9999')).slice(0,8);\n  if(!rows.length){box.innerHTML='<div class=\"notice\">No upcoming actions. Add a next action and due date on a prospect record.<\/div>';return}\n  box.innerHTML=rows.map(x=>{\n    const d=daysUntil(x.dueDate);\n    let label=!x.dueDate?'No date':d<0?'Overdue':d===0?'Due Today':d===1?'Due Tomorrow':`Due in ${d} days`;\n    return `<div class=\"queue-item\"><div class=\"priority-score\">${priorityScore(x)}<\/div><div><b>${x.nextAction||'Follow up'}<\/b><br><small>${x.bizName} \u00b7 ${label}<\/small><\/div><div class=\"quick-actions\"><button class=\"light\" onclick=\"goModule('pipeline','${x.id}')\">Open<\/button><\/div><\/div>`\n  }).join('');\n}\nfunction renderRecentActivity(){\n  const box=$('recentActivity'); if(!box)return;\n  let rows=[];\n  prospects.forEach(x=>ensureArrays(x).history.forEach(h=>rows.push({...h,bizName:x.bizName,id:x.id})));\n  rows=rows.sort((a,b)=>new Date(b.date)-new Date(a.date)).slice(0,10);\n  if(!rows.length){box.innerHTML='<div class=\"notice\">No activity yet.<\/div>';return}\n  box.innerHTML=rows.map(h=>`<div class=\"hist\" onclick=\"selectProspect('${h.id}')\"><b>${h.bizName} \u00b7 ${h.type}<\/b><br><small>${h.date}<\/small><p>${h.text}<\/p><\/div>`).join('');\n}\n\nfunction renderMetrics(){\n  let hot=prospects.filter(x=>priorityScore(x)>=70).length;\n  let due=prospects.filter(x=>isDue(x.dueDate)).length;\n  $('mTotal').textContent=prospects.length;\n  $('mHot').textContent=hot;\n  if($('mDue'))$('mDue').textContent=due;\n  $('mAssess').textContent=prospects.reduce((a,x)=>a+(x.assessments?.length||0),0);\n}\nfunction renderSelected(){let x=p();if(!x){$('selectedSummary').textContent='Select a prospect to begin.';return}$('selectedSummary').textContent=`${x.bizName}\\nIndustry: ${x.industry||'\u2014'}\\nLocation: ${x.location||'\u2014'}\\nStage: ${x.stage||'Identified'}\\nNext Action: ${x.nextAction||'\u2014'} ${x.dueDate?`(${x.dueDate})`:''}\\nLatest Opportunity: ${x.opportunities?.[0]?x.opportunities[0].score+'\/100 \u2014 '+x.opportunities[0].category:'\u2014'}\\nLatest Exit Readiness: ${x.assessments?.[0]?x.assessments[0].score+'\/100 \u2014 '+x.assessments[0].category:'\u2014'}`;}\nfunction renderPipeline(){let x=p();$('pipelineDetail').textContent=x?`Business: ${x.bizName}\\nStage: ${x.stage||'Identified'}\\nNext Action: ${x.nextAction||'\u2014'}\\nDue Date: ${x.dueDate||'\u2014'}`:'Select a prospect to view pipeline history.';$('stageBtns').innerHTML=stages.map(s=>`<button class=\"${x&&x.stage===s?'primary':'light'}\" onclick=\"setStage('${s}')\">${s}<\/button>`).join('');$('historyList').innerHTML=x?(x.history||[]).map(h=>`<div class=\"hist\"><b>${h.type}<\/b><br><small>${h.date}<\/small><p>${h.text}<\/p><\/div>`).join(''):'';\n}\nfunction setStage(s){let x=p();if(!x)return;ensureArrays(x);x.stage=s;$('stage').value=s;x.history.unshift(hist('Stage Updated','Pipeline stage changed to '+s+'.'));persist();renderAll();}\nfunction saveNote(){let x=p();if(!x){saveProspect();x=p()}ensureArrays(x);let t=val('noteText');if(!t)return;x.history.unshift(hist('Note',t));$('noteText').value='';persist();renderAll();}\nfunction renderAll(){renderProspects();renderMetrics();renderCommandCenter();renderSelected();renderPipeline();updateReport();renderAnalytics();renderIntelligence();generateWorkflowTasks();renderSelectedWorkflow();renderConversion();runOpportunityScanner();renderSuccessionMetrics();renderBuyerMetrics();generateRollupIntel();}\n\nfunction showTab(t,e){document.querySelectorAll('.tab').forEach(x=>x.classList.remove('active'));if(e)e.target.classList.add('active');['dashboard','discovery','scanner','sequence','succession','buyers','rollup','outreach','pipeline','coach','scorecard','assessment','report','analytics','intelligence','workflow','conversion','presentation','release','apiSetup'].forEach(k=>$(k+'Tab').classList.toggle('hide',k!==t));if(t==='report')updateReport();if(t==='analytics')renderAnalytics();if(t==='workflow'){generateWorkflowTasks();renderWorkflow();}if(t==='discovery'){renderDiscovery();}if(t==='scanner'){runOpportunityScanner();}if(t==='sequence'){if(selectedId)generateSmartSequence();}if(t==='succession'){renderSuccessionMetrics();if(selectedId)generateSuccessionIntel();}if(t==='buyers'){renderBuyerMetrics();if(selectedId)generateBuyerMatches();}if(t==='rollup'){generateRollupIntel();}}\nfunction setLang(l,e){currentLang=l;document.querySelectorAll('.lang').forEach(x=>x.classList.remove('active'));if(e)e.target.classList.add('active');if(lastOutreach)generateOutreach(false);}\n\nfunction base(){let x=p()||{};return {name:x.bizName||val('bizName')||'the business',industry:x.industry||val('industry')||'your industry',loc:x.location||val('location')||'your area',owner:x.owner||val('owner')||'Business Owner',years:x.years||val('years')||'many',ctx:x.context||val('context')||'potential transition planning'}}\nfunction phrase(en,pt,es){return currentLang==='pt'?pt:currentLang==='es'?es:en}\nfunction generateOutreach(show=true){let b=base();let intro=phrase(`I noticed ${b.name} has been serving ${b.loc} in the ${b.industry} space for ${b.years} years. I help business owners quietly understand exit options before they ever decide to sell.`,`${b.name} atua em ${b.loc} no setor de ${b.industry} h\u00e1 ${b.years} anos. Eu ajudo empres\u00e1rios a entender op\u00e7\u00f5es de sa\u00edda de forma confidencial antes de decidir vender.`,`Vi que ${b.name} opera en ${b.loc} en el sector de ${b.industry} desde hace ${b.years} a\u00f1os. Ayudo a empresarios a entender opciones de salida de forma confidencial antes de decidir vender.`);\n$('email1').textContent=`Subject: A confidential question about ${b.name}\\n\\n${intro}\\n\\nWould you be open to a brief conversation about what businesses like yours are currently worth and how owners prepare for a future transition?`;\n$('email2').textContent=`Subject: Exit planning for ${b.industry} owners\\n\\n${phrase('Many owners wait too long to prepare for a sale. A short valuation conversation can uncover timing, buyer demand, and value improvement opportunities.','Muitos empres\u00e1rios esperam demais para se preparar para uma venda. Uma conversa r\u00e1pida pode revelar valor, demanda de compradores e oportunidades de melhoria.','Muchos due\u00f1os esperan demasiado para prepararse para una venta. Una conversaci\u00f3n breve puede revelar valor, demanda de compradores y oportunidades de mejora.')}\\n\\n${phrase('Would next week be a bad time to compare notes?','A pr\u00f3xima semana seria um mau momento para conversarmos?','\u00bfLa pr\u00f3xima semana ser\u00eda un mal momento para conversar?')}`;\n$('email3').textContent=`Subject: Quick introduction\\n\\n${phrase('I work with local business owners who are thinking through retirement, succession, or future exit planning.','Trabalho com empres\u00e1rios locais que est\u00e3o pensando em aposentadoria, sucess\u00e3o ou planejamento de sa\u00edda.','Trabajo con empresarios locales que est\u00e1n evaluando jubilaci\u00f3n, sucesi\u00f3n o planificaci\u00f3n de salida.')}\\n\\n${phrase('If this is relevant, I can share a confidential market perspective.','Se isso for relevante, posso compartilhar uma perspectiva de mercado confidencial.','Si esto es relevante, puedo compartir una perspectiva confidencial del mercado.')}`;\n$('linkedin1').textContent=`${phrase('I help business owners plan confidential exits and understand market value. Thought it may be useful to connect.','Ajudo empres\u00e1rios a planejar sa\u00eddas confidenciais e entender valor de mercado. Achei que seria \u00fatil conectar.','Ayudo a due\u00f1os de negocios a planificar salidas confidenciales y entender valor de mercado. Pens\u00e9 que ser\u00eda \u00fatil conectar.')}`.slice(0,300);\n$('linkedin2').textContent=`${phrase('Thanks for connecting. I work with owners who want to understand business value, buyer demand, and exit timing before making any public decision. Happy to be a resource if useful.','Obrigado por conectar. Trabalho com empres\u00e1rios que querem entender valor, demanda de compradores e momento de sa\u00edda antes de qualquer decis\u00e3o p\u00fablica. Fico \u00e0 disposi\u00e7\u00e3o.','Gracias por conectar. Trabajo con due\u00f1os que quieren entender valor, demanda de compradores y tiempo de salida antes de tomar una decisi\u00f3n p\u00fablica. Con gusto puedo ser un recurso.')}`;\n$('letter').textContent=`Dear ${b.owner},\\n\\n${intro}\\n\\nA confidential exit-readiness conversation can help identify value drivers, potential buyer interest, and steps that may increase saleability over time.\\n\\nRespectfully,\\n[Broker Name]`;\n$('sequence').textContent=`1. Initial introduction\\n2. Value\/market perspective follow-up after 5\u20137 days\\n3. Educational exit planning message after 2 weeks\\n4. Final soft close offering a confidential readiness review after 3\u20134 weeks`;\nlastOutreach={date:new Date().toLocaleString(),lang:currentLang,email1:$('email1').textContent,email2:$('email2').textContent,email3:$('email3').textContent,linkedin1:$('linkedin1').textContent,linkedin2:$('linkedin2').textContent,letter:$('letter').textContent,sequence:$('sequence').textContent};\n}\nfunction saveOutreach(){let x=p();if(!x){saveProspect();x=p()}if(!lastOutreach)generateOutreach();ensureArrays(x);x.outreach.unshift(lastOutreach);x.history.unshift(hist('Outreach Generated','Generated outreach package in '+currentLang+'.'));persist();renderAll();alert('Outreach saved.');}\n\nfunction generateCoach(){let b=base();$('callScript').textContent=`Opening: ${b.owner}, I appreciate your time. My goal is not to pressure you into selling, but to help you understand what a future transition could look like for ${b.name}.\\n\\nBridge: Owners in ${b.industry} often start with questions around value, timing, employees, confidentiality, and what buyers actually look for.\\n\\nClose: Would it be useful if I prepared a confidential exit-readiness snapshot for you?`;\n$('objections').textContent=`1. \"I'm not ready to sell.\" \u2014 Completely understandable. Many owners start planning 1\u20133 years before a sale.\\n2. \"I don't know what it's worth.\" \u2014 That's exactly where a confidential valuation discussion helps.\\n3. \"I don't want employees to know.\" \u2014 Confidentiality is central to the process.\\n4. \"The business depends on me.\" \u2014 We can identify steps to reduce owner dependency.\\n5. \"I need a certain price.\" \u2014 We can compare that expectation with current buyer demand.`;\n$('qualQuestions').textContent=`1. What prompted you to start thinking about the future of the business?\\n2. How involved are you in daily operations?\\n3. Who manages the business when you are away?\\n4. What timeline would feel ideal for a transition?\\n5. What would make a sale successful for you personally?`;\n$('postEmail').textContent=`Subject: Good speaking with you\\n\\nThank you for the conversation about ${b.name}. Based on what we discussed, the next helpful step would be a confidential readiness review covering value drivers, buyer concerns, and preparation steps.\\n\\nBest,\\n[Broker Name]`;\nlastCoach={date:new Date().toLocaleString(),script:$('callScript').textContent,objections:$('objections').textContent,questions:$('qualQuestions').textContent,email:$('postEmail').textContent};\n}\nfunction saveCoach(){let x=p();if(!x){saveProspect();x=p()}if(!lastCoach)generateCoach();ensureArrays(x);x.coach.unshift(lastCoach);x.history.unshift(hist('Conversation Coach','Generated seller conversation prep.'));persist();renderAll();alert('Coach output saved.');}\n\nfunction calculateOpportunity(){let m=+val('motivation'),q=+val('quality'),d=+val('dealpot');let score=Math.round(m*.35+q*.3+d*.35);let cat=score>=80?'Very High':score>=65?'High':score>=45?'Medium':'Low';let approach=score>=80?'Immediate Outreach':score>=65?'Priority Follow-Up':score>=45?'Educational Nurture':'Long-Term Pipeline';let angle=score>=65?'Lead with confidential valuation, succession planning, and buyer demand.':'Lead with education, preparation steps, and long-term exit planning.';$('oppResults').classList.remove('hide');$('oppScore').textContent=score;$('oppCat').textContent=cat+' Opportunity';$('oppApproach').textContent='Recommended approach: '+approach;$('oppAngle').textContent=angle;lastOpp={date:new Date().toLocaleString(),score,category:cat,approach,angle};}\nfunction saveOpportunity(){let x=p();if(!x){saveProspect();x=p()}if(!lastOpp)calculateOpportunity();ensureArrays(x);x.opportunities.unshift(lastOpp);x.history.unshift(hist('Opportunity Scorecard',`Score ${lastOpp.score}\/100 \u2014 ${lastOpp.category}.`));persist();renderAll();alert('Opportunity scorecard saved.');}\n\nfunction renderQs(){for(const s in questions){let box=$(s+'Qs');box.innerHTML='';questions[s].forEach(q=>{box.innerHTML+=`<div class=\"q\"><div><p>${q[1]}<\/p><small>${q[2]}<\/small><\/div><select id=\"${q[0]}\" data-sec=\"${s}\"><option value=\"1\">1 - Weak<\/option><option value=\"2\">2 - Below Average<\/option><option value=\"3\" selected>3 - Fair<\/option><option value=\"4\">4 - Good<\/option><option value=\"5\">5 - Strong<\/option><\/select><\/div>`})}}\nfunction sectionScore(s){let ids=questions[s].map(q=>q[0]);return Math.round(ids.reduce((a,id)=>a+(+$(id).value),0)\/(ids.length*5)*100)}\nfunction calculateAssessment(){let scores={financial:sectionScore('financial'),operational:sectionScore('operational'),market:sectionScore('market'),personal:sectionScore('personal')};let score=Math.round(scores.financial*.28+scores.operational*.28+scores.market*.22+scores.personal*.22);let cat=score>=82?'Premium Exit Candidate':score>=68?'Market Ready':score>=48?'Developing':'Needs Preparation';let timeline=score>=82?'Immediate to 6 months':score>=68?'6\u201312 months':score>=48?'1\u20132 years':'2+ years';$('assessmentResults').classList.remove('hide');$('exitScore').textContent=score;$('exitCat').textContent=cat;$('exitTimeline').textContent='Estimated sale timeline: '+timeline;$('financialScore').textContent=scores.financial;$('operationalScore').textContent=scores.operational;$('marketScore').textContent=scores.market;$('personalScore').textContent=scores.personal;let name=base().name;$('assessmentSummary').textContent=`${name} currently scores ${score}\/100 and falls into the \"${cat}\" category. This suggests the broker should position the conversation around ${score>=68?'valuation, buyer readiness, and timing':'preparation, value improvement, and future exit planning'}.` ;let recs=[];if(scores.financial<70)recs.push('Improve financial reporting, tax return organization, and add-back documentation.');if(scores.operational<70)recs.push('Reduce owner dependency, document SOPs, and strengthen management coverage.');if(scores.market<70)recs.push('Clarify competitive advantage, reduce customer concentration, and strengthen recurring revenue.');if(scores.personal<70)recs.push('Align owner timeline, price expectations, transition willingness, and decision makers.');if(!recs.length)recs.push('Prepare valuation package, begin confidential buyer-readiness discussion, and consider listing timing.');$('assessmentRecs').textContent=recs.join('\\n\\n');lastAssessment={date:new Date().toLocaleString(),score,category:cat,timeline,scores,summary:$('assessmentSummary').textContent,recs:$('assessmentRecs').textContent};}\nfunction saveAssessment(){let x=p();if(!x){saveProspect();x=p()}if(!lastAssessment)calculateAssessment();ensureArrays(x);x.assessments.unshift(lastAssessment);x.history.unshift(hist('Exit Readiness Assessment',`Score ${lastAssessment.score}\/100 \u2014 ${lastAssessment.category}.`));persist();renderAll();alert('Exit readiness assessment saved.');}\n\n\nfunction avg(nums){\n  const valid=nums.filter(n=>typeof n==='number'&&!isNaN(n));\n  return valid.length?Math.round(valid.reduce((a,b)=>a+b,0)\/valid.length):0;\n}\nfunction countBy(items,fn){\n  const o={};\n  items.forEach(x=>{const k=fn(x)||'Not Set';o[k]=(o[k]||0)+1});\n  return o;\n}\nfunction renderBars(targetId,data,total){\n  const box=$(targetId); if(!box)return;\n  const entries=Object.entries(data).sort((a,b)=>b[1]-a[1]);\n  if(!entries.length){box.innerHTML='<div class=\"empty-state\">No data yet.<\/div>';return}\n  box.innerHTML=entries.map(([label,count])=>{\n    const pct=total?Math.round(count\/total*100):0;\n    return `<div class=\"bar-row\"><div>${label}<\/div><div class=\"bar-track\"><div class=\"bar-fill\" style=\"width:${pct}%\"><\/div><\/div><div>${count}<\/div><\/div>`;\n  }).join('');\n}\nfunction renderAnalytics(){\n  if(!$('analyticsTab'))return;\n  const total=prospects.length;\n  const priorities=prospects.map(x=>priorityScore(x));\n  const oppScores=prospects.map(x=>x.opportunities?.[0]?.score).filter(Boolean);\n  const exitScores=prospects.map(x=>x.assessments?.[0]?.score).filter(Boolean);\n  const overdue=prospects.filter(x=>x.dueDate && isDue(x.dueDate)).length;\n  const hot=prospects.filter(x=>priorityScore(x)>=70).length;\n\n  $('aPriority').textContent=avg(priorities);\n  $('aOpp').textContent=avg(oppScores);\n  $('aExit').textContent=avg(exitScores);\n  $('aOverdue').textContent=overdue;\n\n  const stageData=countBy(prospects,x=>x.stage||'Identified');\n  const industryData=countBy(prospects,x=>x.industry||'Not Set');\n  const activityData={\n    'Outreach':prospects.reduce((a,x)=>a+(x.outreach?.length||0),0),\n    'Coach':prospects.reduce((a,x)=>a+(x.coach?.length||0),0),\n    'Opportunity Scores':prospects.reduce((a,x)=>a+(x.opportunities?.length||0),0),\n    'Exit Assessments':prospects.reduce((a,x)=>a+(x.assessments?.length||0),0),\n    'Notes\/History':prospects.reduce((a,x)=>a+(x.history?.length||0),0)\n  };\n  renderBars('stageChart',stageData,total);\n  renderBars('industryChart',industryData,total);\n  renderBars('activityChart',activityData,Object.values(activityData).reduce((a,b)=>a+b,0));\n\n  const top=sortedByPriority().slice(0,10);\n  $('topOpportunityTable').innerHTML=top.length?`<table class=\"report-table\"><thead><tr><th>Rank<\/th><th>Business<\/th><th>Stage<\/th><th>Priority<\/th><th>Opp<\/th><th>Exit<\/th><th>Next Action<\/th><\/tr><\/thead><tbody>${top.map((r,i)=>{\n    const x=r.p;\n    return `<tr><td>${i+1}<\/td><td>${x.bizName}<\/td><td>${x.stage||'Identified'}<\/td><td>${r.score}<\/td><td>${x.opportunities?.[0]?.score||'\u2014'}<\/td><td>${x.assessments?.[0]?.score||'\u2014'}<\/td><td>${x.nextAction||'\u2014'}<\/td><\/tr>`;\n  }).join('')}<\/tbody><\/table>`:'<div class=\"empty-state\">No prospects yet.<\/div>';\n\n  let narrative='No prospect data yet. Load demo data or create records to generate analytics.';\n  if(total){\n    narrative=`Current pipeline includes ${total} prospect${total===1?'':'s'}, with ${hot} hot prospect${hot===1?'':'s'} scoring 70+ priority and ${overdue} overdue or due follow-up${overdue===1?'':'s'}. Average priority score is ${avg(priorities)}\/100.`;\n    if(avg(oppScores)) narrative += ` Average opportunity score is ${avg(oppScores)}\/100.`;\n    if(avg(exitScores)) narrative += ` Average exit readiness score is ${avg(exitScores)}\/100.`;\n  }\n  $('analyticsNarrative').textContent=narrative;\n  $('brokerActivityReport').textContent=`Broker Activity Snapshot\nTotal Prospects: ${total}\nHot Prospects: ${hot}\nFollow-Ups Due\/Overdue: ${overdue}\nAverage Priority Score: ${avg(priorities)}\/100\nAverage Opportunity Score: ${avg(oppScores)}\/100\nAverage Exit Readiness Score: ${avg(exitScores)}\/100\nOutreach Packages Generated: ${activityData['Outreach']}\nConversation Coach Outputs: ${activityData['Coach']}\nOpportunity Scorecards: ${activityData['Opportunity Scores']}\nExit Readiness Assessments: ${activityData['Exit Assessments']}\n\nRecommended Management Focus:\n${overdue>0?'- Clear overdue follow-ups first.':'- No overdue follow-ups currently.'}\n${hot>0?'- Prioritize hot prospects with 70+ priority scores.':'- Build opportunity and exit readiness scoring for more prospects.'}\n${avg(exitScores)<60?'- Improve readiness work by using the Exit Assessment module more consistently.':'- Maintain readiness reviews and move qualified prospects toward seller conversations.'}`;\n}\nfunction exportAnalyticsCSV(){\n  const headers=['Business','Industry','Location','Stage','Priority Score','Opportunity Score','Exit Readiness Score','Next Action','Due Date','Outreach Count','Coach Count','History Count'];\n  const rows=prospects.map(x=>[\n    x.bizName,x.industry,x.location,x.stage,priorityScore(x),x.opportunities?.[0]?.score||'',x.assessments?.[0]?.score||'',x.nextAction,x.dueDate,x.outreach?.length||0,x.coach?.length||0,x.history?.length||0\n  ].map(escapeCSV).join(','));\n  const csv=[headers.map(escapeCSV).join(','),...rows].join('\\n');\n  const blob=new Blob([csv],{type:'text\/csv;charset=utf-8'});\n  const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='ai-deal-sourcing-analytics.csv';a.click();\n}\n\n\n\n\n\n\n\n\n\nlet rollupIntel=null;\nlet selectedRollupKey=null;\n\nfunction normClusterText(v){\n  return (v||'Not Set').toString().trim() || 'Not Set';\n}\nfunction rollupKeyFor(x,mode){\n  const industry=normClusterText(x.industry);\n  const location=normClusterText(x.location);\n  if(mode==='location')return location;\n  if(mode==='industryLocation')return industry+' \u00b7 '+location;\n  return industry;\n}\nfunction rollupAnalyzeCluster(key,items){\n  const scans=items.map(x=>typeof scanProspect==='function'?scanProspect(x):{score:50,type:'General Prospect',grade:'C'});\n  const buyerRows=items.map(x=>typeof buyerMatchAnalyze==='function'?buyerMatchAnalyze(x):null).filter(Boolean);\n  const avgScan=Math.round(scans.reduce((a,b)=>a+b.score,0)\/Math.max(1,scans.length));\n  const avgPriority=Math.round(items.reduce((a,x)=>a+(typeof priorityScore==='function'?priorityScore(x):50),0)\/Math.max(1,items.length));\n  const strong=items.filter((x,i)=>(scans[i]?.score||0)>=70).length;\n  const platform=items.filter((x,i)=>(scans[i]?.score||0)>=80 || (x.employees&&parseInt(x.employees,10)>=20)).length;\n  let score=Math.min(100,Math.round(avgScan*.45 + avgPriority*.35 + Math.min(items.length*8,20)));\n  if(strong>=2)score+=6;\n  if(platform>=1)score+=6;\n  score=Math.min(100,score);\n\n  let thesis='Potential add-on acquisition cluster';\n  if(platform>=1 && items.length>=3)thesis='Platform plus add-on roll-up opportunity';\n  else if(items.length>=5)thesis='Market consolidation opportunity';\n  else if(strong>=2)thesis='Strong add-on acquisition cluster';\n\n  const buyerType=buyerRows[0]?.top?.type||'Strategic Buyer';\n  const risks=[];\n  if(items.length<3)risks.push('Small cluster; more sourcing recommended.');\n  if(strong<2)risks.push('Limited number of high-probability seller candidates.');\n  if(platform<1)risks.push('No clear platform candidate identified yet.');\n  if(!risks.length)risks.push('No major roll-up gaps from current prospect data.');\n\n  const drivers=[];\n  drivers.push(`${items.length} prospects in cluster`);\n  if(strong)drivers.push(`${strong} strong seller opportunities`);\n  if(platform)drivers.push(`${platform} possible platform candidate(s)`);\n  drivers.push(`Likely buyer type: ${buyerType}`);\n\n  return {key,items,score,avgScan,avgPriority,strong,platform,thesis,buyerType,drivers,risks};\n}\nfunction generateRollupIntel(){\n  const mode=val('rollupClusterBy')||'industry';\n  const min=parseInt(val('rollupMin')||'2',10);\n  const groups={};\n  prospects.forEach(x=>{\n    const k=rollupKeyFor(x,mode);\n    if(!groups[k])groups[k]=[];\n    groups[k].push(x);\n  });\n  const clusters=Object.entries(groups)\n    .filter(([k,items])=>items.length>=min)\n    .map(([k,items])=>rollupAnalyzeCluster(k,items))\n    .sort((a,b)=>b.score-a.score);\n  rollupIntel={date:new Date().toLocaleString(),mode,min,clusters};\n  selectedRollupKey=clusters[0]?.key||null;\n  renderRollupIntel();\n}\nfunction renderRollupIntel(){\n  if(!$('rollupTab'))return;\n  if(!rollupIntel)generateRollupIntel();\n  const clusters=rollupIntel?.clusters||[];\n  $('ruClusters').textContent=clusters.length;\n  $('ruStrong').textContent=clusters.reduce((a,c)=>a+c.strong,0);\n  $('ruPlatform').textContent=clusters.reduce((a,c)=>a+c.platform,0);\n  $('ruAvg').textContent=clusters.length?Math.round(clusters.reduce((a,c)=>a+c.score,0)\/clusters.length):0;\n  const box=$('rollupClusters');\n  if(!clusters.length){box.innerHTML='<div class=\"empty-state\">No roll-up clusters yet. Source or add more prospects in the same industry or geography.<\/div>';$('rollupMemo').textContent='Add more prospects to identify roll-up opportunities.';return}\n  box.innerHTML=clusters.map(c=>`<div class=\"cluster-card\" onclick=\"selectRollupCluster('${c.key.replace(\/'\/g,\"\\\\'\")}')\">\n    <div class=\"cluster-score\">${c.score}<\/div>\n    <b>${c.key}<\/b><br>\n    <span class=\"rollup-pill hot\">${c.thesis}<\/span>\n    <span class=\"rollup-pill blue\">${c.items.length} prospects<\/span>\n    <span class=\"rollup-pill\">${c.strong} strong<\/span>\n    <span class=\"rollup-pill\">${c.platform} platform<\/span>\n    <p><strong>Likely Buyer:<\/strong> ${c.buyerType}<\/p>\n  <\/div>`).join('');\n  selectRollupCluster(selectedRollupKey||clusters[0].key);\n}\nfunction selectRollupCluster(key){\n  selectedRollupKey=key;\n  const c=(rollupIntel?.clusters||[]).find(x=>x.key===key);\n  if(!c)return;\n  $('rollupSelected').textContent=`${c.key}\nCluster Score: ${c.score}\/100\nThesis: ${c.thesis}\nProspects: ${c.items.length}\nStrong Opportunities: ${c.strong}\nPlatform Candidates: ${c.platform}\nLikely Buyer Type: ${c.buyerType}`;\n\n  $('rollupMemo').textContent=`Acquisition Roll-Up Strategy Memo\n\nCluster:\n${c.key}\n\nRoll-Up Thesis:\n${c.thesis}\n\nCluster Score:\n${c.score}\/100\n\nProspects in Cluster:\n${c.items.map(x=>'- '+x.bizName+' ('+(x.stage||'Identified')+')').join('\\n')}\n\nValue Drivers:\n${c.drivers.map(d=>'- '+d).join('\\n')}\n\nRisks \/ Gaps:\n${c.risks.map(r=>'- '+r).join('\\n')}\n\nRecommended Broker Strategy:\n${c.thesis.includes('Platform')?'Identify the strongest platform candidate first, then position smaller businesses as add-ons.':c.thesis.includes('consolidation')?'Build a market map and approach owners with a consolidation\/buyer-demand thesis.':'Use the cluster as proof of buyer demand and create targeted outreach around acquisition interest.'}\n\nNext Actions:\n1. Research owners and websites for each company in this cluster.\n2. Run Opportunity Scanner on each prospect.\n3. Generate tailored outreach for the top 3 candidates.\n4. Prepare buyer positioning notes for likely acquirers.\n5. Track responses in pipeline.`;\n}\nfunction saveRollupIntel(){\n  if(!selectedRollupKey||!rollupIntel){alert('Generate and select a cluster first.');return}\n  const c=rollupIntel.clusters.find(x=>x.key===selectedRollupKey);\n  if(!c)return;\n  c.items.forEach(x=>{\n    ensureArrays(x);\n    x.history.unshift(hist('Roll-Up Intelligence',`${c.thesis} \u00b7 Cluster ${c.key} \u00b7 Score ${c.score}\/100.`));\n  });\n  persist();renderAll();\n  alert('Roll-up insight saved to all prospects in selected cluster.');\n}\nfunction exportRollupIntel(){\n  if(!rollupIntel)generateRollupIntel();\n  const clusters=rollupIntel?.clusters||[];\n  const text=`Deal Origination Command Center Report\n\nGenerated: ${new Date().toLocaleString()}\n\n${clusters.map(c=>`CLUSTER: ${c.key}\nScore: ${c.score}\/100\nThesis: ${c.thesis}\nLikely Buyer: ${c.buyerType}\nProspects:\n${c.items.map(x=>'- '+x.bizName).join('\\n')}\nDrivers:\n${c.drivers.map(d=>'- '+d).join('\\n')}\nRisks:\n${c.risks.map(r=>'- '+r).join('\\n')}`).join('\\n\\n---\\n\\n')}`;\n  const blob=new Blob([text],{type:'text\/plain;charset=utf-8'});\n  const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='acquisition-rollup-intelligence.txt';a.click();\n}\n\nlet buyerMatchIntel=null;\n\nfunction buyerMatchAnalyze(x){\n  ensureArrays(x);\n  const scan=typeof scanProspect==='function'?scanProspect(x):{score:50,type:'General Prospect',grade:'C',probability:'Medium'};\n  const industry=(x.industry||'').toLowerCase();\n  const location=x.location||'';\n  const employees=parseInt(x.employees||0,10)||0;\n  const opp=x.opportunities?.[0]?.score||0;\n  const exit=x.assessments?.[0]?.score||0;\n  const priority=typeof priorityScore==='function'?priorityScore(x):50;\n\n  const service=['hvac','plumbing','electrical','roofing','landscaping','pest','pool','cleaning','auto repair'].some(k=>industry.includes(k));\n  const food=['restaurant','cafe','bar','bakery','food'].some(k=>industry.includes(k));\n  const professional=['accounting','legal','insurance','agency','marketing','consulting'].some(k=>industry.includes(k));\n\n  const matches=[];\n  let strategic=55, ownerop=55, search=50, pe=35;\n\n  if(service){strategic+=20; search+=15; pe+=10}\n  if(food){ownerop+=20; strategic+=5}\n  if(professional){strategic+=15; search+=15}\n  if(employees>=5&&employees<=30){ownerop+=15; search+=12}\n  if(employees>=20&&employees<=75){strategic+=15; pe+=20}\n  if(scan.score>=80){strategic+=10; search+=10; pe+=8}\n  if(opp>=70){strategic+=8; search+=8; pe+=8}\n  if(exit>=70){ownerop+=8; search+=8}\n  if(priority>=75){strategic+=8; search+=8}\n\n  matches.push({type:'Strategic Buyer',score:Math.min(100,strategic),fit:'Existing company seeking expansion, territory growth, customer base, or add-on acquisition.',approach:'Position the business as a platform or add-on acquisition with local reputation and customer relationships.'});\n  matches.push({type:'Owner Operator',score:Math.min(100,ownerop),fit:'Individual buyer seeking an established local business to operate directly.',approach:'Emphasize cash flow stability, training, seller transition support, and operational simplicity.'});\n  matches.push({type:'Search Fund \/ Independent Sponsor',score:Math.min(100,search),fit:'Acquisition entrepreneur looking for a durable, locally defensible business.',approach:'Emphasize recurring demand, defensible niche, management handoff, and growth runway.'});\n  matches.push({type:'Private Equity \/ Family Office',score:Math.min(100,pe),fit:'Institutional buyer or family office seeking scalable platform or add-on opportunity.',approach:'Emphasize systems, management depth, EBITDA potential, and consolidation strategy.'});\n\n  matches.sort((a,b)=>b.score-a.score);\n\n  const top=matches[0];\n  const memo=`Buyer Match Summary for ${x.bizName}\n\nBest Buyer Type:\n${top.type} (${top.score}\/100 fit)\n\nWhy:\n${top.fit}\n\nRecommended Positioning:\n${top.approach}\n\nIndustry:\n${x.industry||'\u2014'}\n\nLocation:\n${location||'\u2014'}\n\nSeller Opportunity Context:\n${scan.type} \u00b7 ${scan.grade} \u00b7 ${scan.probability} seller probability\n\nSuggested Broker Action:\n${top.type==='Strategic Buyer'?'Research regional competitors and adjacent operators that may want territory or customer expansion.':top.type==='Owner Operator'?'Prepare owner-operator friendly summary emphasizing training, transition, and cash-flow story.':top.type==='Search Fund \/ Independent Sponsor'?'Frame the opportunity around durable demand, transitionability, and growth runway.':'Confirm financial quality and management depth before positioning to institutional buyers.'}`;\n\n  return {matches,memo,top,scan};\n}\n\nfunction generateBuyerMatches(){\n  const x=p();\n  if(!x){alert('Select a prospect first.');return}\n  buyerMatchIntel={date:new Date().toLocaleString(),business:x.bizName,...buyerMatchAnalyze(x)};\n  $('buyerSelected').textContent=`${x.bizName}\nIndustry: ${x.industry||'\u2014'}\nLocation: ${x.location||'\u2014'}\nEmployees: ${x.employees||'\u2014'}\nPipeline Stage: ${x.stage||'Identified'}`;\n\n  $('buyerMatches').innerHTML=buyerMatchIntel.matches.map(m=>`<div class=\"match-card\">\n<div class=\"match-score\">${m.score}<\/div>\n<b>${m.type}<\/b><br>\n<span class=\"match-pill ${m.score>=75?'hot':'blue'}\">${m.score>=75?'Strong Fit':'Possible Fit'}<\/span>\n<p><strong>Fit:<\/strong> ${m.fit}<\/p>\n<p><strong>Positioning:<\/strong> ${m.approach}<\/p>\n<\/div>`).join('');\n\n  $('buyerMemo').textContent=buyerMatchIntel.memo;\n  renderBuyerMetrics();\n}\nfunction renderBuyerMetrics(){\n  if(!$('bmStrategic'))return;\n  const rows=prospects.map(buyerMatchAnalyze);\n  $('bmStrategic').textContent=rows.filter(r=>r.top.type==='Strategic Buyer').length;\n  $('bmOwnerOps').textContent=rows.filter(r=>r.top.type==='Owner Operator').length;\n  $('bmSearch').textContent=rows.filter(r=>r.top.type==='Search Fund \/ Independent Sponsor').length;\n  $('bmPE').textContent=rows.filter(r=>r.top.type==='Private Equity \/ Family Office').length;\n}\nfunction saveBuyerMatch(){\n  const x=p();\n  if(!x){alert('Select a prospect first.');return}\n  if(!buyerMatchIntel)generateBuyerMatches();\n  ensureArrays(x);\n  x.history.unshift(hist('Buyer Match Engine',`Best buyer type: ${buyerMatchIntel.top.type} (${buyerMatchIntel.top.score}\/100 fit).`));\n  x.nextAction=`Research ${buyerMatchIntel.top.type} targets`;\n  $('nextAction').value=x.nextAction;\n  persist();renderAll();\n  alert('Buyer match insight saved.');\n}\nfunction exportBuyerMatch(){\n  if(!buyerMatchIntel)generateBuyerMatches();\n  if(!buyerMatchIntel)return;\n  const text=`Deal Origination Command Center\nBusiness: ${buyerMatchIntel.business}\n\n${buyerMatchIntel.memo}\n\nBuyer Type Rankings:\n${buyerMatchIntel.matches.map(m=>`${m.type}: ${m.score}\/100\nFit: ${m.fit}\nPositioning: ${m.approach}`).join('\\n\\n')}`;\n  const blob=new Blob([text],{type:'text\/plain;charset=utf-8'});\n  const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='buyer-match-intelligence.txt';a.click();\n}\n\nlet successionIntel=null;\n\nfunction successionAnalyze(x){\n  ensureArrays(x);\n  const scan=typeof scanProspect==='function'?scanProspect(x):{score:50,type:'General Prospect',grade:'C',probability:'Medium',approach:'Educational Exit Planning Conversation'};\n  const ctx=(x.context||'').toLowerCase();\n  const industry=(x.industry||'').toLowerCase();\n  const years=parseInt(x.years||0,10)||0;\n  const exitScore=x.assessments?.[0]?.score||0;\n  const opp=x.opportunities?.[0]?.score||0;\n  let readiness=Math.min(100,Math.round(scan.score*.45 + (exitScore||50)*.30 + (opp||50)*.25));\n\n  let persona='General Exit Planning Prospect';\n  if(ctx.includes('retirement')||years>=25) persona='Retirement Seller';\n  else if(ctx.includes('succession')||ctx.includes('family')||years>=18) persona='Family Succession Candidate';\n  else if(ctx.includes('burnout')||ctx.includes('owner fatigue')) persona='Lifestyle Seller';\n  else if(ctx.includes('no website')||ctx.includes('website: \u2014')) persona='Growth Ceiling Seller';\n  else if(scan.type==='Strategic Acquisition'||['hvac','plumbing','electrical','roofing','pest','auto repair','pool'].some(k=>industry.includes(k))) persona='Strategic Seller';\n  else if(scan.type==='Legacy Exit'||scan.score>=80) persona='Legacy Preservation Seller';\n\n  let timeline='Long-Term (5+ Years)';\n  if(readiness>=82) timeline='Immediate to Near-Term (0-12 Months)';\n  else if(readiness>=68) timeline='Near-Term (12-24 Months)';\n  else if(readiness>=50) timeline='Mid-Term (24-60 Months)';\n\n  let style='Relationship First';\n  if(persona==='Strategic Seller') style='Market Opportunity \/ Buyer Demand';\n  if(persona==='Growth Ceiling Seller') style='Value Improvement Advisor';\n  if(persona==='Retirement Seller'||persona==='Family Succession Candidate'||persona==='Legacy Preservation Seller') style='Legacy and Succession Advisor';\n  if(persona==='Lifestyle Seller') style='Freedom and Lifestyle Planning';\n\n  let likelyObjection='I am not ready to sell.';\n  if(persona==='Retirement Seller') likelyObjection='I have not decided when I want to retire.';\n  if(persona==='Family Succession Candidate') likelyObjection='I may pass the business to family.';\n  if(persona==='Growth Ceiling Seller') likelyObjection='The business could still grow if I had the right help.';\n  if(persona==='Strategic Seller') likelyObjection='I do not know if buyers would really be interested.';\n  if(persona==='Lifestyle Seller') likelyObjection='I am too busy to think about selling right now.';\n\n  return {persona,readiness,timeline,style,likelyObjection,scan};\n}\n\nfunction generateSuccessionIntel(){\n  const x=p();\n  if(!x){alert('Select a prospect first.');return}\n  const a=successionAnalyze(x);\n  const goal=val('succGoal')||'discovery';\n  const customStyle=val('succStyle')||'relationship';\n  successionIntel={date:new Date().toLocaleString(),business:x.bizName,...a,goal,customStyle};\n\n  $('successionSelected').textContent=`${x.bizName}\nIndustry: ${x.industry||'\u2014'}\nLocation: ${x.location||'\u2014'}\nYears in Business: ${x.years||'\u2014'}\nCurrent Stage: ${x.stage||'Identified'}`;\n\n  $('successionPersona').innerHTML=`<h3>${a.persona}<\/h3>\n<div class=\"persona-score\">${a.readiness}%<\/div>\n<p>Exit Readiness Probability<\/p>\n<p><span class=\"intel-pill hot\">${a.timeline}<\/span><span class=\"intel-pill blue\">${a.style}<\/span><span class=\"intel-pill\">${a.scan.grade}<\/span><\/p>`;\n\n  $('successionGuidance').textContent=`Recommended Approach:\n${a.style}\n\nTransition Timeline:\n${a.timeline}\n\nConversation Priority:\n${a.scan.grade} \u00b7 ${a.scan.probability} Seller Probability\n\nBroker Positioning:\n${a.persona==='Retirement Seller'?'Position yourself as a confidential retirement and wealth-transition advisor, not a salesperson.':a.persona==='Family Succession Candidate'?'Focus on options: family transfer, partial sale, management transition, or outside buyer.':a.persona==='Lifestyle Seller'?'Lead with reducing owner stress, creating flexibility, and exploring transition options.':a.persona==='Growth Ceiling Seller'?'Frame the conversation around unlocking value before the business plateaus further.':a.persona==='Strategic Seller'?'Lead with buyer demand, consolidation trends, and strategic acquisition interest.':'Lead with legacy, confidential planning, and protecting employees\/customers.'}\n\nRecommended Next Step:\n${goal==='valuation'?'Invite the owner to a confidential valuation discussion.':goal==='assessment'?'Offer an exit readiness assessment.':goal==='listing'?'Prepare a listing strategy conversation if motivation is confirmed.':'Start with a confidential discovery call.'}`;\n\n  $('successionQuestions').textContent=`Opening Questions:\n1. Have you thought about what the next chapter of ${x.bizName} could look like?\n2. What would make a transition successful for you personally?\n3. Is your goal to eventually exit, slow down, bring in a successor, or keep growing?\n\nLegacy Questions:\n4. What would you want protected if the business changed hands?\n5. How important are employees, customers, and reputation in a future transition?\n6. Would you prefer a buyer who preserves the company culture?\n\nTiming Questions:\n7. If you could choose the ideal timeline, what would it be?\n8. What would need to happen before you felt ready?\n9. Are there personal, family, or market factors influencing timing?\n\nValuation Questions:\n10. Have you ever had a realistic market valuation completed?\n11. Do you know what buyers would consider strengths and risks?\n12. Would it be useful to understand what the business could be worth today versus after preparation?`;\n\n  $('successionObjections').textContent=`Likely Objection:\n\"${a.likelyObjection}\"\n\nSuggested Response:\nThat makes complete sense. My goal is not to push you into a sale. The best outcomes usually come from understanding options early, before there is any pressure to act.\n\nAdditional Responses:\n\u2022 This can simply be a planning conversation.\n\u2022 You do not need to be ready to sell to understand what creates value.\n\u2022 A confidential review helps you protect the future of what you have built.\n\u2022 If family succession is possible, we can compare that with other options.\n\u2022 If timing is not right, we can build a preparation roadmap.`;\n}\nfunction saveSuccessionIntel(){\n  const x=p();\n  if(!x){alert('Select a prospect first.');return}\n  if(!successionIntel)generateSuccessionIntel();\n  ensureArrays(x);\n  x.history.unshift(hist('Succession Intelligence',`${successionIntel.persona} \u00b7 ${successionIntel.readiness}% readiness \u00b7 ${successionIntel.timeline}. Recommended style: ${successionIntel.style}.`));\n  x.nextAction=successionIntel.readiness>=75?'Schedule succession planning conversation':'Send educational exit planning outreach';\n  $('nextAction').value=x.nextAction;\n  persist();renderAll();\n  alert('Succession intelligence saved to prospect history.');\n}\nfunction exportSuccessionIntel(){\n  if(!successionIntel)generateSuccessionIntel();\n  if(!successionIntel)return;\n  const text=`Deal Origination Command Center\nBusiness: ${successionIntel.business}\nExit Persona: ${successionIntel.persona}\nExit Readiness Probability: ${successionIntel.readiness}%\nTransition Timeline: ${successionIntel.timeline}\nRecommended Style: ${successionIntel.style}\nLikely Objection: ${successionIntel.likelyObjection}\n\nBROKER GUIDANCE\n${$('successionGuidance').innerText}\n\nCONVERSATION QUESTIONS\n${$('successionQuestions').innerText}\n\nOBJECTIONS & RESPONSES\n${$('successionObjections').innerText}`;\n  const blob=new Blob([text],{type:'text\/plain;charset=utf-8'});\n  const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='succession-intelligence.txt';a.click();\n}\nfunction renderSuccessionMetrics(){\n  if(!$('succRetire'))return;\n  const rows=prospects.map(successionAnalyze);\n  $('succRetire').textContent=rows.filter(r=>r.persona==='Retirement Seller').length;\n  $('succLegacy').textContent=rows.filter(r=>r.persona.includes('Legacy')||r.persona.includes('Succession')).length;\n  $('succStrategic').textContent=rows.filter(r=>r.persona==='Strategic Seller').length;\n  $('succReady').textContent=rows.filter(r=>r.readiness>=75).length;\n}\n\nlet smartSequence=null;\n\nfunction selectedScan(){\n  const x=p();\n  if(!x)return null;\n  if(typeof scanProspect==='function')return scanProspect(x);\n  return {score:50,grade:'C',probability:'Medium',type:'General Prospect',approach:'Educational Exit Planning Conversation',timing:'Follow up within 30 days',drivers:['Needs qualification'],risks:['Needs research']};\n}\nfunction sequenceTheme(scan){\n  const type=scan?.type||'General Prospect';\n  if(type==='Retirement Candidate')return {\n    theme:'Retirement Planning',\n    subject:'Planning the next chapter for your business',\n    angle:'A confidential conversation about retirement, timing, and preserving the value you have built.'\n  };\n  if(type==='Succession Opportunity')return {\n    theme:'Legacy Preservation',\n    subject:'Protecting the legacy of your business',\n    angle:'A conversation about preserving the company legacy and preparing for a future transition.'\n  };\n  if(type==='Strategic Acquisition')return {\n    theme:'Buyer Demand',\n    subject:'Buyer interest in businesses like yours',\n    angle:'A market-based conversation about current buyer demand and strategic acquisition interest.'\n  };\n  if(type==='Lifestyle Seller')return {\n    theme:'Lifestyle Transition',\n    subject:'Reducing owner dependence and planning options',\n    angle:'A confidential discussion about owner freedom, lifestyle goals, and transition options.'\n  };\n  if(type==='Growth Ceiling')return {\n    theme:'Value Improvement',\n    subject:'Unlocking value before a future transition',\n    angle:'A practical conversation about growth constraints, value improvement, and future saleability.'\n  };\n  if(type==='Legacy Exit')return {\n    theme:'Legacy Exit',\n    subject:'Preserving what you have built',\n    angle:'A conversation about legacy, market value, and the right timing for a confidential transition plan.'\n  };\n  return {\n    theme:'Exit Planning',\n    subject:'A confidential question about your business',\n    angle:'A low-pressure conversation about market value, buyer demand, and future exit planning.'\n  };\n}\nfunction smartBase(){\n  const x=p();\n  const scan=selectedScan();\n  const theme=sequenceTheme(scan);\n  return {x,scan,theme,tone:val('seqTone')||'professional',goal:val('seqGoal')||'conversation',cadence:val('seqCadence')||'7'};\n}\nfunction generateSmartSequence(){\n  const b=smartBase();\n  if(!b.x){alert('Select a prospect first.');return}\n  const x=b.x, s=b.scan, t=b.theme;\n  const owner=x.owner||'Business Owner';\n  const biz=x.bizName||'your business';\n  const industry=x.industry||'your industry';\n  const location=x.location||'your market';\n  const goalLine=b.goal==='valuation'?'compare notes on valuation and buyer demand':b.goal==='succession'?'talk through succession and transition planning':b.goal==='listing'?'discuss a confidential listing strategy':'start a confidential conversation';\n  const cadence=b.cadence;\n\n  $('sequenceStrategy').innerHTML=`<span class=\"angle-pill\">${s.grade}<\/span><span class=\"angle-pill\">${s.probability}<\/span><span class=\"angle-pill\">${s.type}<\/span><span class=\"angle-pill\">${t.theme}<\/span>\n\nRecommended Approach:\n${s.approach}\n\nOutreach Angle:\n${t.angle}\n\nRecommended Timing:\n${s.timing}`;\n\n  $('seqEmail1').textContent=`Subject: ${t.subject}\n\nHi ${owner},\n\nI came across ${biz} while reviewing established ${industry} businesses in ${location}. Based on its local presence and reputation, it stood out as the kind of company where long-term planning can make a meaningful difference.\n\nI work with business owners who want to understand their options before making any public decision \u2014 whether that means preparing for succession, exploring buyer demand, or simply understanding what the business might be worth in today's market.\n\nWould you be open to a brief confidential conversation to ${goalLine}?\n\nBest,\n[Broker Name]`;\n\n  $('seqEmail2').textContent=`Subject: A thought on timing and preparation\n\nHi ${owner},\n\nI wanted to follow up because many owners wait until they are ready to sell before thinking about value, buyer expectations, or transition structure.\n\nThe owners who usually do best are the ones who prepare early \u2014 even if they do not plan to sell immediately.\n\nFor a business like ${biz}, a short confidential review could help clarify:\n\u2022 Current buyer interest\n\u2022 Possible value drivers\n\u2022 Preparation gaps\n\u2022 Timing options\n\u2022 Whether a future transition is realistic\n\nWould it be useful to compare notes for 15 minutes?`;\n\n  $('seqEmail3').textContent=`Subject: Should I close the loop?\n\nHi ${owner},\n\nI do not want to be a bother, so I will close the loop for now.\n\nIf succession, retirement, valuation, or future transition planning ever becomes relevant for ${biz}, I would be happy to be a confidential resource.\n\nEven if now is not the right time, a quick conversation can often help owners understand what buyers look for and what steps improve value before a sale.\n\nBest,\n[Broker Name]`;\n\n  $('seqLinkedIn').textContent=`Hi ${owner}, I work with established business owners on confidential exit, succession, and valuation planning. ${biz} stood out while reviewing ${industry} businesses in ${location}. Thought it may be useful to connect.`;\n\n  $('seqPhone').textContent=`Opening:\nHi ${owner}, this is [Broker Name]. I work with owners of established ${industry} companies who want to understand market value, buyer interest, and future transition options.\n\nReason for call:\n${biz} stood out because it appears to be a strong local business. I am not calling to ask if you are selling today. I am calling to see if a confidential planning conversation would be useful.\n\nBridge:\nMany owners start thinking about this years before they actually make a move.\n\nQuestion:\nHave you ever had a confidential conversation about what the business might be worth or what a future transition could look like?\n\nClose:\nWould a short 15-minute call next week be reasonable?`;\n\n  $('seqVoicemail').textContent=`Hi ${owner}, this is [Broker Name]. I work with owners of established ${industry} businesses on confidential valuation and exit planning. ${biz} stood out as a company where a market perspective might be useful. No pressure and no assumption that you are selling \u2014 just wanted to offer a confidential conversation about value and future options. You can reach me at [phone].`;\n\n  $('seqGuide').textContent=`Succession \/ Exit Conversation Guide for ${biz}\n\n1. Opening Question\nHave you thought about what the next chapter of the business might look like over the next few years?\n\n2. Motivation Question\nWhat would make you consider a transition \u2014 retirement, lifestyle, family succession, growth capital, or something else?\n\n3. Owner Dependence\nHow involved are you in daily operations today?\n\n4. Transition Readiness\nIf the right opportunity came along, how prepared would the business be for buyer due diligence?\n\n5. Value Expectations\nHave you ever had a realistic market valuation completed?\n\n6. Legacy Question\nWhat would be most important to protect if you eventually transitioned the business?\n\n7. Next Step\nWould it make sense to prepare a confidential value and readiness snapshot so you can understand your options?`;\n\n  smartSequence={\n    date:new Date().toLocaleString(),\n    prospect:x.bizName,\n    scannerScore:s.score,\n    grade:s.grade,\n    probability:s.probability,\n    type:s.type,\n    theme:t.theme,\n    email1:$('seqEmail1').textContent,\n    email2:$('seqEmail2').textContent,\n    email3:$('seqEmail3').textContent,\n    linkedin:$('seqLinkedIn').textContent,\n    phone:$('seqPhone').textContent,\n    voicemail:$('seqVoicemail').textContent,\n    guide:$('seqGuide').textContent\n  };\n}\nfunction saveSmartSequence(){\n  const x=p();\n  if(!x){alert('Select a prospect first.');return}\n  if(!smartSequence)generateSmartSequence();\n  ensureArrays(x);\n  x.outreach.unshift(smartSequence);\n  x.history.unshift(hist('AI Outreach Sequence',`Generated ${smartSequence.theme} sequence for ${smartSequence.type} (${smartSequence.grade}, ${smartSequence.probability}).`));\n  x.stage=x.stage==='Identified'?'Outreach Sent':x.stage;\n  x.nextAction='Send first personalized outreach';\n  $('stage').value=x.stage;\n  $('nextAction').value=x.nextAction;\n  persist();renderAll();\n  alert('Smart outreach sequence saved to prospect history.');\n}\nfunction exportSmartSequence(){\n  if(!smartSequence)generateSmartSequence();\n  if(!smartSequence)return;\n  const text=`AI Outreach Sequence\nProspect: ${smartSequence.prospect}\nScanner Score: ${smartSequence.scannerScore}\nGrade: ${smartSequence.grade}\nSeller Probability: ${smartSequence.probability}\nOpportunity Type: ${smartSequence.type}\nTheme: ${smartSequence.theme}\n\nEMAIL 1\n${smartSequence.email1}\n\nEMAIL 2\n${smartSequence.email2}\n\nEMAIL 3\n${smartSequence.email3}\n\nLINKEDIN\n${smartSequence.linkedin}\n\nPHONE SCRIPT\n${smartSequence.phone}\n\nVOICEMAIL\n${smartSequence.voicemail}\n\nCONVERSATION GUIDE\n${smartSequence.guide}`;\n  const blob=new Blob([text],{type:'text\/plain;charset=utf-8'});\n  const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='ai-outreach-sequence.txt';a.click();\n}\n\nlet scannerResults=[];\n\nfunction scanProspect(x){\n  ensureArrays(x);\n  const ctx=(x.context||'').toLowerCase();\n  const industry=(x.industry||'').toLowerCase();\n  const opp=x.opportunities?.[0]?.score||0;\n  const exit=x.assessments?.[0]?.score||0;\n  const priority=typeof priorityScore==='function'?priorityScore(x):Math.max(opp,exit,40);\n  let score=35;\n  const ratingMatch=(x.context||'').match(\/Rating:\\s*([0-9.]+)\/i);\n  const reviewMatch=(x.context||'').match(\/Reviews:\\s*([0-9]+)\/i);\n  const yearsVal=parseInt(x.years||0,10)||0;\n  const employeesVal=parseInt(x.employees||0,10)||0;\n  const rating=ratingMatch?parseFloat(ratingMatch[1]):0;\n  const reviews=reviewMatch?parseInt(reviewMatch[1],10):0;\n  if(rating>=4.6)score+=14; else if(rating>=4.2)score+=10; else if(rating>=3.8)score+=6;\n  if(reviews>=150)score+=14; else if(reviews>=75)score+=10; else if(reviews>=25)score+=6;\n  if(yearsVal>=20)score+=16; else if(yearsVal>=15)score+=12; else if(yearsVal>=10)score+=8;\n  if(employeesVal>=5&&employeesVal<=50)score+=8;\n  if(ctx.includes('no website')||ctx.includes('website: \u2014'))score+=8;\n  const strongIndustries=['hvac','plumbing','electric','electrical','roofing','landscaping','pest','auto repair','pool','cleaning','restaurant'];\n  if(strongIndustries.some(k=>industry.includes(k)))score+=10;\n  if(ctx.includes('retirement'))score+=14;\n  if(ctx.includes('succession'))score+=14;\n  if(ctx.includes('burnout'))score+=10;\n  if(ctx.includes('owner-operated')||ctx.includes('owner managed'))score+=8;\n  if(ctx.includes('strong review')||ctx.includes('strong local reputation'))score+=8;\n  score+=Math.round(priority*.12);\n  score+=Math.round(opp*.10);\n  score+=Math.round(exit*.08);\n  score=Math.min(100,Math.max(0,score));\n\n  let probability='Low';\n  if(score>=85)probability='Very High';\n  else if(score>=70)probability='High';\n  else if(score>=50)probability='Medium';\n\n  let grade='D';\n  if(score>=90)grade='A+';\n  else if(score>=80)grade='A';\n  else if(score>=65)grade='B';\n  else if(score>=50)grade='C';\n\n  let type='General Prospect';\n  if(ctx.includes('retirement'))type='Retirement Candidate';\n  else if(ctx.includes('succession')||yearsVal>=20)type='Succession Opportunity';\n  else if(strongIndustries.some(k=>industry.includes(k))&&reviews>=75)type='Strategic Acquisition';\n  else if(ctx.includes('burnout'))type='Lifestyle Seller';\n  else if(ctx.includes('no website')||ctx.includes('website: \u2014'))type='Growth Ceiling';\n  else if(reviews>=150&&rating>=4.4)type='Legacy Exit';\n\n  let approach='Educational Exit Planning Conversation';\n  if(type==='Retirement Candidate')approach='Retirement and Wealth Transition Conversation';\n  if(type==='Succession Opportunity')approach='Legacy Preservation Conversation';\n  if(type==='Strategic Acquisition')approach='Strategic Buyer Demand Conversation';\n  if(type==='Lifestyle Seller')approach='Freedom and Lifestyle Transition Conversation';\n  if(type==='Growth Ceiling')approach='Value Improvement and Growth Ceiling Conversation';\n  if(type==='Legacy Exit')approach='Protecting Business Legacy Conversation';\n\n  let timing='Quarterly nurture';\n  if(score>=85)timing='Contact within 14 days';\n  else if(score>=70)timing='Contact within 30 days';\n  else if(score>=50)timing='Educational follow-up within 60 days';\n\n  const drivers=[];\n  if(rating>=4.4)drivers.push('Strong local rating');\n  if(reviews>=75)drivers.push('Significant review footprint');\n  if(yearsVal>=15)drivers.push('Mature business \/ succession potential');\n  if(employeesVal>=5&&employeesVal<=50)drivers.push('Brokerage-size employee profile');\n  if(strongIndustries.some(k=>industry.includes(k)))drivers.push('Acquisition-friendly service industry');\n  if(ctx.includes('no website')||ctx.includes('website: \u2014'))drivers.push('Weak digital presence may indicate untapped growth');\n  if(!drivers.length)drivers.push('Needs additional manual qualification');\n\n  const risks=[];\n  if(!rating)risks.push('No rating data detected');\n  if(!reviews)risks.push('No review volume detected');\n  if(!yearsVal)risks.push('Years in business not verified');\n  if(!employeesVal)risks.push('Employee count not verified');\n  if(!x.nextAction)risks.push('No next action scheduled');\n  if(!risks.length)risks.push('No major sourcing risks from current data');\n\n  return {id:x.id,bizName:x.bizName,score,probability,grade,type,approach,timing,drivers,risks,priority,opp,exit};\n}\nfunction runOpportunityScanner(){\n  scannerResults=prospects.map(scanProspect).sort((a,b)=>b.score-a.score);\n  renderOpportunityScanner();\n}\nfunction renderOpportunityScanner(){\n  if(!$('scannerTab'))return;\n  if(!scannerResults.length)scannerResults=prospects.map(scanProspect).sort((a,b)=>b.score-a.score);\n  $('scanHigh').textContent=scannerResults.filter(r=>r.probability==='High'||r.probability==='Very High').length;\n  $('scanSuccession').textContent=scannerResults.filter(r=>r.type.includes('Succession')||r.type.includes('Retirement')||r.type.includes('Legacy')).length;\n  $('scanStrategic').textContent=scannerResults.filter(r=>r.type==='Strategic Acquisition').length;\n  $('scanAplus').textContent=scannerResults.filter(r=>r.grade==='A+').length;\n  const box=$('scannerResults');\n  if(!scannerResults.length){box.innerHTML='<div class=\"empty-state\">No prospects yet. Use Prospect Sourcing to add prospects first.<\/div>';return}\n  box.innerHTML=scannerResults.slice(0,20).map(r=>{\n    const cls=r.grade==='A+'?'aplus':r.grade.toLowerCase().replace('+','');\n    return `<div class=\"scanner-item ${cls}\" onclick=\"selectProspect('${r.id}');renderScannerDetail('${r.id}')\">\n      <b>${r.bizName}<\/b>\n      <div><span class=\"scanner-badge hot\">Score ${r.score}<\/span><span class=\"scanner-badge\">${r.grade}<\/span><span class=\"scanner-badge\">${r.probability}<\/span><span class=\"scanner-badge warn\">${r.type}<\/span><\/div>\n      <small>${r.approach} \u00b7 ${r.timing}<\/small>\n    <\/div>`;\n  }).join('');\n  if(selectedId)renderScannerDetail(selectedId);\n}\nfunction renderScannerDetail(id){\n  const r=(scannerResults.length?scannerResults:prospects.map(scanProspect)).find(x=>x.id===id);\n  const box=$('scannerDetail');\n  if(!r){box.textContent='Select a prospect or run the scanner.';return}\n  box.innerHTML=`<div class=\"scanner-scorebox\"><div class=\"scanner-rank\">${r.grade}<\/div><div><h3>${r.bizName}<\/h3><p>Opportunity Score: ${r.score}\/100<br>Seller Probability: ${r.probability}<br>Opportunity Type: ${r.type}<\/p><\/div><\/div>\nRecommended Approach:\n${r.approach}\n\nRecommended Timing:\n${r.timing}\n\nOutreach Theme:\n${r.type==='Succession Opportunity'?'Protecting the business legacy and planning the next chapter.':r.type==='Strategic Acquisition'?'Understanding current buyer demand for companies in this category.':r.type==='Growth Ceiling'?'Unlocking value and growth options before a future sale.':'Confidential exit planning and business value conversation.'}\n\nTop Value Drivers:\n${r.drivers.map(d=>'\u2022 '+d).join('\\n')}\n\nTop Risks \/ Research Gaps:\n${r.risks.map(d=>'\u2022 '+d).join('\\n')}\n\nNext Best Action:\n${r.score>=85?'Prepare highly personalized outreach and attempt direct owner conversation.':r.score>=70?'Generate outreach sequence and schedule follow-up.':r.score>=50?'Add to nurture sequence and complete research.':'Keep in long-term watchlist.'}`;\n}\nfunction saveScannerInsight(){\n  if(!selectedId){alert('Select a prospect first.');return}\n  const x=p(); if(!x)return;\n  const r=scanProspect(x);\n  ensureArrays(x);\n  x.history.unshift(hist('Opportunity Scanner',`Score ${r.score}\/100 \u00b7 ${r.grade} \u00b7 ${r.probability} seller probability \u00b7 ${r.type}. Recommended approach: ${r.approach}.`));\n  x.nextAction=r.score>=85?'Direct owner outreach':r.score>=70?'Generate personalized outreach':r.score>=50?'Complete additional research':'Long-term nurture';\n  $('nextAction').value=x.nextAction;\n  persist();renderAll();renderOpportunityScanner();\n  alert('Scanner insight saved to prospect history.');\n}\nfunction exportScannerCSV(){\n  if(!scannerResults.length)runOpportunityScanner();\n  const headers=['Business','Scanner Score','Grade','Seller Probability','Opportunity Type','Recommended Approach','Timing','Priority Score','Opportunity Score','Exit Score'];\n  const rows=scannerResults.map(r=>[r.bizName,r.score,r.grade,r.probability,r.type,r.approach,r.timing,r.priority,r.opp,r.exit].map(escapeCSV).join(','));\n  const csv=[headers.map(escapeCSV).join(','),...rows].join('\\n');\n  const blob=new Blob([csv],{type:'text\/csv;charset=utf-8'});\n  const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='ai-seller-opportunity-scanner.csv';a.click();\n}\n\nlet discoveryResults=[];\n\nfunction demoBusinessNames(industry, city){\n  const cleanIndustry=(industry||'Business').trim();\n  const base=[\n    `${city} Premier ${cleanIndustry}`,\n    `Gulf Coast ${cleanIndustry} Services`,\n    `Legacy ${cleanIndustry} Group`,\n    `Sunshine State ${cleanIndustry}`,\n    `Family First ${cleanIndustry}`,\n    `Bay Area ${cleanIndustry} Co.`,\n    `Trusted Local ${cleanIndustry}`,\n    `Old Town ${cleanIndustry}`,\n    `ProLine ${cleanIndustry} & Repair`,\n    `Neighborhood ${cleanIndustry} Specialists`,\n    `Heritage ${cleanIndustry} Company`,\n    `Elite ${cleanIndustry} Solutions`,\n    `Central Florida ${cleanIndustry}`,\n    `Owner's Choice ${cleanIndustry}`,\n    `Main Street ${cleanIndustry}`\n  ];\n  return base;\n}\nfunction readinessForResult(r){\n  let score=0;\n  if(r.years>=20)score+=26; else if(r.years>=15)score+=21; else if(r.years>=10)score+=14; else score+=7;\n  if(r.rating>=4.6)score+=18; else if(r.rating>=4.2)score+=14; else if(r.rating>=3.8)score+=10; else score+=5;\n  if(r.reviews>=150)score+=16; else if(r.reviews>=75)score+=12; else if(r.reviews>=25)score+=8; else score+=4;\n  if(r.hasWebsite)score+=8; else score+=12;\n  if(r.signal.includes('retirement')||r.signal.includes('succession'))score+=18;\n  if(r.signal.includes('owner fatigue')||r.signal.includes('management'))score+=12;\n  if(['HVAC','Plumbing','Auto Repair','Restaurant','Cleaning','Landscaping'].some(k=>(r.industry||'').toLowerCase().includes(k.toLowerCase())))score+=8;\n  return Math.min(100,score);\n}\nfunction clean(v){return (v||'').toString().trim()}\nfunction flexibleLocationLabel(city,state,zip,county){\n  const parts=[];\n  if(city)parts.push(city);\n  if(county)parts.push(county);\n  if(state)parts.push(state);\n  if(zip)parts.push(zip);\n  return parts.length?parts.join(', '):'Selected Market';\n}\nfunction matchesFlexibleCriteria(r,criteria){\n  if(criteria.industry && !r.industry.toLowerCase().includes(criteria.industry.toLowerCase()) && !r.name.toLowerCase().includes(criteria.industry.toLowerCase())) return false;\n  if(criteria.city && !r.city.toLowerCase().includes(criteria.city.toLowerCase()) && !r.address.toLowerCase().includes(criteria.city.toLowerCase())) return false;\n  if(criteria.state && !r.state.toLowerCase().includes(criteria.state.toLowerCase()) && !r.address.toLowerCase().includes(criteria.state.toLowerCase())) return false;\n  if(criteria.zip && !(r.zip||'').toLowerCase().includes(criteria.zip.toLowerCase()) && !r.address.toLowerCase().includes(criteria.zip.toLowerCase())) return false;\n  if(criteria.county && !(r.county||'').toLowerCase().includes(criteria.county.toLowerCase())) return false;\n  if(r.rating < criteria.minRating) return false;\n  if(r.years < criteria.minYears) return false;\n  if(criteria.size!=='any'){\n    if(criteria.size==='1-5' && !(r.employees>=1&&r.employees<=5)) return false;\n    if(criteria.size==='6-20' && !(r.employees>=6&&r.employees<=20)) return false;\n    if(criteria.size==='21-50' && !(r.employees>=21&&r.employees<=50)) return false;\n    if(criteria.size==='50+' && !(r.employees>=50)) return false;\n  }\n  return true;\n}\nfunction buildDemoResults(){\n  const criteria={\n    industry:clean(val('discIndustry')),\n    city:clean(val('discCity')),\n    state:clean(val('discState')),\n    zip:clean(val('discZip')),\n    county:clean(val('discCounty')),\n    radius:clean(val('discRadius'))||'25',\n    minYears:+val('discYearsMin')||0,\n    size:val('discSize')||'any',\n    minRating:+val('discRating')||0,\n    count:+val('discCount')||10\n  };\n\n  const industry=criteria.industry||'Local Business';\n  const locationLabel=flexibleLocationLabel(criteria.city,criteria.state,criteria.zip,criteria.county);\n  const city=criteria.city||criteria.county||criteria.zip||'Market';\n  const state=criteria.state||'';\n  const county=criteria.county||'';\n  const zip=criteria.zip||'';\n\n  const names=demoBusinessNames(industry,city);\n  const signals=[\n    'Long operating history; possible retirement or succession planning angle',\n    'Strong reviews; owner-operated profile likely',\n    'Website appears dated; possible owner fatigue signal',\n    'High review count; good reputation and buyer appeal',\n    'Management hiring signal; owner may be stepping back',\n    'Family-owned language; possible succession discussion',\n    'Stable local presence; educational nurture recommended',\n    'No obvious signal; needs manual research',\n    'Reputation strong but web presence weak',\n    'Established operator; valuation conversation angle',\n    'Owner-managed business; strong referral base',\n    'Mature operation; potential succession gap',\n    'Good local reputation; possible strategic buyer interest',\n    'Long-term family business; exit planning angle',\n    'High service demand area; strong buyer appeal'\n  ];\n\n  let rows=names.concat(demoBusinessNames(industry,locationLabel)).slice(0,Math.max(criteria.count,15)).map((name,i)=>{\n    const rating=+(3.6+((i*7)%16)\/10).toFixed(1);\n    const years=5+((i*5)%28);\n    const reviews=18+((i*37)%260);\n    const employees=[3,8,14,22,37,58,11,6,44,19,27,75,9,16,33][i%15];\n    const r={\n      id:'disc_'+Date.now()+'_'+i,\n      name,\n      industry,\n      city:criteria.city||city,\n      state,\n      zip,\n      county,\n      radius:criteria.radius,\n      employees,\n      size:criteria.size,\n      address:`${100+i*17} Main Street${criteria.city?', '+criteria.city:''}${criteria.county?', '+criteria.county:''}${state?', '+state:''}${zip?' '+zip:''}`,\n      phone:`(813) 555-${String(1200+i*37).slice(0,4)}`,\n      website:i%4===0?'':`https:\/\/example-${i+1}.com`,\n      rating,\n      reviews,\n      years,\n      signal:signals[i%signals.length],\n      source:'Demo Data'\n    };\n    r.score=readinessForResult(r);\n    return r;\n  });\n\n  rows=rows.filter(r=>matchesFlexibleCriteria(r,criteria)).slice(0,criteria.count);\n\n  \/\/ If strict filters produce no demo rows, create flexible fallback rows that honor the fields the user supplied.\n  if(!rows.length){\n    rows=names.slice(0,criteria.count).map((name,i)=>{\n      const employees=criteria.size==='50+'?60:criteria.size==='21-50'?30:criteria.size==='6-20'?12:criteria.size==='1-5'?4:12+i;\n      const years=Math.max(criteria.minYears,10+i);\n      const rating=Math.max(criteria.minRating,4.1);\n      const r={\n        id:'disc_fallback_'+Date.now()+'_'+i,\n        name,\n        industry,\n        city:criteria.city||city,\n        state,\n        zip,\n        county,\n        radius:criteria.radius,\n        employees,\n        size:criteria.size,\n        address:`${200+i*11} Business Ave${criteria.city?', '+criteria.city:''}${criteria.county?', '+criteria.county:''}${state?', '+state:''}${zip?' '+zip:''}`,\n        phone:`(813) 555-${String(2200+i*41).slice(0,4)}`,\n        website:i%3===0?'':`https:\/\/sample-${i+1}.com`,\n        rating,\n        reviews:55+i*19,\n        years,\n        signal:criteria.industry?'Industry-targeted prospect sourced from flexible criteria':'Geography-targeted prospect sourced from flexible criteria',\n        source:'Demo Data'\n      };\n      r.score=readinessForResult(r);\n      return r;\n    });\n  }\n  return rows;\n}\nasync function runDiscovery(){\n  const mode=val('discMode');\n  $('discoveryResults').innerHTML='<div class=\"notice\">Searching prospects...<\/div>';\n  if(mode==='api'){\n    const endpoint=val('discEndpoint')||'\/api\/prospect-search';\n    const params={industry:val('discIndustry'),city:val('discCity'),state:val('discState'),zip:val('discZip'),county:val('discCounty'),radius:val('discRadius'),minYears:val('discYearsMin'),businessSize:val('discSize'),count:val('discCount')};\n    Object.keys(params).forEach(k=>{if(!params[k])delete params[k]});\n    const q=new URLSearchParams(params);\n    try{\n      const res=await fetch(endpoint+'?'+q.toString());\n      if(!res.ok)throw new Error('API endpoint not available');\n      discoveryResults=await res.json();\n      discoveryResults=discoveryResults.map((r,i)=>({...r,id:r.id||'api_'+Date.now()+'_'+i,source:r.source||'API',score:r.score||readinessForResult(r)}));\n    }catch(err){\n      $('discoverySummary').textContent='API endpoint is not connected yet. Showing demo results instead. Future backend should return JSON business records from Google Places or another source.';\n      discoveryResults=buildDemoResults();\n    }\n  }else{\n    discoveryResults=buildDemoResults();\n  }\n  renderDiscovery();\n}\nfunction renderDiscovery(){\n  const box=$('discoveryResults');\n  const summary=$('discoverySummary');\n  if(!discoveryResults.length){\n    summary.textContent='No matching prospects found. Try using fewer filters, lowering the rating filter, or broadening the geography.';\n    box.innerHTML='';\n    return;\n  }\n  const avg=Math.round(discoveryResults.reduce((a,b)=>a+b.score,0)\/discoveryResults.length);\n  summary.textContent=`Found ${discoveryResults.length} prospects. Average Seller Readiness Score: ${avg}\/100. Click \"Add to Pipeline\" to convert any discovery result into a saved prospect.`;\n  box.innerHTML=discoveryResults.sort((a,b)=>b.score-a.score).map(r=>`<div class=\"discovery-result\">\n    <div>\n      <h3 style=\"margin-top:0\">${r.name} <span class=\"source-pill\">${r.source||'Demo'}<\/span><\/h3>\n      <div class=\"discovery-meta\">\n        <span class=\"pill blue\">${r.industry}<\/span>\n        <span class=\"pill green\">${r.rating}\u2605 \u00b7 ${r.reviews} reviews<\/span>\n        <span class=\"pill amber\">${r.years} yrs est.<\/span>\n        <span class=\"pill\">${r.employees||'\u2014'} employees est.<\/span>\n        ${r.zip?`<span class=\"pill blue\">ZIP ${r.zip}<\/span>`:''}\n        ${r.county?`<span class=\"pill blue\">${r.county}<\/span>`:''}\n        ${r.radius?`<span class=\"pill\">Radius ${r.radius} mi<\/span>`:''}\n        ${r.website?'<span class=\"pill\">Website<\/span>':'<span class=\"pill red\">No Website Found<\/span>'}\n      <\/div>\n      <p><strong>Address:<\/strong> ${r.address||'\u2014'}<\/p>\n      <p><strong>Phone:<\/strong> ${r.phone||'\u2014'}<\/p>\n      <p><strong>Signal:<\/strong> ${r.signal||'Needs manual research'}<\/p>\n      <div class=\"discovery-actions\">\n        <button class=\"primary\" onclick=\"addDiscoveryToPipeline('${r.id}')\">Add to Pipeline<\/button>\n        <button class=\"light\" onclick=\"previewDiscoveryOutreach('${r.id}')\">Preview Outreach Angle<\/button>\n      <\/div>\n    <\/div>\n    <div class=\"seller-score\">${r.score}<\/div>\n  <\/div>`).join('');\n}\nfunction clearDiscovery(){\n  discoveryResults=[];\n  $('discoveryResults').innerHTML='';\n  $('discoverySummary').textContent='Run a search to source business prospects.';\n}\nfunction addDiscoveryToPipeline(id){\n  const r=discoveryResults.find(x=>x.id===id);\n  if(!r)return;\n  const prospect=ensureArrays({\n    id:'prospect_'+Date.now(),\n    bizName:r.name,\n    industry:r.industry,\n    location:`${r.city}, ${r.state}`,\n    owner:'',\n    revenue:'$1M\u2013$3M',\n    years:r.years,\n    employees:'',\n    context:`Discovered via Prospect Sourcing. Rating: ${r.rating}. Reviews: ${r.reviews}. Phone: ${r.phone||'\u2014'}. Website: ${r.website||'\u2014'}. Signal: ${r.signal}`,\n    stage:'Identified',\n    nextAction:'Research owner and generate outreach',\n    dueDate:'',\n    history:[hist('Prospect Discovered',`Added from Prospect Sourcing with Seller Readiness Score ${r.score}\/100.`)],\n    opportunities:[{date:new Date().toLocaleString(),score:r.score,category:r.score>=80?'Very High':r.score>=65?'High':r.score>=45?'Medium':'Low',approach:r.score>=75?'Immediate Outreach':'Research and Nurture',angle:r.signal||'Local business prospecting angle.'}],\n    assessments:[],\n    outreach:[],\n    coach:[]\n  });\n  prospects.unshift(prospect);\n  selectedId=prospect.id;\n  persist();\n  renderAll();\n  selectProspect(prospect.id);\n  alert('Prospect added to pipeline.');\n}\nfunction previewDiscoveryOutreach(id){\n  const r=discoveryResults.find(x=>x.id===id);\n  if(!r)return;\n  $('discoverySummary').textContent=`Suggested angle for ${r.name}: ${r.score>=75?'Lead with confidential valuation, succession planning, and market demand.':'Lead with educational exit planning and a low-pressure readiness conversation.'} Signal: ${r.signal}`;\n}\n\nlet workflowTasks=[];\n\nfunction makeTask(x){\n  ensureArrays(x);\n  const priority=priorityScore(x);\n  const opp=x.opportunities?.[0]?.score||0;\n  const exit=x.assessments?.[0]?.score||0;\n  const hasAssessment=(x.assessments?.length||0)>0;\n  const hasOutreach=(x.outreach?.length||0)>0;\n  const due=isDue(x.dueDate);\n  let title='Review Prospect';\n  let action='Open prospect record and update next action.';\n  let severity='low';\n  let module='pipeline';\n\n  if(due){\n    title='Complete Follow-Up';\n    action=x.nextAction||'Follow up with seller\/prospect.';\n    severity='high';\n    module='pipeline';\n  } else if(priority>=80){\n    title='Schedule Valuation Consultation';\n    action='Move this prospect toward a confidential valuation or seller discovery conversation.';\n    severity='high';\n    module='coach';\n  } else if(opp>=70 && !hasAssessment){\n    title='Send Exit Readiness Assessment';\n    action='Use the Exit Assessment module to qualify seller readiness and timeline.';\n    severity='medium';\n    module='assessment';\n  } else if(!hasOutreach && (x.stage==='Identified'||x.stage==='Researched'||!x.stage)){\n    title='Generate First Outreach';\n    action='Create personalized email, LinkedIn, and direct mail outreach.';\n    severity='medium';\n    module='outreach';\n  } else if((x.stage==='Outreach Sent') && !(x.coach?.length)){\n    title='Prepare Seller Conversation';\n    action='Use the Conversation Coach before calling or meeting the owner.';\n    severity='medium';\n    module='coach';\n  } else if(!opp){\n    title='Calculate Opportunity Score';\n    action='Score this prospect to determine pursuit priority.';\n    severity='low';\n    module='scorecard';\n  } else if(!hasAssessment){\n    title='Complete Exit Readiness Review';\n    action='Assess whether the seller is market-ready or needs preparation.';\n    severity='low';\n    module='assessment';\n  }\n\n  return {\n    id:x.id,\n    bizName:x.bizName,\n    title,\n    action,\n    severity,\n    module,\n    priority,\n    stage:x.stage||'Identified',\n    dueDate:x.dueDate||'',\n    nextAction:x.nextAction||'',\n    opp,\n    exit\n  };\n}\nfunction generateWorkflowTasks(){\n  workflowTasks=sortedByPriority().map(r=>makeTask(r.p)).sort((a,b)=>{\n    const sev={high:3,medium:2,low:1};\n    return (sev[b.severity]-sev[a.severity]) || (b.priority-a.priority);\n  });\n  renderWorkflow();\n}\nfunction renderWorkflow(){\n  if(!$('workflowTab'))return;\n  if(!workflowTasks.length) workflowTasks=sortedByPriority().map(r=>makeTask(r.p));\n  const high=workflowTasks.filter(t=>t.severity==='high').length;\n  const due=workflowTasks.filter(t=>t.dueDate&&isDue(t.dueDate)).length;\n  $('wOpen').textContent=workflowTasks.length;\n  $('wHigh').textContent=high;\n  $('wDue').textContent=due;\n  $('wSuggest').textContent=workflowTasks.length;\n\n  const box=$('workflowQueue');\n  if(!workflowTasks.length){box.innerHTML='<div class=\"empty-state\">No workflow tasks yet. Add prospects or load demo data.<\/div>';return}\n  box.innerHTML=workflowTasks.slice(0,12).map(t=>`<div class=\"task-card ${t.severity}\">\n    <b>${t.title}<\/b>\n    <div class=\"task-meta\">${t.bizName} \u00b7 Priority ${t.priority} \u00b7 ${t.stage} ${t.dueDate?`\u00b7 Due ${t.dueDate}`:''}<\/div>\n    <p>${t.action}<\/p>\n    <div class=\"task-actions\">\n      <button class=\"light\" onclick=\"goModule('${t.module}','${t.id}')\">Open ${t.module}<\/button>\n      <button class=\"light\" onclick=\"selectProspect('${t.id}')\">Select<\/button>\n      <button class=\"secondary\" onclick=\"applyWorkflowTask('${t.id}','${t.title.replace(\/'\/g,\"\\\\'\")}')\">Save Task<\/button>\n    <\/div>\n  <\/div>`).join('');\n  renderSelectedWorkflow();\n}\nfunction renderSelectedWorkflow(){\n  const x=p();\n  const box=$('selectedWorkflow');\n  if(!box)return;\n  if(!x){box.textContent='Select a prospect or generate tasks to see workflow guidance.';return}\n  const t=makeTask(x);\n  box.textContent=`Recommended Workflow for ${x.bizName}\n\nPriority Score: ${t.priority}\/100\nCurrent Stage: ${t.stage}\nRecommended Task: ${t.title}\nAction: ${t.action}\n\nSuggested Module: ${t.module}\nOpportunity Score: ${t.opp||'Not calculated'}\nExit Readiness Score: ${t.exit||'Not calculated'}\n\nWorkflow Logic:\n${t.severity==='high'?'This prospect requires immediate attention because it is either high-priority or has a due\/overdue action.':t.severity==='medium'?'This prospect should be advanced through the next qualification or outreach step.':'This prospect needs foundational scoring, outreach, or qualification before becoming a priority.'}`;\n}\nfunction applyWorkflowTask(id,title){\n  selectProspect(id);\n  const x=p(); if(!x)return;\n  ensureArrays(x);\n  x.nextAction=title;\n  x.history.unshift(hist('Workflow Task Added',title));\n  $('nextAction').value=title;\n  persist();renderAll();\n  alert('Workflow task saved to prospect.');\n}\nfunction saveTopWorkflowTask(){\n  if(!workflowTasks.length)generateWorkflowTasks();\n  const t=workflowTasks[0];\n  if(!t){alert('No workflow task available.');return}\n  applyWorkflowTask(t.id,t.title);\n}\nfunction exportWorkflowCSV(){\n  if(!workflowTasks.length)generateWorkflowTasks();\n  const headers=['Business','Task','Action','Severity','Priority','Stage','Due Date','Module','Opportunity','Exit Readiness'];\n  const rows=workflowTasks.map(t=>[t.bizName,t.title,t.action,t.severity,t.priority,t.stage,t.dueDate,t.module,t.opp,t.exit].map(escapeCSV).join(','));\n  const csv=[headers.map(escapeCSV).join(','),...rows].join('\\n');\n  const blob=new Blob([csv],{type:'text\/csv;charset=utf-8'});\n  const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='ai-deal-sourcing-workflow.csv';a.click();\n}\n\n\n\n\n\nfunction apiSpecText(){\n return `Secure Prospect Search API Contract\n\nEndpoint:\nGET \/api\/prospect-search\n\nQuery Parameters:\nindustry, city, state, zip, county, radius, minYears, businessSize, count\n\nExample:\nGET \/wp-json\/ai-deal-sourcing\/v1\/prospect-search?industry=HVAC&zip=33626&county=Hillsborough&radius=25\n\nExpected Response:\n[\n  {\n    \"name\": \"ABC HVAC Services\",\n    \"industry\": \"HVAC\",\n    \"address\": \"123 Main St, Tampa, FL 33626\",\n    \"city\": \"Tampa\",\n    \"state\": \"FL\",\n    \"zip\": \"33626\",\n    \"county\": \"Hillsborough\",\n    \"phone\": \"(813) 555-1212\",\n    \"website\": \"https:\/\/example.com\",\n    \"rating\": 4.6,\n    \"reviews\": 187,\n    \"years\": 18,\n    \"employees\": 14,\n    \"signal\": \"Long operating history; possible succession angle\",\n    \"source\": \"Google Places\",\n    \"score\": 82\n  }\n]\n\nSecurity:\n- Keep API keys server-side.\n- Do not expose API keys in HTML or JavaScript.\n- Restrict Google API keys.\n- Rate limit requests.\n- Return only cleaned prospect data to the frontend.`;\n}\nfunction copyApiSpec(){\n const text=apiSpecText();\n navigator.clipboard?.writeText(text).then(()=>alert('API spec copied.')).catch(()=>alert(text));\n}\nasync function testApiEndpoint(){\n const endpoint=$('apiEndpointTest').value.trim()||'\/api\/prospect-search';\n const params={\n  industry:$('apiTestIndustry').value.trim(),\n  zip:$('apiTestZip').value.trim(),\n  county:$('apiTestCounty').value.trim(),\n  radius:$('apiTestRadius').value.trim()\n };\n Object.keys(params).forEach(k=>{if(!params[k])delete params[k]});\n const url=endpoint+'?'+new URLSearchParams(params).toString();\n $('apiTestStatus').textContent='Testing endpoint: '+url;\n try{\n  const res=await fetch(url);\n  if(!res.ok)throw new Error('HTTP '+res.status);\n  const data=await res.json();\n  $('apiTestStatus').textContent='Success. Endpoint returned '+(Array.isArray(data)?data.length:'non-array')+' record(s).';\n }catch(err){\n  $('apiTestStatus').textContent='Endpoint not connected yet or blocked in local\/WordPress test. This is expected until the backend proxy is created. Error: '+err.message;\n }\n}\n\nfunction runReleaseQA(){\n const checks=[\n  ['Browser localStorage available',(()=>{try{localStorage.setItem('qa_test','1');localStorage.removeItem('qa_test');return true}catch(e){return false}})()],\n  ['Prospect records can be stored',Array.isArray(prospects)],\n  ['Command Center module present',!!$('dashboardTab')],\n  ['Prospect Sourcing module present',!!$('discoveryTab')],\n  ['Outreach Generator module present',!!$('outreachTab')],\n  ['Pipeline module present',!!$('pipelineTab')],\n  ['Conversation Coach module present',!!$('coachTab')],\n  ['Opportunity Scorecard module present',!!$('scorecardTab')],\n  ['Exit Assessment module present',!!$('assessmentTab')],\n  ['Analytics module present',!!$('analyticsTab')],\n  ['AI Intelligence module present',!!$('intelligenceTab')],\n  ['Workflow Automation module present',!!$('workflowTab')],\n  ['Listing Conversion module present',!!$('conversionTab')],\n  ['Listing Presentation module present',!!$('presentationTab')]\n ];\n $('qaStorage').textContent=checks[0][1]?'OK':'Issue';\n $('qaProspects').textContent=prospects.length;\n $('qaChecklist').innerHTML=checks.map(c=>`<div class=\"qa-item\"><div class=\"qa-status ${c[1]?'pass':'warn'}\">${c[1]?'\u2713':'!'}<\/div><div><b>${c[0]}<\/b><br><small>${c[1]?'Passed':'Needs attention during WordPress test'}<\/small><\/div><\/div>`).join('');\n}\nfunction downloadReleaseNotes(){\n const notes=`AI Assisted Deal Sourcing V14 Deal Origination Command Center\n\nIncluded Modules:\n- Command Center\n- Prospect Sourcing\n- Prospect Pipeline\n- Outreach Generator\n- Seller Conversation Coach\n- Opportunity Scorecard\n- Exit Readiness Assessment\n- Seller Report\n- Analytics\n- AI Deal Intelligence\n- Workflow Automation\n- Listing Conversion Engine\n- Listing Presentation Generator\n- Release QA\n\nDeployment Notes:\n- Standalone HTML file for WordPress embedding.\n- Stores data in browser localStorage.\n- Prospect Sourcing currently supports demo\/mock data and API-ready endpoint structure.\n- Do not place Google Places API keys directly in this HTML file.\n- Future API integration should use a secure backend endpoint.\n\nRecommended Test:\n1. Install on hidden WordPress test page.\n2. Load demo data.\n3. Test every tab.\n4. Confirm data persists after reload.\n5. Check mobile layout.\n6. Create punch list before public release.`;\n const blob=new Blob([notes],{type:'text\/plain;charset=utf-8'});\n const a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='AI-Assisted-Deal-Sourcing-V14-Release-Notes.txt';a.click();\n}\n\nfunction getConversionForSelected(){\n const x=p();\n if(!x)return {pct:0,cls:'Not Classified'};\n return conversionData(x);\n}\nfunction generatePresentation(){\n const x=p();\n const box=$('presentationOutput');\n if(!x){box.innerHTML='<div class=\"empty-state\">Select a prospect first.<\/div>';return;}\n ensureArrays(x);\n const opp=x.opportunities?.[0]||{};\n const exit=x.assessments?.[0]||{};\n const conv=conversionData(x);\n const pri=priorityScore(x);\n const recommendation=conv.pct>=85?'Prepare engagement agreement and move toward listing strategy.':conv.pct>=75?'Schedule listing presentation and valuation discussion.':conv.pct>=65?'Launch valuation workflow and clarify seller expectations.':'Continue nurturing and complete missing qualification steps.';\n const risks=[];\n if(!exit.score)risks.push('Exit readiness assessment has not been completed.');\n if(!opp.score)risks.push('Opportunity scorecard has not been completed.');\n if(!x.nextAction)risks.push('No next action is currently scheduled.');\n if((x.history?.length||0)<3)risks.push('Limited activity history with this prospect.');\n if(!risks.length)risks.push('No major conversion blockers identified from current data.');\n const strengths=[];\n if((opp.score||0)>=70)strengths.push('Strong opportunity score indicates attractive prospect profile.');\n if((exit.score||0)>=70)strengths.push('Exit readiness indicates seller may be prepared for market conversations.');\n if(pri>=70)strengths.push('High priority score supports near-term broker attention.');\n if(x.stage&&x.stage!=='Identified')strengths.push('Prospect has progressed beyond initial identification.');\n if(!strengths.length)strengths.push('Additional qualification can reveal value drivers and seller motivation.');\n box.innerHTML=`<div class=\"pres-cover\">\n <h1>Confidential Listing Opportunity Review<\/h1>\n <p>Prepared for broker\/seller conversation using AI Assisted Deal Sourcing intelligence.<\/p>\n <\/div>\n <h2>${x.bizName}<\/h2>\n <p><strong>Industry:<\/strong> ${x.industry||'\u2014'}<br><strong>Location:<\/strong> ${x.location||'\u2014'}<br><strong>Pipeline Stage:<\/strong> ${x.stage||'Identified'}<\/p>\n <div class=\"pres-grid\">\n <div class=\"pres-box\"><div class=\"section-kicker\">Priority Score<\/div><div class=\"pres-score\">${pri}<\/div><\/div>\n <div class=\"pres-box\"><div class=\"section-kicker\">Listing Conversion<\/div><div class=\"pres-score\">${conv.pct}%<\/div><p>${conv.cls}<\/p><\/div>\n <div class=\"pres-box\"><div class=\"section-kicker\">Opportunity Score<\/div><div class=\"pres-score\">${opp.score||'\u2014'}<\/div><p>${opp.category||'Not scored'}<\/p><\/div>\n <div class=\"pres-box\"><div class=\"section-kicker\">Exit Readiness<\/div><div class=\"pres-score\">${exit.score||'\u2014'}<\/div><p>${exit.category||'Not assessed'}<\/p><\/div>\n <\/div>\n <div class=\"pres-section\"><h3>Executive Summary<\/h3><p>${x.bizName} is currently classified as <strong>${conv.cls}<\/strong> with an estimated listing conversion probability of <strong>${conv.pct}%<\/strong>. ${recommendation}<\/p><\/div>\n <div class=\"pres-section\"><h3>Seller \/ Business Context<\/h3><p>${x.context||'No additional context has been entered yet.'}<\/p><\/div>\n <div class=\"pres-section\"><h3>Key Strengths<\/h3><ul>${strengths.map(s=>`<li>${s}<\/li>`).join('')}<\/ul><\/div>\n <div class=\"pres-section\"><h3>Conversion Risks<\/h3><ul>${risks.map(s=>`<li>${s}<\/li>`).join('')}<\/ul><\/div>\n <div class=\"pres-section\"><h3>Recommended Listing Strategy<\/h3><p>${recommendation}<\/p><\/div>\n <div class=\"pres-section\"><h3>Recommended Next Steps<\/h3><ol><li>Confirm seller motivation, timing, and expectations.<\/li><li>Use the existing 360 Business Valuation Tool when the prospect is ready for valuation.<\/li><li>Prepare confidential seller materials and listing strategy.<\/li><li>Move qualified candidates toward engagement discussion.<\/li><\/ol><\/div>\n <div class=\"pres-section\"><p style=\"font-size:12px;color:#666\">Disclaimer: This presentation is a planning aid and does not replace a formal valuation, legal advice, tax advice, or a signed engagement agreement.<\/p><\/div>`;\n}\nfunction copyPresentation(){\n const box=$('presentationOutput');\n const text=box.innerText||box.textContent||'';\n if(!text.trim()){alert('Generate a presentation first.');return;}\n navigator.clipboard?.writeText(text).then(()=>alert('Presentation copied.')).catch(()=>alert('Copy failed.'));\n}\n\nfunction conversionData(x){\n const opp=x.opportunities?.[0]?.score||0;\n const exit=x.assessments?.[0]?.score||0;\n const pri=priorityScore(x);\n const pct=Math.min(95,Math.round(opp*0.35+exit*0.35+pri*0.3));\n let cls='Cold Prospect';\n if(pct>=85) cls='Ready for Engagement';\n else if(pct>=75) cls='Listing Candidate';\n else if(pct>=65) cls='Valuation Candidate';\n else if(pct>=50) cls='Qualified Seller';\n else if(pct>=35) cls='Warm Prospect';\n return {pct,cls};\n}\nfunction renderConversion(){\n if(!$('conversionTab')) return;\n const rows=prospects.map(p=>({p,...conversionData(p)})).sort((a,b)=>b.pct-a.pct);\n $('cCandidates').textContent=rows.filter(r=>r.pct>=75).length;\n $('cValuation').textContent=rows.filter(r=>r.pct>=65).length;\n $('cEngage').textContent=rows.filter(r=>r.pct>=85).length;\n $('cAvg').textContent=(rows.length?Math.round(rows.reduce((a,b)=>a+b.pct,0)\/rows.length):0)+'%';\n $('conversionQueue').innerHTML=rows.slice(0,15).map(r=>`${r.p.bizName} \u2014 ${r.cls} (${r.pct}%)`).join('<br>') || 'No prospects.';\n const funnel=['Cold Prospect','Warm Prospect','Qualified Seller','Valuation Candidate','Listing Candidate','Ready for Engagement'];\n $('conversionFunnel').innerHTML=funnel.map(f=>`${f}: ${rows.filter(r=>r.cls===f).length}`).join('<br>');\n}\n\nfunction renderIntelligence(){\n  if(!$('intelligenceTab')) return;\n  const x=p();\n  if(!x){\n    $('aiRecommendation').textContent='Select a prospect to generate AI intelligence.';\n    return;\n  }\n  const opp=x.opportunities?.[0]?.score||50;\n  const exit=x.assessments?.[0]?.score||50;\n  const priority=priorityScore(x);\n  const listing=Math.min(95,Math.round((opp*0.45)+(exit*0.45)+(priority*0.10)));\n  let urgency=priority>=80?'High':priority>=65?'Medium':'Low';\n  let action=priority>=80?'Schedule Valuation Consultation':priority>=65?'Seller Discovery Call':'Educational Follow-Up';\n\n  $('aiPriority').textContent=priority;\n  $('aiListing').textContent=listing+'%';\n  $('aiUrgency').textContent=urgency;\n  $('aiAction').textContent=action;\n\n  $('aiRecommendation').textContent =\n    `${x.bizName} appears to be a ${listing}% listing-probability opportunity. Current pipeline stage: ${x.stage||'Identified'}. Recommended focus: ${action}.`;\n\n  const risks=[];\n  if(exit<60) risks.push('Exit readiness below target');\n  if((x.assessments?.length||0)===0) risks.push('No exit assessment completed');\n  if(!x.nextAction) risks.push('No next action scheduled');\n  if(x.stage==='Identified') risks.push('Prospect still early stage');\n  $('aiRisks').textContent = risks.length ? risks.join('\\n') : 'No major risks identified.';\n\n  const drivers=[];\n  if(opp>=70) drivers.push('Strong opportunity score');\n  if(exit>=70) drivers.push('Strong exit readiness');\n  if((x.history?.length||0)>=3) drivers.push('Healthy activity history');\n  if(x.stage==='Meeting Booked' || x.stage==='Listing Agreement') drivers.push('Advanced pipeline stage');\n  $('aiDrivers').textContent = drivers.length ? drivers.join('\\n') : 'Additional qualification recommended.';\n\n  $('aiNextSteps').textContent =\n    `1. ${action}\\n2. Update pipeline stage after interaction\\n3. Refresh opportunity score and readiness assessment\\n4. Generate seller report before major meeting`;\n}\n\nfunction updateReport(){let x=p();$('rBiz').textContent=x?.bizName||val('bizName')||'Not selected';$('rIndustry').textContent=x?.industry||val('industry')||'\u2014';$('rLocation').textContent=x?.location||val('location')||'\u2014';$('rStage').textContent=x?.stage||val('stage')||'\u2014';let o=x?.opportunities?.[0]||lastOpp;let a=x?.assessments?.[0]||lastAssessment;$('rOpp').textContent=o?`${o.score}\/100 \u2014 ${o.category} \u2014 ${o.approach}`:'\u2014';$('rExit').textContent=a?`${a.score}\/100 \u2014 ${a.category} \u2014 ${a.timeline}`:'\u2014';$('rNext').textContent=a?.recs||o?.angle||'Generate scorecards and assessments to populate recommendations.'}\nfunction exportData(){let blob=new Blob([JSON.stringify(prospects,null,2)],{type:'application\/json'});let a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download='ai-deal-sourcing-v5-complete-backup.json';a.click()}\nfunction importData(e){let f=e.target.files[0];if(!f)return;let r=new FileReader();r.onload=()=>{try{prospects=JSON.parse(r.result);persist();renderAll();alert('Import complete.')}catch(err){alert('Import failed.')}};r.readAsText(f)}\nrenderQs();renderAll();\n<\/script>\n<\/body>\n<\/html>\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>AI Assisted Deal Sourcing V22 \u2014 Deal Origination Command Center V22 Deal Origination Command Center Unified dashboard combining Opportunity Scanner, Succession Intelligence, Buyer Matching, and&#8230;<\/p>","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-1074","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.5 (Yoast SEO v26.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Sellers&#039; Prospect Sourcing - 360 Biz Brokers<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/360bizbrokers.com\/pt\/sellers-prospect-sourcing\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sellers&#039; Prospect Sourcing\" \/>\n<meta property=\"og:description\" content=\"AI Assisted Deal Sourcing V22 \u2014 Deal Origination Command Center V22 Deal Origination Command Center Unified dashboard combining Opportunity Scanner, Succession Intelligence, Buyer Matching, and...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/360bizbrokers.com\/pt\/sellers-prospect-sourcing\/\" \/>\n<meta property=\"og:site_name\" content=\"360 Biz Brokers\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-04T14:34:29+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data1\" content=\"36 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/360bizbrokers.com\/sellers-prospect-sourcing\/\",\"url\":\"https:\/\/360bizbrokers.com\/sellers-prospect-sourcing\/\",\"name\":\"Sellers' Prospect Sourcing - 360 Biz Brokers\",\"isPartOf\":{\"@id\":\"https:\/\/360bizbrokers.com\/#website\"},\"datePublished\":\"2026-06-03T22:17:52+00:00\",\"dateModified\":\"2026-06-04T14:34:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/360bizbrokers.com\/sellers-prospect-sourcing\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/360bizbrokers.com\/sellers-prospect-sourcing\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/360bizbrokers.com\/sellers-prospect-sourcing\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/360bizbrokers.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sellers&#8217; Prospect Sourcing\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/360bizbrokers.com\/#website\",\"url\":\"https:\/\/360bizbrokers.com\/\",\"name\":\"Florida 360 Business Brokers\",\"description\":\"Buy &amp; Sell Businesses Advisory\",\"publisher\":{\"@id\":\"https:\/\/360bizbrokers.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/360bizbrokers.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/360bizbrokers.com\/#organization\",\"name\":\"Florida 360 Business Brokers\",\"url\":\"https:\/\/360bizbrokers.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/360bizbrokers.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/360bizbrokers.com\/wp-content\/uploads\/2025\/12\/LOGO-FLORIDA-360-BUSINESS-BROKERS.jpg\",\"contentUrl\":\"https:\/\/360bizbrokers.com\/wp-content\/uploads\/2025\/12\/LOGO-FLORIDA-360-BUSINESS-BROKERS.jpg\",\"width\":1080,\"height\":1080,\"caption\":\"Florida 360 Business Brokers\"},\"image\":{\"@id\":\"https:\/\/360bizbrokers.com\/#\/schema\/logo\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Sellers' Prospect Sourcing - 360 Biz Brokers","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/360bizbrokers.com\/pt\/sellers-prospect-sourcing\/","og_locale":"pt_BR","og_type":"article","og_title":"Sellers' Prospect Sourcing","og_description":"AI Assisted Deal Sourcing V22 \u2014 Deal Origination Command Center V22 Deal Origination Command Center Unified dashboard combining Opportunity Scanner, Succession Intelligence, Buyer Matching, and...","og_url":"https:\/\/360bizbrokers.com\/pt\/sellers-prospect-sourcing\/","og_site_name":"360 Biz Brokers","article_modified_time":"2026-06-04T14:34:29+00:00","twitter_card":"summary_large_image","twitter_misc":{"Est. tempo de leitura":"36 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/360bizbrokers.com\/sellers-prospect-sourcing\/","url":"https:\/\/360bizbrokers.com\/sellers-prospect-sourcing\/","name":"Sellers' Prospect Sourcing - 360 Biz Brokers","isPartOf":{"@id":"https:\/\/360bizbrokers.com\/#website"},"datePublished":"2026-06-03T22:17:52+00:00","dateModified":"2026-06-04T14:34:29+00:00","breadcrumb":{"@id":"https:\/\/360bizbrokers.com\/sellers-prospect-sourcing\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/360bizbrokers.com\/sellers-prospect-sourcing\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/360bizbrokers.com\/sellers-prospect-sourcing\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/360bizbrokers.com\/"},{"@type":"ListItem","position":2,"name":"Sellers&#8217; Prospect Sourcing"}]},{"@type":"WebSite","@id":"https:\/\/360bizbrokers.com\/#website","url":"https:\/\/360bizbrokers.com\/","name":"Florida 360 Business Brokers","description":"Buy &amp; Sell Businesses Advisory","publisher":{"@id":"https:\/\/360bizbrokers.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/360bizbrokers.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/360bizbrokers.com\/#organization","name":"Florida 360 Business Brokers","url":"https:\/\/360bizbrokers.com\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/360bizbrokers.com\/#\/schema\/logo\/image\/","url":"https:\/\/360bizbrokers.com\/wp-content\/uploads\/2025\/12\/LOGO-FLORIDA-360-BUSINESS-BROKERS.jpg","contentUrl":"https:\/\/360bizbrokers.com\/wp-content\/uploads\/2025\/12\/LOGO-FLORIDA-360-BUSINESS-BROKERS.jpg","width":1080,"height":1080,"caption":"Florida 360 Business Brokers"},"image":{"@id":"https:\/\/360bizbrokers.com\/#\/schema\/logo\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/360bizbrokers.com\/pt\/wp-json\/wp\/v2\/pages\/1074","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/360bizbrokers.com\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/360bizbrokers.com\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/360bizbrokers.com\/pt\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/360bizbrokers.com\/pt\/wp-json\/wp\/v2\/comments?post=1074"}],"version-history":[{"count":0,"href":"https:\/\/360bizbrokers.com\/pt\/wp-json\/wp\/v2\/pages\/1074\/revisions"}],"wp:attachment":[{"href":"https:\/\/360bizbrokers.com\/pt\/wp-json\/wp\/v2\/media?parent=1074"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}