{"id":14,"date":"2026-09-16T14:25:26","date_gmt":"2026-09-16T14:25:26","guid":{"rendered":"https:\/\/mql5.multiple-broker.com\/?page_id=14"},"modified":"2026-09-16T16:52:23","modified_gmt":"2026-09-16T16:52:23","slug":"home","status":"publish","type":"page","link":"https:\/\/mql5.multiple-broker.com\/?page_id=14","title":{"rendered":"Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"14\" class=\"elementor elementor-14\">\n\t\t\t\t<div class=\"elementor-element elementor-element-84970e6 e-con e-atomic-element e-flexbox-base e-78f87b9 \" data-id=\"84970e6\" data-element_type=\"e-flexbox\" data-e-type=\"e-flexbox\" data-interaction-id=\"84970e6\">\n    \t\t<div class=\"elementor-element elementor-element-0690ee1 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"0690ee1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!doctype html>\r\n<html lang=\"id\">\r\n<head>\r\n<meta charset=\"utf-8\">\r\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\r\n<title>MQLPro \u2014 Signals & Market<\/title>\r\n<style>\r\n*{box-sizing:border-box}\r\n:root{--blue:#0877c9;--text:#222;--muted:#777;--border:#ddd;--soft:#f7f8f9;--green:#159447}\r\nbody{margin:0;font-family:Arial,Helvetica,sans-serif;color:var(--text);background:#fff;font-size:14px}\r\na{text-decoration:none;color:inherit}\r\n.top{height:58px;border-bottom:1px solid #ddd;display:flex;align-items:center;padding:0 28px;gap:28px;position:sticky;top:0;background:#fff;z-index:30}\r\n.logo{font-size:25px;font-weight:700;letter-spacing:-1px}.logo span{color:var(--blue)}\r\n.nav{display:flex;height:100%;gap:3px}.nav button{border:0;background:transparent;padding:0 15px;font-size:14px;color:#444;cursor:pointer}.nav button.active,.nav button:hover{color:var(--blue);border-bottom:2px solid var(--blue)}\r\n.actions{margin-left:auto;display:flex;gap:9px;align-items:center}.search-mini{width:190px;border:1px solid #ccc;border-radius:3px;padding:8px 11px}.btn{border:1px solid #bbb;background:#fff;border-radius:3px;padding:8px 13px;cursor:pointer}.btn.blue{background:var(--blue);color:#fff;border-color:var(--blue)}\r\n\r\n\/* STEP 10.1 \u2014 Header Login fix *\/\r\n.actions .login-btn{\r\n  color:#222 !important;\r\n  background:#fff !important;\r\n  border:1px solid #bbb !important;\r\n  text-shadow:none !important;\r\n  opacity:1 !important;\r\n  -webkit-text-fill-color:#222 !important;\r\n}\r\n.actions .login-btn:hover{\r\n  color:var(--blue) !important;\r\n  background:#fff !important;\r\n  border-color:var(--blue) !important;\r\n}\r\n\r\n.page{width:100%;padding:22px 32px 60px}.hidden{display:none!important}.breadcrumb{font-size:12px;color:#888;margin:4px 0 16px}.title{font-size:28px;font-weight:400;margin:0}.subtitle{color:#777;margin-top:7px}.title-row{display:flex;align-items:end;justify-content:space-between;margin-bottom:18px}\r\n.filters{border:1px solid #d8d8d8;background:#fafafa;padding:13px;display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:15px}.field label{display:block;font-size:11px;color:#777;margin-bottom:5px}.field input,.field select{width:100%;height:35px;border:1px solid #ccc;background:#fff;padding:0 9px}\r\n.chips{display:flex;gap:7px;flex-wrap:wrap;margin:0 0 18px}.chip{padding:7px 11px;border:1px solid #ccc;background:#fff;border-radius:2px;color:#555;cursor:pointer}.chip.active{border-color:var(--blue);color:var(--blue)}\r\n.section-head{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;padding-bottom:9px;margin-top:25px}.section-head h2{font-size:19px;font-weight:400;margin:0}.muted{color:#888}\r\n.signal-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:14px}.card{border:1px solid #d7d7d7;background:#fff;border-radius:2px;padding:15px;cursor:pointer}.card:hover,.product:hover{box-shadow:0 2px 9px #ddd}\r\n.card-top{display:flex;justify-content:space-between;gap:10px}.avatar{width:38px;height:38px;border-radius:3px;background:#e9f3fb;display:grid;place-items:center;color:var(--blue);font-weight:bold}.name{font-size:16px}.author{font-size:12px;color:#888;margin-top:3px}.growth{font-size:21px;color:var(--green);font-weight:600}\r\n.meta{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;border-top:1px solid #eee;border-bottom:1px solid #eee;padding:12px 0;margin:13px 0}.meta b{display:block;font-size:14px}.meta span{font-size:11px;color:#888}.card-foot{display:flex;align-items:center;justify-content:space-between}.stars{color:#e6a400}.copy{color:var(--blue);font-weight:600}\r\n.table-wrap{border:1px solid #d7d7d7;overflow:auto;margin-top:14px}.table{width:100%;border-collapse:collapse;min-width:900px}.table th{background:#f5f5f5;text-align:left;font-size:11px;color:#777;padding:10px;border-bottom:1px solid #ddd;font-weight:400}.table td{padding:11px 10px;border-bottom:1px solid #eee}.green{color:var(--green)}\r\n.info,.notice{background:#f7f7f7;border:1px solid #ddd;padding:16px;margin-top:18px;line-height:1.55;color:#666;font-size:12px}\r\n\r\n\/* Signal Detail *\/\r\n.signal-header{border-bottom:1px solid #ddd;padding-bottom:18px}.signal-title-row{display:flex;justify-content:space-between;align-items:flex-start;gap:20px}.identity{display:flex;gap:13px}.avatar-lg{width:58px;height:58px;border-radius:4px;background:#e9f3fb;display:grid;place-items:center;color:var(--blue);font-size:20px;font-weight:bold}.signal-name{font-size:27px;font-weight:400;margin:0 0 5px}.provider{font-size:13px;color:#777}.status{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--green);margin-left:8px}.dot{width:7px;height:7px;background:var(--green);border-radius:50%}.header-actions{display:flex;gap:8px}\r\n.metrics{display:grid;grid-template-columns:repeat(6,1fr);border:1px solid var(--border);margin-top:18px}.metric{padding:15px;border-right:1px solid #eee}.metric:last-child{border-right:0}.metric span{display:block;color:#888;font-size:11px;margin-bottom:7px}.metric b{font-size:20px;font-weight:500}.metric .positive{color:var(--green)}\r\n.main-grid{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:18px;margin-top:20px}.panel{border:1px solid var(--border);background:#fff}.panel-head{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;padding:13px 15px}.panel-head h2{font-size:17px;font-weight:400;margin:0}.tabs{display:flex}.tabs button{background:#fff;border:0;border-bottom:2px solid transparent;padding:12px 15px;color:#666;cursor:pointer}.tabs button.active{color:var(--blue);border-color:var(--blue)}\r\n.chart{height:330px;position:relative;overflow:hidden;background:linear-gradient(to bottom,#fff,#fafafa)}.gridlines{position:absolute;inset:0;background:repeating-linear-gradient(to bottom,transparent 0,transparent 54px,#eee 55px),repeating-linear-gradient(to right,transparent 0,transparent 119px,#f1f1f1 120px)}.equity-line{position:absolute;left:3%;right:2%;top:72%;height:1px;border-top:3px solid var(--blue);transform:skewY(-9deg) rotate(-1deg)}.chart-note{position:absolute;top:12px;left:15px;font-size:11px;color:#888}.axis{position:absolute;right:10px;top:16px;bottom:16px;display:flex;flex-direction:column;justify-content:space-between;color:#999;font-size:10px}\r\n.stat-grid{display:grid;grid-template-columns:repeat(4,1fr)}.stat{padding:14px;border-right:1px solid #eee;border-bottom:1px solid #eee}.stat:nth-child(4n){border-right:0}.stat span{display:block;color:#888;font-size:11px;margin-bottom:6px}.stat b{font-size:16px;font-weight:500}.info-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:18px}.text-panel{border:1px solid var(--border);padding:17px}.text-panel h3{font-size:16px;font-weight:400;margin:0 0 12px}.text-panel p{color:#666;line-height:1.55;margin:0}.blackbox{margin-top:12px;border:1px dashed #bbb;background:#fafafa;padding:15px}.blackbox .protected{font-size:16px;letter-spacing:2px;color:#666;margin-top:8px}.side{border:1px solid var(--border);padding:18px;height:max-content;position:sticky;top:78px}.side h2{font-size:19px;font-weight:400;margin:0 0 5px}.side .price{font-size:24px;font-weight:500;margin:15px 0}.side label{display:block;color:#777;font-size:11px;margin:13px 0 5px}.side input,.side select{width:100%;height:38px;border:1px solid #ccc;padding:0 10px;background:#fff}.side .full{width:100%;margin-top:15px;height:40px}.checklist{border-top:1px solid #eee;margin-top:18px;padding-top:13px;color:#666;font-size:12px;line-height:2}.checklist span{color:var(--green);margin-right:6px}\r\n\r\n\/* Market *\/\r\n.market-layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:20px}.sidebar{border:1px solid var(--border);height:max-content}.side-title{font-size:15px;padding:13px;border-bottom:1px solid #ddd}.cat{display:block;padding:10px 13px;color:#555;border-bottom:1px solid #eee;cursor:pointer}.cat:hover,.cat.active{color:var(--blue);background:#fafafa}.market-main{min-width:0}.searchbar{display:flex;gap:8px;margin-bottom:12px}.searchbar input{height:39px;flex:1;border:1px solid #ccc;padding:0 12px}.searchbar select{width:170px;height:39px;border:1px solid #ccc;background:#fff;padding:0 9px}.market-head{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #ddd;padding-bottom:9px}.market-head h2{font-size:18px;font-weight:400;margin:0}.product-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:13px;margin-top:14px}.product{border:1px solid #d7d7d7;padding:15px;background:#fff;cursor:pointer}.product-top{display:flex;gap:11px}.icon{width:48px;height:48px;background:#eef6fc;border:1px solid #d8e8f5;display:grid;place-items:center;color:var(--blue);font-weight:bold;border-radius:3px}.pname{font-size:16px;margin:2px 0 5px}.developer{font-size:12px;color:#888}.tag{display:inline-block;font-size:10px;border:1px solid #ddd;padding:4px 6px;color:#666;margin-top:10px}.pdesc{font-size:12px;line-height:1.45;color:#666;margin:12px 0;height:35px}.pmeta{display:grid;grid-template-columns:1fr 1fr 1fr;border-top:1px solid #eee;padding-top:11px}.pmeta span{display:block;color:#888;font-size:10px;margin-bottom:5px}.pmeta b{font-size:13px;font-weight:500}.rating{color:#b27a00}.price-row{display:flex;justify-content:space-between;align-items:center;margin-top:13px;border-top:1px solid #eee;padding-top:11px}.price{font-size:17px}.buy{color:var(--blue);font-weight:600}\r\n.detail{display:none}.detail-card{border:1px solid var(--border);padding:20px}.back{color:var(--blue);font-size:13px;cursor:pointer;margin-bottom:16px;display:inline-block}.detail-title{display:flex;justify-content:space-between;gap:20px}.detail-title h1{font-size:26px;font-weight:400;margin:0 0 5px}.detail-grid{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:18px;margin-top:20px}.detail-section{border-top:1px solid #ddd;padding-top:16px;margin-top:16px}.detail-section h2{font-size:17px;font-weight:400;margin:0 0 10px}.specs{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:#eee;border:1px solid #eee}.spec{background:#fff;padding:11px}.spec span{display:block;font-size:10px;color:#888;margin-bottom:5px}.spec b{font-weight:500}.buybox{border:1px solid var(--border);padding:17px;height:max-content}.buybox .price{font-size:27px;margin:8px 0 15px}.buybox select,.buybox input{width:100%;height:38px;border:1px solid #ccc;background:#fff;padding:0 9px;margin-top:5px}.buybox label{display:block;color:#777;font-size:11px;margin-top:12px}.buybox .full{width:100%;height:40px;margin-top:15px}\r\n\r\n\r\n\/* Ranking *\/\r\n.ranking-toolbar{display:flex;gap:9px;align-items:center;flex-wrap:wrap;border:1px solid #d8d8d8;background:#fafafa;padding:13px;margin-bottom:16px}\r\n.ranking-toolbar select,.ranking-toolbar input{height:36px;border:1px solid #ccc;background:#fff;padding:0 10px}\r\n.rank-table{width:100%;border-collapse:collapse;min-width:1050px}\r\n.rank-table th{background:#f5f5f5;text-align:left;font-size:11px;color:#777;padding:11px 10px;border-bottom:1px solid #ddd;font-weight:400}\r\n.rank-table td{padding:12px 10px;border-bottom:1px solid #eee;vertical-align:middle}\r\n.rank-table tr:hover{background:#fafafa}\r\n.rank-num{font-size:17px;color:#777;width:45px}.rank-name{font-weight:600}.rank-provider{font-size:11px;color:#888;margin-top:3px}\r\n.rank-return{font-weight:600;color:var(--green)}.risk-low{color:var(--green)}.rank-link{color:var(--blue);font-weight:600;cursor:pointer}\r\n.rank-summary{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:18px}\r\n.rank-summary-card{border:1px solid #ddd;padding:15px;background:#fff}.rank-summary-card span{display:block;color:#888;font-size:10px;margin-bottom:7px}.rank-summary-card b{font-size:20px;font-weight:500}\r\n.rank-explain{display:grid;grid-template-columns:1.4fr 1fr;gap:15px;margin-top:18px}\r\n.rank-box{border:1px solid #ddd;padding:16px}.rank-box h3{font-size:16px;font-weight:400;margin:0 0 9px}.rank-box p{color:#666;line-height:1.55;margin:0;font-size:12px}\r\n.badge{display:inline-block;border:1px solid #ddd;padding:4px 7px;font-size:10px;color:#666;background:#fff}\r\n@media(max-width:900px){.rank-summary{grid-template-columns:repeat(2,1fr)}.rank-explain{grid-template-columns:1fr}}\r\n\r\n\r\n\/* Articles *\/\r\n.article-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:20px}\r\n.article-sidebar{border:1px solid var(--border);height:max-content}\r\n.article-main{min-width:0}\r\n.article-feature{display:grid;grid-template-columns:1.35fr 1fr;border:1px solid #d7d7d7;background:#fff;margin-bottom:18px}\r\n.article-feature-copy{padding:24px}.article-kicker{font-size:11px;color:var(--blue);font-weight:600;text-transform:uppercase;letter-spacing:.5px}\r\n.article-feature h2{font-size:25px;font-weight:400;line-height:1.25;margin:10px 0}\r\n.article-feature p{color:#666;line-height:1.55}.article-cover{min-height:240px;background:linear-gradient(135deg,#eef6fc,#fafafa);display:grid;place-items:center;color:#7d9ab0;font-size:42px;font-weight:700}\r\n.article-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:13px;margin-top:14px}\r\n.article-card{border:1px solid #d7d7d7;background:#fff;cursor:pointer}.article-card:hover{box-shadow:0 2px 9px #ddd}\r\n.article-thumb{height:115px;background:linear-gradient(135deg,#f0f5f8,#fafafa);display:grid;place-items:center;color:#7891a2;font-size:25px;font-weight:700}\r\n.article-copy{padding:14px}.article-copy h3{font-size:16px;font-weight:400;line-height:1.3;margin:7px 0}.article-copy p{font-size:12px;color:#666;line-height:1.45;margin:8px 0;height:35px}\r\n.article-meta{font-size:10px;color:#888;border-top:1px solid #eee;padding-top:10px;margin-top:10px}\r\n.article-search{display:flex;gap:8px;margin-bottom:13px}.article-search input,.article-search select{height:39px;border:1px solid #ccc;background:#fff;padding:0 10px}.article-search input{flex:1}.article-search select{width:175px}\r\n.article-detail{max-width:1050px;margin:0 auto}.article-detail-head{border-bottom:1px solid #ddd;padding-bottom:20px}.article-detail-head h1{font-size:34px;font-weight:400;line-height:1.2;margin:7px 0 10px}.article-byline{font-size:12px;color:#888}\r\n.article-body{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:28px;margin-top:22px}.article-content{font-size:15px;line-height:1.75;color:#444}.article-content h2{font-size:21px;font-weight:400;margin:26px 0 8px}.article-content p{margin:0 0 14px}.article-content .lead{font-size:17px;color:#555}\r\n.article-aside{border:1px solid #ddd;height:max-content;padding:15px}.article-aside h3{font-size:15px;font-weight:400;margin:0 0 10px}.related{display:block;padding:10px 0;border-top:1px solid #eee;color:#555;font-size:12px;cursor:pointer}.related:hover{color:var(--blue)}\r\n@media(max-width:900px){.article-feature{grid-template-columns:1fr}.article-grid{grid-template-columns:repeat(2,1fr)}.article-body{grid-template-columns:1fr}}\r\n@media(max-width:700px){.article-layout{grid-template-columns:1fr}.article-sidebar{display:none}.article-grid{grid-template-columns:1fr}.article-search{flex-direction:column}.article-search select{width:100%}.article-detail-head h1{font-size:27px}}\r\n\r\n\r\n\/* Community *\/\r\n.community-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:18px}\r\n.community-sidebar,.community-right{border:1px solid var(--border);height:max-content;background:#fff}\r\n.community-main{min-width:0}\r\n.community-search{display:flex;gap:8px;margin-bottom:14px}.community-search input{height:39px;flex:1;border:1px solid #ccc;padding:0 11px}.community-search select{height:39px;width:155px;border:1px solid #ccc;background:#fff;padding:0 8px}\r\n.community-category{display:block;padding:10px 13px;border-bottom:1px solid #eee;color:#555;cursor:pointer}.community-category:hover,.community-category.active{color:var(--blue);background:#fafafa}\r\n.community-post{border:1px solid #d7d7d7;background:#fff;padding:15px;margin-top:10px;cursor:pointer}.community-post:hover{box-shadow:0 2px 8px #ddd}\r\n.post-row{display:flex;gap:11px}.user-avatar{width:38px;height:38px;border-radius:50%;background:#eef5fa;display:grid;place-items:center;color:var(--blue);font-weight:600;flex:none}.post-title{font-size:16px;font-weight:500;margin:1px 0 5px}.post-excerpt{font-size:12px;color:#666;line-height:1.45;margin:0 0 9px}.post-meta{font-size:10px;color:#888;border-top:1px solid #eee;padding-top:9px}.post-tag{display:inline-block;border:1px solid #ddd;padding:3px 6px;font-size:9px;color:#666;margin-right:5px}\r\n.community-list-item b{display:block;font-weight:500}.community-list-item span{font-size:10px;color:#888}\r\n.community-hero{border:1px solid #d7d7d7;background:#fafafa;padding:20px;margin-bottom:16px}.community-hero h2{font-size:22px;font-weight:400;margin:0 0 7px}.community-hero p{color:#666;margin:0;line-height:1.5;font-size:12px}\r\n.discussion-detail{max-width:1000px;margin:0 auto}.discussion-head{border-bottom:1px solid #ddd;padding-bottom:18px}.discussion-head h1{font-size:29px;font-weight:400;line-height:1.25;margin:7px 0 10px}.discussion-byline{font-size:12px;color:#888}.discussion-body{display:grid;grid-template-columns:minmax(0,1fr) 250px;gap:18px;margin-top:18px}\r\n.reply{border:1px solid #ddd;padding:16px;margin-bottom:10px;background:#fff}.reply-head{display:flex;gap:10px;align-items:center;margin-bottom:11px}.reply-user{font-size:13px;font-weight:600}.reply-time{font-size:10px;color:#888}.reply p{color:#555;line-height:1.6;font-size:13px;margin:0}.reply-box{border:1px solid #ddd;padding:15px;background:#fafafa}.reply-box textarea{width:100%;height:95px;border:1px solid #ccc;padding:9px;resize:vertical;background:#fff}.discussion-aside{border:1px solid #ddd;height:max-content;padding:15px}.discussion-aside h3{font-size:15px;font-weight:400;margin:0 0 10px}.discussion-aside p{font-size:12px;color:#666;line-height:1.5}\r\n@media(max-width:1050px){.community-layout{grid-template-columns:190px minmax(0,1fr)}.community-right{display:none}.discussion-body{grid-template-columns:1fr}}\r\n@media(max-width:700px){.community-layout{grid-template-columns:1fr}.community-sidebar{display:none}.community-search{flex-direction:column}.community-search select{width:100%}.discussion-head h1{font-size:24px}}\r\n\r\n\r\n\/* Documentation *\/\r\n.docs-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:20px}\r\n.docs-sidebar,.docs-right{border:1px solid var(--border);background:#fff;height:max-content}\r\n.docs-main{min-width:0}\r\n.docs-search{display:flex;gap:8px;margin-bottom:16px}.docs-search input{height:40px;flex:1;border:1px solid #ccc;padding:0 11px}.docs-search button{height:40px}\r\n.docs-hero{border:1px solid #d7d7d7;background:#fafafa;padding:22px;margin-bottom:17px}.docs-hero h2{font-size:24px;font-weight:400;margin:0 0 7px}.docs-hero p{font-size:12px;color:#666;line-height:1.55;margin:0}\r\n.docs-section-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}\r\n.docs-card{border:1px solid #d7d7d7;padding:17px;background:#fff;cursor:pointer}.docs-card:hover{box-shadow:0 2px 8px #ddd}\r\n.docs-card .docs-icon{font-size:19px;color:var(--blue);margin-bottom:9px}.docs-card h3{font-size:16px;font-weight:500;margin:0 0 6px}.docs-card p{font-size:12px;color:#666;line-height:1.45;margin:0 0 10px}.docs-card .docs-count{font-size:10px;color:#888}\r\n.docs-item{display:block;padding:9px 12px;border-bottom:1px solid #eee;color:#555;font-size:12px;cursor:pointer}.docs-item:hover,.docs-item.active{color:var(--blue);background:#fafafa}\r\n.docs-right-item:hover{color:var(--blue)}\r\n.docs-breadcrumb{font-size:11px;color:#888;margin-bottom:10px}.docs-detail{max-width:1060px;margin:0 auto}.docs-detail-layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:25px}.docs-detail-side{border-right:1px solid #ddd;padding-right:15px;height:max-content}.docs-detail-side h3{font-size:14px;font-weight:500;margin:0 0 8px}.docs-detail-side a{display:block;font-size:11px;color:#666;padding:7px 0;cursor:pointer}.docs-detail-side a:hover{color:var(--blue)}\r\n.docs-article h1{font-size:31px;font-weight:400;margin:0 0 8px}.docs-article .updated{font-size:10px;color:#888;border-bottom:1px solid #ddd;padding-bottom:15px}.docs-article h2{font-size:20px;font-weight:400;margin:25px 0 8px}.docs-article h3{font-size:15px;font-weight:500;margin:19px 0 7px}.docs-article p,.docs-article li{font-size:13px;color:#555;line-height:1.7}.docs-article ul{padding-left:21px}.docs-code{border:1px solid #ddd;background:#f7f7f7;padding:12px;font-family:monospace;font-size:11px;overflow:auto;margin:12px 0}.docs-note{border-left:3px solid #aaa;background:#fafafa;padding:11px 13px;margin:15px 0;font-size:12px;color:#555}\r\n@media(max-width:1050px){}\r\n@media(max-width:750px){.docs-layout{grid-template-columns:1fr}.docs-sidebar{display:none}.docs-section-grid{grid-template-columns:1fr}.docs-detail-layout{grid-template-columns:1fr}.docs-detail-side{border-right:0;border-bottom:1px solid #ddd;padding:0 0 12px}.docs-detail-side a{display:inline-block;margin-right:14px}}\r\n\r\n\r\n\/* STEP 10 \u2014 Authentication \/ Account *\/\r\n.auth-wrap{max-width:520px;margin:25px auto}\r\n.auth-card{border:1px solid #d7d7d7;background:#fff;padding:25px}\r\n.auth-card h1{font-size:27px;font-weight:400;margin:0 0 7px}.auth-sub{font-size:12px;color:#777;line-height:1.5;margin-bottom:20px}\r\n.auth-field{margin-bottom:14px}.auth-field label{display:block;font-size:12px;color:#555;margin-bottom:6px}.auth-field input{width:100%;height:42px;border:1px solid #ccc;padding:0 11px;background:#fff;box-sizing:border-box}\r\n.auth-row{display:flex;justify-content:space-between;align-items:center;gap:12px}.auth-link{font-size:12px;color:var(--blue);cursor:pointer}\r\n.auth-divider{display:flex;align-items:center;gap:10px;color:#999;font-size:10px;margin:18px 0}.auth-divider:before,.auth-divider:after{content:\"\";height:1px;background:#ddd;flex:1}\r\n.auth-check{display:flex;gap:8px;align-items:flex-start;font-size:11px;color:#666;line-height:1.4;margin:12px 0}.auth-check input{margin-top:2px}\r\n.auth-note{border:1px solid #e0e0e0;background:#fafafa;padding:11px;font-size:11px;color:#666;line-height:1.5;margin-top:15px}\r\n.account-layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:18px}.account-sidebar{border:1px solid #ddd;height:max-content;background:#fff}.account-item{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.account-item:hover,.account-item.active{color:var(--blue);background:#fafafa}\r\n.account-main{min-width:0}.account-card{border:1px solid #ddd;background:#fff;padding:18px;margin-bottom:14px}.account-card h2{font-size:19px;font-weight:400;margin:0 0 12px}.account-profile{display:flex;align-items:center;gap:14px}.account-avatar{width:58px;height:58px;border-radius:50%;background:#eef5fa;color:var(--blue);display:grid;place-items:center;font-size:18px;font-weight:600}.account-name{font-size:17px}.account-email{font-size:11px;color:#888;margin-top:3px}\r\n.account-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.account-stat{border:1px solid #eee;padding:12px}.account-stat span{display:block;font-size:10px;color:#888}.account-stat b{display:block;font-size:18px;font-weight:400;margin-top:5px}\r\n.account-table{width:100%;border-collapse:collapse;font-size:12px}.account-table th,.account-table td{text-align:left;border-bottom:1px solid #eee;padding:10px}.account-table th{font-size:10px;color:#888;font-weight:500}\r\n@media(max-width:700px){.auth-wrap{margin:15px auto}.auth-card{padding:18px}.account-layout{grid-template-columns:1fr}.account-sidebar{display:none}.account-stats{grid-template-columns:repeat(2,1fr)}}\r\n\r\n\r\n\/* STEP 11 \u2014 User Dashboard *\/\r\n\r\n.dashboard-section{display:none}.dashboard-section.active{display:block}\r\n.dashboard-empty{border:1px solid #ddd;background:#fff;padding:22px;text-align:center;color:#777;font-size:12px}\r\n\r\n.dashboard-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.dashboard-sidebar{border:1px solid #ddd;background:#fff;height:max-content}\r\n.dashboard-item{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}\r\n.dashboard-item:hover,.dashboard-item.active{color:var(--blue);background:#fafafa}\r\n.dashboard-main{min-width:0}.dash-welcome{border:1px solid #d7d7d7;background:#fafafa;padding:19px;margin-bottom:15px}\r\n.dash-welcome h2{font-size:22px;font-weight:400;margin:0 0 5px}.dash-welcome p{font-size:12px;color:#666;margin:0;line-height:1.5}\r\n.dash-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:15px}\r\n.dash-stat{border:1px solid #ddd;background:#fff;padding:13px}.dash-stat span{font-size:10px;color:#888;display:block}.dash-stat b{font-size:20px;font-weight:400;display:block;margin-top:5px}\r\n.dash-card{border:1px solid #ddd;background:#fff;margin-bottom:15px}.dash-card-head{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #eee;padding:13px 15px}.dash-card-head h3{font-size:16px;font-weight:400;margin:0}.dash-card-body{padding:0 15px}\r\n.sub-row{display:grid;grid-template-columns:minmax(0,1fr) 100px 90px 85px;gap:10px;align-items:center;border-bottom:1px solid #eee;padding:12px 0;font-size:12px}.sub-name{font-weight:500}.sub-meta{font-size:10px;color:#888;margin-top:3px}.sub-value{text-align:right;font-size:11px;color:#666}\r\n.dash-table{width:100%;border-collapse:collapse;font-size:12px}.dash-table th,.dash-table td{padding:10px;border-bottom:1px solid #eee;text-align:left}.dash-table th{font-size:10px;color:#888;font-weight:500}\r\n.status-active{color:#26733b}.status-paused{color:#996c18}\r\n.quick-actions{display:flex;flex-wrap:wrap;gap:8px}\r\n@media(max-width:850px){.dash-grid{grid-template-columns:repeat(2,1fr)}.sub-row{grid-template-columns:1fr 80px 75px}.sub-row .sub-hide-mobile{display:none}}\r\n@media(max-width:650px){.dashboard-layout{grid-template-columns:1fr}.dashboard-sidebar{display:none}.dash-grid{grid-template-columns:1fr 1fr}.sub-row{grid-template-columns:1fr 75px}.sub-value{display:none}}\r\n\r\n\r\n\r\n.logout-btn{\r\n  color:#222 !important;\r\n  background:#fff !important;\r\n  border:1px solid #bbb !important;\r\n  -webkit-text-fill-color:#222 !important;\r\n}\r\n.logout-btn:hover{\r\n  color:var(--blue) !important;\r\n  border-color:var(--blue) !important;\r\n  -webkit-text-fill-color:var(--blue) !important;\r\n}\r\n\r\n\/* STEP 11.2 \u2014 Readable neutral buttons *\/\r\n.btn:not(.blue){\r\n  color:#222 !important;\r\n  background:#fff !important;\r\n  border-color:#bbb !important;\r\n  text-shadow:none !important;\r\n  -webkit-text-fill-color:#222 !important;\r\n}\r\n.btn:not(.blue):hover{\r\n  color:var(--blue) !important;\r\n  background:#fff !important;\r\n  border-color:var(--blue) !important;\r\n  -webkit-text-fill-color:var(--blue) !important;\r\n}\r\n\r\n\r\n\/* STEP 12 \u2014 Signal Subscription \/ Checkout *\/\r\n.checkout-wrap{max-width:920px;margin:0 auto}.checkout-layout{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:18px}\r\n.checkout-card{border:1px solid #ddd;background:#fff;padding:18px;margin-bottom:14px}.checkout-card h2{font-size:19px;font-weight:400;margin:0 0 13px}.checkout-card h3{font-size:14px;font-weight:500;margin:18px 0 8px}\r\n.checkout-signal{display:flex;justify-content:space-between;gap:15px;align-items:center;border:1px solid #eee;padding:13px}.checkout-signal-name{font-size:17px}.checkout-signal-meta{font-size:10px;color:#888;margin-top:3px}.checkout-price{font-size:20px}.checkout-price small{font-size:10px;color:#888}\r\n.plan-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.plan{border:1px solid #ddd;padding:13px;cursor:pointer}.plan:hover,.plan.selected{border-color:var(--blue);box-shadow:0 0 0 1px var(--blue)}.plan-name{font-size:13px}.plan-price{font-size:19px;margin:6px 0}.plan-note{font-size:10px;color:#888;line-height:1.4}\r\n.checkout-field{margin-bottom:12px}.checkout-field label{display:block;font-size:11px;color:#555;margin-bottom:5px}.checkout-field input,.checkout-field select{width:100%;height:40px;border:1px solid #ccc;padding:0 10px;box-sizing:border-box;background:#fff}\r\n.checkout-two{display:grid;grid-template-columns:1fr 1fr;gap:10px}.checkout-check{font-size:11px;color:#666;line-height:1.5;display:flex;gap:7px;margin:11px 0}.checkout-summary{border:1px solid #ddd;background:#fafafa;padding:15px;position:sticky;top:15px}.checkout-summary h3{font-size:16px;font-weight:400;margin:0 0 13px}.summary-line{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #e5e5e5;font-size:11px}.summary-total{display:flex;justify-content:space-between;padding:13px 0 3px;font-size:15px}.checkout-security{font-size:10px;color:#888;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.checkout-layout{grid-template-columns:1fr}.checkout-summary{position:static}.plan-grid{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 13 \u2014 Market Purchase Checkout *\/\r\n.market-checkout-wrap{max-width:920px;margin:0 auto}.market-checkout-layout{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:18px}\r\n.product-checkout-card{border:1px solid #ddd;background:#fff;padding:18px;margin-bottom:14px}.product-checkout-card h2{font-size:19px;font-weight:400;margin:0 0 13px}\r\n.product-preview{display:flex;gap:14px;align-items:center;border:1px solid #eee;padding:13px}.product-thumb{width:70px;height:70px;background:#f3f5f7;border:1px solid #ddd;display:grid;place-items:center;color:#777;font-size:10px;text-align:center}.product-checkout-name{font-size:17px}.product-checkout-meta{font-size:10px;color:#888;margin-top:4px}\r\n.purchase-type-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.purchase-type{border:1px solid #ddd;padding:13px;cursor:pointer}.purchase-type.selected,.purchase-type:hover{border-color:var(--blue);box-shadow:0 0 0 1px var(--blue)}.purchase-type b{font-size:13px;font-weight:500}.purchase-type div{font-size:10px;color:#888;line-height:1.4;margin-top:5px}\r\n.market-summary{border:1px solid #ddd;background:#fafafa;padding:15px;position:sticky;top:15px}.market-summary h3{font-size:16px;font-weight:400;margin:0 0 13px}.market-summary-line{display:flex;justify-content:space-between;padding:9px 0;border-bottom:1px solid #e5e5e5;font-size:11px}.market-summary-total{display:flex;justify-content:space-between;padding:13px 0 3px;font-size:15px}\r\n@media(max-width:800px){.market-checkout-layout{grid-template-columns:1fr}.market-summary{position:static}}\r\n\r\n\r\n\/* STEP 14 \u2014 Orders & Subscription Management *\/\r\n.manage-toolbar{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-bottom:13px}.manage-tabs{display:flex;gap:0;border-bottom:1px solid #ddd;margin-bottom:14px}.manage-tab{padding:10px 14px;font-size:11px;color:#666;border-bottom:2px solid transparent;cursor:pointer}.manage-tab.active{color:var(--blue);border-bottom-color:var(--blue)}\r\n.order-card{border:1px solid #ddd;background:#fff;margin-bottom:10px;padding:14px}.order-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.order-name{font-size:14px}.order-meta{font-size:10px;color:#888;margin-top:4px}.order-amount{font-size:14px}.order-detail{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;border-top:1px solid #eee;margin-top:12px;padding-top:11px}.order-detail span{display:block;font-size:9px;color:#999}.order-detail b{display:block;font-size:11px;font-weight:400;margin-top:3px}\r\n.manage-status{font-size:10px;padding:3px 7px;border:1px solid #ddd}.manage-status.active{color:#26733b;border-color:#b9d8c1}.manage-status.pending{color:#996c18;border-color:#e1c98c}.manage-status.completed{color:#555}\r\n.detail-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:12px}\r\n@media(max-width:700px){.order-detail{grid-template-columns:1fr 1fr}.manage-toolbar{align-items:flex-start;flex-direction:column}}\r\n\r\n\r\n\/* STEP 15 \u2014 Copy Trading Accounts *\/\r\n.copy-wrap{max-width:1100px;margin:0 auto}.copy-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.copy-sidebar{border:1px solid #ddd;background:#fff;height:max-content}.copy-nav{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.copy-nav.active,.copy-nav:hover{color:var(--blue);background:#fafafa}\r\n.copy-main{min-width:0}.copy-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:15px}.copy-stat{border:1px solid #ddd;background:#fff;padding:13px}.copy-stat span{display:block;font-size:10px;color:#888}.copy-stat b{display:block;font-size:19px;font-weight:400;margin-top:5px}\r\n.broker-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.broker-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}.broker-title{font-size:15px}.broker-meta{font-size:10px;color:#888;margin-top:4px}.broker-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;border-top:1px solid #eee;margin-top:12px;padding-top:12px}.broker-grid span{display:block;font-size:9px;color:#999}.broker-grid b{display:block;font-size:11px;font-weight:400;margin-top:3px}.broker-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:13px}\r\n.connection-dot{display:inline-flex;align-items:center;gap:5px;font-size:10px;color:#26733b}.connection-dot:before{content:\"\";width:7px;height:7px;border-radius:50%;background:#4b9b61;display:inline-block}\r\n.connector-box{border:1px dashed #ccc;background:#fafafa;padding:17px;text-align:center}.connector-box h3{font-size:16px;font-weight:400;margin:0 0 5px}.connector-box p{font-size:11px;color:#777;line-height:1.5;margin:0 0 13px}\r\n.copy-form{display:none;border-top:1px solid #eee;margin-top:13px;padding-top:14px}.copy-form.active{display:block}.copy-two{display:grid;grid-template-columns:1fr 1fr;gap:10px}\r\n.risk-note{font-size:10px;color:#777;line-height:1.5;border:1px solid #ddd;background:#fafafa;padding:11px;margin-top:12px}\r\n@media(max-width:800px){.copy-summary{grid-template-columns:1fr 1fr}.copy-grid,.broker-grid{grid-template-columns:1fr 1fr}.copy-layout{grid-template-columns:1fr}.copy-sidebar{display:none}}\r\n@media(max-width:600px){.broker-grid{grid-template-columns:1fr 1fr}.copy-two{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 16 \u2014 Connector Center *\/\r\n.connector-center{max-width:1100px;margin:0 auto}.connector-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.connector-nav{border:1px solid #ddd;background:#fff;height:max-content}.connector-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.connector-nav a.active,.connector-nav a:hover{color:var(--blue);background:#fafafa}\r\n.connector-section{display:none}.connector-section.active{display:block}\r\n.connector-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.connector-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.connector-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.connector-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.connector-status{display:inline-flex;align-items:center;gap:5px;font-size:10px;color:#26733b}.connector-status:before{content:\"\";width:7px;height:7px;border-radius:50%;background:#4b9b61}\r\n.connector-status.offline{color:#996c18}.connector-status.offline:before{background:#c38b28}\r\n.connector-list{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}.connector-item{border:1px solid #ddd;padding:14px;background:#fff}.connector-item:hover{border-color:#aaa}\r\n.connector-item-head{display:flex;justify-content:space-between;gap:10px}.connector-name{font-size:13px}.connector-meta{font-size:10px;color:#888;margin-top:4px}.connector-features{font-size:10px;color:#666;line-height:1.5;margin-top:10px}\r\n.health-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.health-box{border:1px solid #ddd;padding:12px}.health-box span{display:block;font-size:9px;color:#999}.health-box b{display:block;font-size:12px;font-weight:400;margin-top:4px}\r\n.flow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:14px 0}.flow-step{border:1px solid #ddd;background:#fafafa;padding:10px 12px;font-size:10px}.flow-arrow{color:#999}\r\n.connector-warning{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.connector-layout{grid-template-columns:1fr}.connector-nav{display:flex;overflow:auto}.connector-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.connector-list{grid-template-columns:1fr}.health-grid{grid-template-columns:1fr 1fr}}\r\n\r\n\r\n\/* STEP 17 \u2014 Signal Engine *\/\r\n.engine-wrap{max-width:1100px;margin:0 auto}.engine-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.engine-nav{border:1px solid #ddd;background:#fff;height:max-content}.engine-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.engine-nav a.active,.engine-nav a:hover{color:var(--blue);background:#fafafa}\r\n.engine-section{display:none}.engine-section.active{display:block}\r\n.engine-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.engine-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.engine-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.engine-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.engine-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.engine-stat{border:1px solid #ddd;padding:12px}.engine-stat span{display:block;font-size:9px;color:#999}.engine-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.engine-flow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:14px 0}.engine-flow-step{border:1px solid #ddd;background:#fafafa;padding:10px 12px;font-size:10px}.engine-flow-arrow{color:#999}\r\n.signal-event{border:1px solid #eee;padding:11px;margin-bottom:8px;display:flex;justify-content:space-between;gap:12px}.signal-event-main{font-size:11px}.signal-event-meta{font-size:9px;color:#999;margin-top:3px}.signal-event-state{font-size:10px;color:#26733b}\r\n.engine-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.engine-badge.live{color:#26733b;border-color:#b9d8c1}.engine-badge.test{color:#996c18;border-color:#e1c98c}\r\n.engine-warning{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n.engine-code{background:#f7f7f7;border:1px solid #ddd;padding:12px;font-family:Consolas,monospace;font-size:10px;line-height:1.55;overflow:auto;white-space:pre-wrap}\r\n@media(max-width:800px){.engine-layout{grid-template-columns:1fr}.engine-nav{display:flex;overflow:auto}.engine-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.engine-grid{grid-template-columns:1fr 1fr}}\r\n\r\n\r\n\/* STEP 18 \u2014 Risk & Allocation *\/\r\n.risk-wrap{max-width:1100px;margin:0 auto}.risk-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.risk-nav{border:1px solid #ddd;background:#fff;height:max-content}.risk-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.risk-nav a.active,.risk-nav a:hover{color:var(--blue);background:#fafafa}\r\n.risk-section{display:none}.risk-section.active{display:block}\r\n.risk-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.risk-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.risk-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.risk-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.risk-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.risk-stat{border:1px solid #ddd;padding:12px}.risk-stat span{display:block;font-size:9px;color:#999}.risk-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.risk-rule{display:grid;grid-template-columns:1.2fr 1fr 1fr auto;gap:10px;align-items:center;border-top:1px solid #eee;padding:11px 0;font-size:11px}.risk-rule:first-child{border-top:0}.risk-rule small{display:block;color:#999;font-size:9px;margin-top:3px}\r\n.risk-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.risk-badge.ok{color:#26733b;border-color:#b9d8c1}.risk-badge.warn{color:#996c18;border-color:#e1c98c}\r\n.risk-flow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:14px 0}.risk-flow-step{border:1px solid #ddd;background:#fafafa;padding:10px 12px;font-size:10px}.risk-flow-arrow{color:#999}\r\n.allocation-table{width:100%;border-collapse:collapse;font-size:10px}.allocation-table th,.allocation-table td{border-bottom:1px solid #eee;padding:9px 7px;text-align:left}.allocation-table th{font-size:9px;color:#888;font-weight:400}\r\n.risk-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n.risk-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}.risk-form-grid .checkout-field{margin-bottom:0}\r\n@media(max-width:800px){.risk-layout{grid-template-columns:1fr}.risk-nav{display:flex;overflow:auto}.risk-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.risk-grid{grid-template-columns:1fr 1fr}.risk-rule{grid-template-columns:1fr 1fr}.risk-form-grid{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 19 \u2014 Execution Queue *\/\r\n.exec-wrap{max-width:1100px;margin:0 auto}.exec-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.exec-nav{border:1px solid #ddd;background:#fff;height:max-content}.exec-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.exec-nav a.active,.exec-nav a:hover{color:var(--blue);background:#fafafa}\r\n.exec-section{display:none}.exec-section.active{display:block}.exec-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.exec-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.exec-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.exec-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.exec-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.exec-stat{border:1px solid #ddd;padding:12px}.exec-stat span{display:block;font-size:9px;color:#999}.exec-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.exec-status{font-size:9px;padding:3px 7px;border:1px solid #ddd}.exec-status.ok{color:#26733b;border-color:#b9d8c1}.exec-status.wait{color:#996c18;border-color:#e1c98c}.exec-status.fail{color:#9a3d3d;border-color:#dfbcbc}\r\n.exec-flow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:14px 0}.exec-step{border:1px solid #ddd;background:#fafafa;padding:10px 12px;font-size:10px}.exec-arrow{color:#999}\r\n.exec-event{border:1px solid #eee;padding:11px;margin-bottom:8px;display:grid;grid-template-columns:120px 1fr auto;gap:10px;align-items:center}.exec-event-id{font-family:Consolas,monospace;font-size:9px;color:#777}.exec-event-main{font-size:11px}.exec-event-meta{font-size:9px;color:#999;margin-top:3px}\r\n.exec-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n.exec-timeline{border-left:1px solid #ddd;margin:12px 0 0 7px;padding-left:16px}.exec-timeline-item{position:relative;padding:0 0 15px;font-size:11px}.exec-timeline-item:before{content:\"\";position:absolute;left:-21px;top:3px;width:7px;height:7px;border:1px solid #aaa;background:#fff;border-radius:50%}.exec-timeline-item small{display:block;color:#999;font-size:9px;margin-top:3px}\r\n@media(max-width:800px){.exec-layout{grid-template-columns:1fr}.exec-nav{display:flex;overflow:auto}.exec-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.exec-grid{grid-template-columns:1fr 1fr}.exec-event{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 20 \u2014 Account State & Position Sync *\/\r\n.sync-wrap{max-width:1100px;margin:0 auto}.sync-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.sync-nav{border:1px solid #ddd;background:#fff;height:max-content}.sync-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.sync-nav a.active,.sync-nav a:hover{color:var(--blue);background:#fafafa}\r\n.sync-section{display:none}.sync-section.active{display:block}.sync-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.sync-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.sync-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.sync-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.sync-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.sync-stat{border:1px solid #ddd;padding:12px}.sync-stat span{display:block;font-size:9px;color:#999}.sync-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.sync-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.sync-badge.ok{color:#26733b;border-color:#b9d8c1}.sync-badge.warn{color:#996c18;border-color:#e1c98c}.sync-badge.fail{color:#9a3d3d;border-color:#dfbcbc}\r\n.sync-flow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:14px 0}.sync-step{border:1px solid #ddd;background:#fafafa;padding:10px 12px;font-size:10px}.sync-arrow{color:#999}\r\n.sync-account{border:1px solid #eee;padding:11px;margin-bottom:8px;display:grid;grid-template-columns:1.5fr 1fr 1fr auto;gap:10px;align-items:center}.sync-account-main{font-size:11px}.sync-account-meta{font-size:9px;color:#999;margin-top:3px}\r\n.sync-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n.sync-code{background:#f7f7f7;border:1px solid #ddd;padding:12px;font-family:Consolas,monospace;font-size:10px;line-height:1.55;overflow:auto;white-space:pre-wrap}\r\n@media(max-width:800px){.sync-layout{grid-template-columns:1fr}.sync-nav{display:flex;overflow:auto}.sync-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.sync-grid{grid-template-columns:1fr 1fr}.sync-account{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 21 \u2014 Symbol Mapping *\/\r\n.map-wrap{max-width:1100px;margin:0 auto}.map-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.map-nav{border:1px solid #ddd;background:#fff;height:max-content}.map-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.map-nav a.active,.map-nav a:hover{color:var(--blue);background:#fafafa}\r\n.map-section{display:none}.map-section.active{display:block}.map-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.map-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.map-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.map-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.map-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.map-stat{border:1px solid #ddd;padding:12px}.map-stat span{display:block;font-size:9px;color:#999}.map-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.map-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.map-badge.ok{color:#26733b;border-color:#b9d8c1}.map-badge.warn{color:#996c18;border-color:#e1c98c}.map-badge.fail{color:#9a3d3d;border-color:#dfbcbc}\r\n.map-flow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:14px 0}.map-step{border:1px solid #ddd;background:#fafafa;padding:10px 12px;font-size:10px}.map-arrow{color:#999}\r\n.map-row{border:1px solid #eee;padding:11px;margin-bottom:8px;display:grid;grid-template-columns:1fr 1fr 1fr auto;gap:10px;align-items:center}.map-main{font-size:11px}.map-meta{font-size:9px;color:#999;margin-top:3px}\r\n.map-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.map-layout{grid-template-columns:1fr}.map-nav{display:flex;overflow:auto}.map-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.map-grid{grid-template-columns:1fr 1fr}.map-row{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 22 \u2014 Copy Policies & Safety Rules *\/\r\n.policy-wrap{max-width:1100px;margin:0 auto}.policy-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.policy-nav{border:1px solid #ddd;background:#fff;height:max-content}.policy-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.policy-nav a.active,.policy-nav a:hover{color:var(--blue);background:#fafafa}\r\n.policy-section{display:none}.policy-section.active{display:block}.policy-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.policy-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.policy-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.policy-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.policy-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.policy-stat{border:1px solid #ddd;padding:12px}.policy-stat span{display:block;font-size:9px;color:#999}.policy-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.policy-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.policy-badge.ok{color:#26733b;border-color:#b9d8c1}.policy-badge.warn{color:#996c18;border-color:#e1c98c}.policy-badge.fail{color:#9a3d3d;border-color:#dfbcbc}\r\n.policy-flow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:14px 0}.policy-step{border:1px solid #ddd;background:#fafafa;padding:10px 12px;font-size:10px}.policy-arrow{color:#999}\r\n.policy-rule{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1fr 90px auto;gap:10px;align-items:center}.policy-rule-main{font-size:11px}.policy-rule-meta{font-size:9px;color:#999;margin-top:3px}\r\n.policy-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.policy-layout{grid-template-columns:1fr}.policy-nav{display:flex;overflow:auto}.policy-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.policy-grid{grid-template-columns:1fr 1fr}.policy-rule{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 23 \u2014 Subscription & Billing Engine *\/\r\n.bill-wrap{max-width:1100px;margin:0 auto}.bill-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.bill-nav{border:1px solid #ddd;background:#fff;height:max-content}.bill-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.bill-nav a.active,.bill-nav a:hover{color:var(--blue);background:#fafafa}\r\n.bill-section{display:none}.bill-section.active{display:block}.bill-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.bill-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.bill-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.bill-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.bill-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.bill-stat{border:1px solid #ddd;padding:12px}.bill-stat span{display:block;font-size:9px;color:#999}.bill-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.bill-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.bill-badge.ok{color:#26733b;border-color:#b9d8c1}.bill-badge.warn{color:#996c18;border-color:#e1c98c}.bill-badge.fail{color:#9a3d3d;border-color:#dfbcbc}\r\n.bill-flow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:14px 0}.bill-step{border:1px solid #ddd;background:#fafafa;padding:10px 12px;font-size:10px}.bill-arrow{color:#999}\r\n.bill-plan{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 100px 120px auto;gap:10px;align-items:center}.bill-main{font-size:11px}.bill-meta{font-size:9px;color:#999;margin-top:3px}\r\n.bill-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n.bill-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}\r\n@media(max-width:800px){.bill-layout{grid-template-columns:1fr}.bill-nav{display:flex;overflow:auto}.bill-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.bill-grid{grid-template-columns:1fr 1fr}.bill-plan{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 24 \u2014 Webhook & Signal Intake Gateway *\/\r\n.intake-wrap{max-width:1100px;margin:0 auto}.intake-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.intake-nav{border:1px solid #ddd;background:#fff;height:max-content}.intake-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.intake-nav a.active,.intake-nav a:hover{color:var(--blue);background:#fafafa}\r\n.intake-section{display:none}.intake-section.active{display:block}.intake-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.intake-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.intake-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.intake-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.intake-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.intake-stat{border:1px solid #ddd;padding:12px}.intake-stat span{display:block;font-size:9px;color:#999}.intake-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.intake-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.intake-badge.ok{color:#26733b;border-color:#b9d8c1}.intake-badge.warn{color:#996c18;border-color:#e1c98c}.intake-badge.fail{color:#9a3d3d;border-color:#dfbcbc}\r\n.intake-flow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:14px 0}.intake-step{border:1px solid #ddd;background:#fafafa;padding:10px 12px;font-size:10px}.intake-arrow{color:#999}\r\n.intake-endpoint{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 110px 110px auto;gap:10px;align-items:center}.intake-main{font-size:11px}.intake-meta{font-size:9px;color:#999;margin-top:3px}\r\n.intake-code{background:#fafafa;border:1px solid #ddd;padding:12px;font-family:Consolas,monospace;font-size:10px;line-height:1.6;overflow:auto;white-space:pre-wrap}\r\n.intake-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.intake-layout{grid-template-columns:1fr}.intake-nav{display:flex;overflow:auto}.intake-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.intake-grid{grid-template-columns:1fr 1fr}.intake-endpoint{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 25 \u2014 Copy Orchestrator & Order Lifecycle *\/\r\n.orch-wrap{max-width:1100px;margin:0 auto}.orch-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.orch-nav{border:1px solid #ddd;background:#fff;height:max-content}.orch-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.orch-nav a.active,.orch-nav a:hover{color:var(--blue);background:#fafafa}\r\n.orch-section{display:none}.orch-section.active{display:block}.orch-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.orch-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.orch-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.orch-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.orch-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.orch-stat{border:1px solid #ddd;padding:12px}.orch-stat span{display:block;font-size:9px;color:#999}.orch-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.orch-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.orch-badge.ok{color:#26733b;border-color:#b9d8c1}.orch-badge.warn{color:#996c18;border-color:#e1c98c}.orch-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.orch-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.orch-flow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:14px 0}.orch-step{border:1px solid #ddd;background:#fafafa;padding:10px 12px;font-size:10px}.orch-arrow{color:#999}\r\n.orch-order{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.2fr 100px 115px auto;gap:10px;align-items:center}.orch-main{font-size:11px}.orch-meta{font-size:9px;color:#999;margin-top:3px}\r\n.orch-timeline{border-left:1px solid #ddd;margin:10px 0 0 7px;padding-left:17px}.orch-event{position:relative;padding:0 0 15px;font-size:10px}.orch-event:before{content:\"\";position:absolute;left:-22px;top:2px;width:7px;height:7px;border:1px solid #aaa;background:#fff}.orch-event b{font-weight:500}.orch-event span{display:block;color:#999;font-size:9px;margin-top:3px}\r\n.orch-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.orch-layout{grid-template-columns:1fr}.orch-nav{display:flex;overflow:auto}.orch-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.orch-grid{grid-template-columns:1fr 1fr}.orch-order{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 26 \u2014 Broker Connector Runtime *\/\r\n.conn-wrap{max-width:1100px;margin:0 auto}.conn-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.conn-nav{border:1px solid #ddd;background:#fff;height:max-content}.conn-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.conn-nav a.active,.conn-nav a:hover{color:var(--blue);background:#fafafa}\r\n.conn-section{display:none}.conn-section.active{display:block}.conn-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.conn-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.conn-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.conn-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.conn-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.conn-stat{border:1px solid #ddd;padding:12px}.conn-stat span{display:block;font-size:9px;color:#999}.conn-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.conn-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.conn-badge.ok{color:#26733b;border-color:#b9d8c1}.conn-badge.warn{color:#996c18;border-color:#e1c98c}.conn-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.conn-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.conn-flow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:14px 0}.conn-step{border:1px solid #ddd;background:#fafafa;padding:10px 12px;font-size:10px}.conn-arrow{color:#999}\r\n.conn-row{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 105px 120px auto;gap:10px;align-items:center}.conn-main{font-size:11px}.conn-meta{font-size:9px;color:#999;margin-top:3px}\r\n.conn-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n.conn-code{background:#fafafa;border:1px solid #ddd;padding:12px;font-family:Consolas,monospace;font-size:10px;line-height:1.6;overflow:auto;white-space:pre-wrap}\r\n@media(max-width:800px){.conn-layout{grid-template-columns:1fr}.conn-nav{display:flex;overflow:auto}.conn-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.conn-grid{grid-template-columns:1fr 1fr}.conn-row{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 27 \u2014 Account Sync & Position Reconciliation *\/\r\n.sync-wrap{max-width:1100px;margin:0 auto}.sync-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.sync-nav{border:1px solid #ddd;background:#fff;height:max-content}.sync-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.sync-nav a.active,.sync-nav a:hover{color:var(--blue);background:#fafafa}\r\n.sync-section{display:none}.sync-section.active{display:block}.sync-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.sync-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.sync-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.sync-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.sync-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.sync-stat{border:1px solid #ddd;padding:12px}.sync-stat span{display:block;font-size:9px;color:#999}.sync-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.sync-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.sync-badge.ok{color:#26733b;border-color:#b9d8c1}.sync-badge.warn{color:#996c18;border-color:#e1c98c}.sync-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.sync-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.sync-flow{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:14px 0}.sync-step{border:1px solid #ddd;background:#fafafa;padding:10px 12px;font-size:10px}.sync-arrow{color:#999}\r\n.sync-row{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 105px 120px auto;gap:10px;align-items:center}.sync-main{font-size:11px}.sync-meta{font-size:9px;color:#999;margin-top:3px}\r\n.sync-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.sync-layout{grid-template-columns:1fr}.sync-nav{display:flex;overflow:auto}.sync-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.sync-grid{grid-template-columns:1fr 1fr}.sync-row{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 28 \u2014 Observability & Audit Center *\/\r\n.obs-wrap{max-width:1100px;margin:0 auto}.obs-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.obs-nav{border:1px solid #ddd;background:#fff;height:max-content}.obs-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.obs-nav a.active,.obs-nav a:hover{color:var(--blue);background:#fafafa}\r\n.obs-section{display:none}.obs-section.active{display:block}.obs-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.obs-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.obs-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.obs-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.obs-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.obs-stat{border:1px solid #ddd;padding:12px}.obs-stat span{display:block;font-size:9px;color:#999}.obs-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.obs-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.obs-badge.ok{color:#26733b;border-color:#b9d8c1}.obs-badge.warn{color:#996c18;border-color:#e1c98c}.obs-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.obs-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.obs-row{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 105px 120px auto;gap:10px;align-items:center}.obs-main{font-size:11px}.obs-meta{font-size:9px;color:#999;margin-top:3px}\r\n.obs-timeline{border-left:1px solid #ddd;margin:10px 0 0 7px;padding-left:17px}.obs-event{position:relative;padding:0 0 15px;font-size:10px}.obs-event:before{content:\"\";position:absolute;left:-22px;top:2px;width:7px;height:7px;border:1px solid #aaa;background:#fff}.obs-event b{font-weight:500}.obs-event span{display:block;color:#999;font-size:9px;margin-top:3px}\r\n.obs-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n.obs-log{background:#fafafa;border:1px solid #ddd;padding:11px;font-family:Consolas,monospace;font-size:9px;line-height:1.65;overflow:auto;white-space:pre-wrap}\r\n@media(max-width:800px){.obs-layout{grid-template-columns:1fr}.obs-nav{display:flex;overflow:auto}.obs-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.obs-grid{grid-template-columns:1fr 1fr}.obs-row{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 29 \u2014 Security & Access Control *\/\r\n.sec-wrap{max-width:1100px;margin:0 auto}.sec-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.sec-nav{border:1px solid #ddd;background:#fff;height:max-content}.sec-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.sec-nav a.active,.sec-nav a:hover{color:var(--blue);background:#fafafa}\r\n.sec-section{display:none}.sec-section.active{display:block}.sec-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.sec-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.sec-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.sec-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.sec-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.sec-stat{border:1px solid #ddd;padding:12px}.sec-stat span{display:block;font-size:9px;color:#999}.sec-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.sec-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.sec-badge.ok{color:#26733b;border-color:#b9d8c1}.sec-badge.warn{color:#996c18;border-color:#e1c98c}.sec-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.sec-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.sec-row{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 120px 120px auto;gap:10px;align-items:center}.sec-main{font-size:11px}.sec-meta{font-size:9px;color:#999;margin-top:3px}\r\n.sec-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}.sec-perm{font-family:Consolas,monospace;font-size:9px;background:#fafafa;border:1px solid #ddd;padding:10px;line-height:1.7}\r\n@media(max-width:800px){.sec-layout{grid-template-columns:1fr}.sec-nav{display:flex;overflow:auto}.sec-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.sec-grid{grid-template-columns:1fr 1fr}.sec-row{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 30 \u2014 Production Readiness & Deployment Control *\/\r\n.prod-wrap{max-width:1100px;margin:0 auto}.prod-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.prod-nav{border:1px solid #ddd;background:#fff;height:max-content}.prod-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.prod-nav a.active,.prod-nav a:hover{color:var(--blue);background:#fafafa}\r\n.prod-section{display:none}.prod-section.active{display:block}.prod-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.prod-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.prod-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.prod-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.prod-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.prod-stat{border:1px solid #ddd;padding:12px}.prod-stat span{display:block;font-size:9px;color:#999}.prod-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.prod-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.prod-badge.ok{color:#26733b;border-color:#b9d8c1}.prod-badge.warn{color:#996c18;border-color:#e1c98c}.prod-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.prod-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.prod-row{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 120px 120px auto;gap:10px;align-items:center}.prod-main{font-size:11px}.prod-meta{font-size:9px;color:#999;margin-top:3px}\r\n.prod-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}.prod-check{font-family:Consolas,monospace;font-size:9px;background:#fafafa;border:1px solid #ddd;padding:10px;line-height:1.7}\r\n@media(max-width:800px){.prod-layout{grid-template-columns:1fr}.prod-nav{display:flex;overflow:auto}.prod-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.prod-grid{grid-template-columns:1fr 1fr}.prod-row{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 31 \u2014 Infrastructure & Service Health *\/\r\n.infra-wrap{max-width:1100px;margin:0 auto}.infra-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.infra-nav{border:1px solid #ddd;background:#fff;height:max-content}.infra-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.infra-nav a.active,.infra-nav a:hover{color:var(--blue);background:#fafafa}\r\n.infra-section{display:none}.infra-section.active{display:block}.infra-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.infra-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.infra-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.infra-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.infra-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.infra-stat{border:1px solid #ddd;padding:12px}.infra-stat span{display:block;font-size:9px;color:#999}.infra-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.infra-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.infra-badge.ok{color:#26733b;border-color:#b9d8c1}.infra-badge.warn{color:#996c18;border-color:#e1c98c}.infra-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.infra-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.infra-row{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 120px 120px auto;gap:10px;align-items:center}.infra-main{font-size:11px}.infra-meta{font-size:9px;color:#999;margin-top:3px}\r\n.infra-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.infra-layout{grid-template-columns:1fr}.infra-nav{display:flex;overflow:auto}.infra-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.infra-grid{grid-template-columns:1fr 1fr}.infra-row{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 32 \u2014 Disaster Recovery & Business Continuity *\/\r\n.dr-wrap{max-width:1100px;margin:0 auto}.dr-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.dr-nav{border:1px solid #ddd;background:#fff;height:max-content}.dr-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.dr-nav a.active,.dr-nav a:hover{color:var(--blue);background:#fafafa}\r\n.dr-section{display:none}.dr-section.active{display:block}.dr-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.dr-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.dr-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.dr-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.dr-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.dr-stat{border:1px solid #ddd;padding:12px}.dr-stat span{display:block;font-size:9px;color:#999}.dr-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.dr-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.dr-badge.ok{color:#26733b;border-color:#b9d8c1}.dr-badge.warn{color:#996c18;border-color:#e1c98c}.dr-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.dr-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.dr-row{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 120px 120px auto;gap:10px;align-items:center}.dr-main{font-size:11px}.dr-meta{font-size:9px;color:#999;margin-top:3px}\r\n.dr-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.dr-layout{grid-template-columns:1fr}.dr-nav{display:flex;overflow:auto}.dr-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.dr-grid{grid-template-columns:1fr 1fr}.dr-row{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 33 \u2014 Incident Management & Operational Response *\/\r\n.inc-wrap{max-width:1100px;margin:0 auto}.inc-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.inc-nav{border:1px solid #ddd;background:#fff;height:max-content}.inc-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.inc-nav a.active,.inc-nav a:hover{color:var(--blue);background:#fafafa}\r\n.inc-section{display:none}.inc-section.active{display:block}.inc-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.inc-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.inc-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.inc-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.inc-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.inc-stat{border:1px solid #ddd;padding:12px}.inc-stat span{display:block;font-size:9px;color:#999}.inc-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.inc-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.inc-badge.ok{color:#26733b;border-color:#b9d8c1}.inc-badge.warn{color:#996c18;border-color:#e1c98c}.inc-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.inc-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.inc-row{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 120px 120px auto;gap:10px;align-items:center}.inc-main{font-size:11px}.inc-meta{font-size:9px;color:#999;margin-top:3px}\r\n.inc-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.inc-layout{grid-template-columns:1fr}.inc-nav{display:flex;overflow:auto}.inc-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.inc-grid{grid-template-columns:1fr 1fr}.inc-row{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 34 \u2014 Monitoring, Alerting & SLO Control *\/\r\n.mon-wrap{max-width:1100px;margin:0 auto}.mon-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.mon-nav{border:1px solid #ddd;background:#fff;height:max-content}.mon-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.mon-nav a.active,.mon-nav a:hover{color:var(--blue);background:#fafafa}\r\n.mon-section{display:none}.mon-section.active{display:block}.mon-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.mon-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.mon-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.mon-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.mon-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.mon-stat{border:1px solid #ddd;padding:12px}.mon-stat span{display:block;font-size:9px;color:#999}.mon-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.mon-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.mon-badge.ok{color:#26733b;border-color:#b9d8c1}.mon-badge.warn{color:#996c18;border-color:#e1c98c}.mon-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.mon-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.mon-row{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 120px 120px auto;gap:10px;align-items:center}.mon-main{font-size:11px}.mon-meta{font-size:9px;color:#999;margin-top:3px}\r\n.mon-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n.mon-meter{height:7px;background:#eee;margin-top:6px;overflow:hidden}.mon-meter span{display:block;height:100%;background:#777}\r\n@media(max-width:800px){.mon-layout{grid-template-columns:1fr}.mon-nav{display:flex;overflow:auto}.mon-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.mon-grid{grid-template-columns:1fr 1fr}.mon-row{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 35 \u2014 Audit, Compliance & Governance Control *\/\r\n.gov-wrap{max-width:1100px;margin:0 auto}.gov-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.gov-nav{border:1px solid #ddd;background:#fff;height:max-content}.gov-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.gov-nav a.active,.gov-nav a:hover{color:var(--blue);background:#fafafa}\r\n.gov-section{display:none}.gov-section.active{display:block}.gov-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.gov-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.gov-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.gov-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.gov-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.gov-stat{border:1px solid #ddd;padding:12px}.gov-stat span{display:block;font-size:9px;color:#999}.gov-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.gov-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.gov-badge.ok{color:#26733b;border-color:#b9d8c1}.gov-badge.warn{color:#996c18;border-color:#e1c98c}.gov-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.gov-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.gov-row{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 120px 120px auto;gap:10px;align-items:center}.gov-main{font-size:11px}.gov-meta{font-size:9px;color:#999;margin-top:3px}\r\n.gov-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.gov-layout{grid-template-columns:1fr}.gov-nav{display:flex;overflow:auto}.gov-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.gov-grid{grid-template-columns:1fr 1fr}.gov-row{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 36 \u2014 Data Governance & Retention Control *\/\r\n.data-wrap{max-width:1100px;margin:0 auto}.data-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.data-nav{border:1px solid #ddd;background:#fff;height:max-content}.data-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.data-nav a.active,.data-nav a:hover{color:var(--blue);background:#fafafa}\r\n.data-section{display:none}.data-section.active{display:block}.data-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.data-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.data-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.data-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.data-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.data-stat{border:1px solid #ddd;padding:12px}.data-stat span{display:block;font-size:9px;color:#999}.data-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.data-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.data-badge.ok{color:#26733b;border-color:#b9d8c1}.data-badge.warn{color:#996c18;border-color:#e1c98c}.data-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.data-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.data-row{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 120px 120px auto;gap:10px;align-items:center}.data-main{font-size:11px}.data-meta{font-size:9px;color:#999;margin-top:3px}\r\n.data-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.data-layout{grid-template-columns:1fr}.data-nav{display:flex;overflow:auto}.data-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.data-grid{grid-template-columns:1fr 1fr}.data-row{grid-template-columns:1fr}}\r\n\r\n\r\n\/* STEP 37 \u2014 Release & Deployment Control *\/\r\n.rel-wrap{max-width:1100px;margin:0 auto}.rel-layout{display:grid;grid-template-columns:215px minmax(0,1fr);gap:18px}\r\n.rel-nav{border:1px solid #ddd;background:#fff;height:max-content}.rel-nav a{display:block;padding:11px 13px;border-bottom:1px solid #eee;font-size:12px;color:#555;cursor:pointer}.rel-nav a.active,.rel-nav a:hover{color:var(--blue);background:#fafafa}\r\n.rel-section{display:none}.rel-section.active{display:block}.rel-card{border:1px solid #ddd;background:#fff;padding:16px;margin-bottom:12px}.rel-card h2{font-size:18px;font-weight:400;margin:0 0 6px}.rel-card h3{font-size:14px;font-weight:500;margin:0 0 5px}.rel-desc{font-size:11px;color:#777;line-height:1.5;margin-bottom:13px}\r\n.rel-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px}.rel-stat{border:1px solid #ddd;padding:12px}.rel-stat span{display:block;font-size:9px;color:#999}.rel-stat b{display:block;font-size:13px;font-weight:400;margin-top:4px}\r\n.rel-badge{font-size:9px;padding:3px 7px;border:1px solid #ddd}.rel-badge.ok{color:#26733b;border-color:#b9d8c1}.rel-badge.warn{color:#996c18;border-color:#e1c98c}.rel-badge.fail{color:#9a3d3d;border-color:#dfbcbc}.rel-badge.info{color:#356b9b;border-color:#bfd3e5}\r\n.rel-row{border:1px solid #eee;padding:12px;margin-bottom:8px;display:grid;grid-template-columns:1.4fr 120px 120px auto;gap:10px;align-items:center}.rel-main{font-size:11px}.rel-meta{font-size:9px;color:#999;margin-top:3px}\r\n.rel-note{border:1px solid #e2d3a8;background:#fffaf0;padding:11px;font-size:10px;color:#6f5a24;line-height:1.5;margin-top:12px}\r\n@media(max-width:800px){.rel-layout{grid-template-columns:1fr}.rel-nav{display:flex;overflow:auto}.rel-nav a{white-space:nowrap;border-bottom:0;border-right:1px solid #eee}.rel-grid{grid-template-columns:1fr 1fr}.rel-row{grid-template-columns:1fr}}\r\n\r\n.footer{border-top:1px solid #ddd;padding:25px 32px;color:#888;font-size:12px;margin-top:40px}\r\n@media(max-width:1000px){.product-grid{grid-template-columns:repeat(2,1fr)}.market-layout{grid-template-columns:180px 1fr}.metrics{grid-template-columns:repeat(3,1fr)}.main-grid{grid-template-columns:1fr}.side{position:static}.info-grid{grid-template-columns:1fr}}\r\n@media(max-width:700px){.top{padding:0 12px;gap:10px}.nav{display:none}.search-mini{display:none}.page{padding:18px 12px}.signal-grid,.product-grid,.filters{grid-template-columns:1fr}.market-layout,.detail-grid{grid-template-columns:1fr}.sidebar{display:none}.searchbar{flex-direction:column}.searchbar select{width:100%}.signal-title-row,.detail-title{flex-direction:column}.header-actions{width:100%}.header-actions .btn{flex:1}.metrics{grid-template-columns:repeat(2,1fr)}.stat-grid{grid-template-columns:repeat(2,1fr)}.stat:nth-child(2n){border-right:0}.signal-name{font-size:23px}}\r\n<\/style>\r\n<\/head>\r\n<body>\r\n\r\n<header class=\"top\">\r\n<a class=\"logo\" href=\"#\" onclick=\"showPage('signals');return false\">MQL<span>Pro<\/span><\/a>\r\n<nav class=\"nav\">\r\n<button id=\"nav-signals\" class=\"active\" onclick=\"showPage('signals')\">Signals<\/button>\r\n<button id=\"nav-ranking\" onclick=\"showPage('ranking')\">Ranking<\/button>\r\n<button id=\"nav-articles\" onclick=\"showPage('articles')\">Articles<\/button>\r\n<button id=\"nav-community\" onclick=\"showPage('community')\">Community<\/button>\r\n<button id=\"nav-docs\" onclick=\"showPage('docs')\">Documentation<\/button>\r\n<button id=\"nav-market\" onclick=\"showPage('market')\">Market<\/button>\r\n<\/nav>\r\n<div class=\"actions\"><input class=\"search-mini\" placeholder=\"Search...\"><button class=\"btn login-btn\" onclick=\"showPage('login')\">Login<\/button><button class=\"btn blue\" onclick=\"showPage('register')\">Register<\/button><\/div>\r\n<\/header>\r\n\r\n<main class=\"page\">\r\n\r\n<!-- ================= SIGNALS MARKETPLACE ================= -->\r\n<section id=\"signalsPage\">\r\n<div class=\"breadcrumb\">Home \/ Signals<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Trading Signals<\/h1><div class=\"subtitle\">Browse trading systems and compare monitored performance.<\/div><\/div>\r\n<button class=\"btn blue\">Create Signal<\/button>\r\n<\/div>\r\n\r\n<div class=\"filters\">\r\n<div class=\"field\"><label>TRADING SYSTEM<\/label><select><option>All<\/option><option>Netting<\/option><option>Hedging<\/option><\/select><\/div>\r\n<div class=\"field\"><label>PROFIT \/ MONTH, %<\/label><input placeholder=\"Min \u2014 Max\"><\/div>\r\n<div class=\"field\"><label>MAX DRAWDOWN, %<\/label><input placeholder=\"Min \u2014 Max\"><\/div>\r\n<div class=\"field\"><label>SUBSCRIPTION FEE<\/label><input placeholder=\"Min \u2014 Max\"><\/div>\r\n<\/div>\r\n<div class=\"chips\"><span class=\"chip active\">Maximum profit<\/span><span class=\"chip\">Reliability<\/span><span class=\"chip\">Profitable within a month<\/span><span class=\"chip\">Intraday<\/span><span class=\"chip\">Under $50<\/span><span class=\"chip\">Having reviews<\/span><span class=\"chip\">Using robots<\/span><\/div>\r\n\r\n<div class=\"section-head\"><h2>Reliability<\/h2><span class=\"muted\">3 featured signals<\/span><\/div>\r\n<div class=\"signal-grid\">\r\n\r\n<article class=\"card\" onclick=\"openSignal('Gold Strategy Pro')\">\r\n<div class=\"card-top\"><div style=\"display:flex;gap:10px\"><div class=\"avatar\">GS<\/div><div><div class=\"name\">Gold Strategy Pro<\/div><div class=\"author\">StrategyLab<\/div><\/div><\/div><div class=\"growth\">+82%<\/div><\/div>\r\n<div class=\"meta\"><div><b>98%<\/b><span>Reliability<\/span><\/div><div><b>124<\/b><span>Subscribers<\/span><\/div><div><b>4.81%<\/b><span>Max DD<\/span><\/div><\/div><div class=\"card-foot\"><span class=\"stars\">\u2605\u2605\u2605\u2605\u2605<\/span><span class=\"copy\">Copy for $35\/mo<\/span><\/div>\r\n<\/article>\r\n\r\n<article class=\"card\" onclick=\"openSignal('FX Momentum MT5')\">\r\n<div class=\"card-top\"><div style=\"display:flex;gap:10px\"><div class=\"avatar\">FX<\/div><div><div class=\"name\">FX Momentum MT5<\/div><div class=\"author\">AlgoWorks<\/div><\/div><\/div><div class=\"growth\">+61%<\/div><\/div>\r\n<div class=\"meta\"><div><b>96%<\/b><span>Reliability<\/span><\/div><div><b>96<\/b><span>Subscribers<\/span><\/div><div><b>6.20%<\/b><span>Max DD<\/span><\/div><\/div><div class=\"card-foot\"><span class=\"stars\">\u2605\u2605\u2605\u2605\u2606<\/span><span class=\"copy\">Copy for $29\/mo<\/span><\/div>\r\n<\/article>\r\n\r\n<article class=\"card\" onclick=\"openSignal('Quantum Gold')\">\r\n<div class=\"card-top\"><div style=\"display:flex;gap:10px\"><div class=\"avatar\">QG<\/div><div><div class=\"name\">Quantum Gold<\/div><div class=\"author\">QuantForge<\/div><\/div><\/div><div class=\"growth\">+47%<\/div><\/div>\r\n<div class=\"meta\"><div><b>94%<\/b><span>Reliability<\/span><\/div><div><b>78<\/b><span>Subscribers<\/span><\/div><div><b>7.15%<\/b><span>Max DD<\/span><\/div><\/div><div class=\"card-foot\"><span class=\"stars\">\u2605\u2605\u2605\u2605\u2605<\/span><span class=\"copy\">Copy for $39\/mo<\/span><\/div>\r\n<\/article>\r\n<\/div>\r\n\r\n<div class=\"section-head\"><h2>Popular among subscribers<\/h2><span class=\"muted\">Historical statistics<\/span><\/div>\r\n<div class=\"table-wrap\"><table class=\"table\">\r\n<thead><tr><th>Signal<\/th><th>Growth<\/th><th>Subscribers<\/th><th>Funds<\/th><th>Weeks<\/th><th>Trades<\/th><th>Win %<\/th><th>Activity<\/th><th>PF<\/th><th>Drawdown<\/th><\/tr><\/thead>\r\n<tbody>\r\n<tr onclick=\"openSignal('Gold Strategy Pro')\" style=\"cursor:pointer\"><td><b>Gold Strategy Pro<\/b><br><span class=\"muted\">StrategyLab<\/span><\/td><td class=\"green\">82.40%<\/td><td>124<\/td><td>$184,230<\/td><td>68<\/td><td>1,482<\/td><td>74%<\/td><td>82%<\/td><td>2.14<\/td><td>4.81%<\/td><\/tr>\r\n<tr onclick=\"openSignal('FX Momentum MT5')\" style=\"cursor:pointer\"><td><b>FX Momentum MT5<\/b><br><span class=\"muted\">AlgoWorks<\/span><\/td><td class=\"green\">61.18%<\/td><td>96<\/td><td>$102,810<\/td><td>51<\/td><td>934<\/td><td>69%<\/td><td>74%<\/td><td>1.91<\/td><td>6.20%<\/td><\/tr>\r\n<tr onclick=\"openSignal('Quantum Gold')\" style=\"cursor:pointer\"><td><b>Quantum Gold<\/b><br><span class=\"muted\">QuantForge<\/span><\/td><td class=\"green\">47.63%<\/td><td>78<\/td><td>$76,430<\/td><td>43<\/td><td>611<\/td><td>71%<\/td><td>67%<\/td><td>2.03<\/td><td>7.15%<\/td><\/tr>\r\n<\/tbody><\/table><\/div>\r\n<div class=\"info\"><b>Risk notice.<\/b> Historical statistics are not a guarantee of future results. Copying trades involves financial risk. Prototype statistics are simulated.<\/div>\r\n<\/section>\r\n\r\n<!-- ================= SIGNAL DETAIL ================= -->\r\n<section id=\"signalDetailPage\" class=\"hidden\">\r\n<div class=\"breadcrumb\">Home \/ Signals \/ <span id=\"signalBreadcrumb\">Gold Strategy Pro<\/span><\/div>\r\n<div class=\"signal-header\">\r\n<div class=\"signal-title-row\">\r\n<div class=\"identity\"><div class=\"avatar-lg\">GS<\/div><div><h1 class=\"signal-name\" id=\"detailName\">Gold Strategy Pro <span class=\"status\"><i class=\"dot\"><\/i>ACTIVE<\/span><\/h1><div class=\"provider\">by StrategyLab \u00b7 Automated trading signal \u00b7 Cross-broker copy<\/div><\/div><\/div>\r\n<div class=\"header-actions\"><button class=\"btn\" onclick=\"showPage('signals')\">Back<\/button><button class=\"btn blue\" onclick=\"openCopy()\">Copy this Signal<\/button><\/div>\r\n<\/div>\r\n<div class=\"metrics\">\r\n<div class=\"metric\"><span>RETURN<\/span><b class=\"positive\">+82.40%<\/b><\/div><div class=\"metric\"><span>MAX DRAWDOWN<\/span><b>4.81%<\/b><\/div><div class=\"metric\"><span>PROFIT FACTOR<\/span><b>2.14<\/b><\/div><div class=\"metric\"><span>SUBSCRIBERS<\/span><b>124<\/b><\/div><div class=\"metric\"><span>TRADING WEEKS<\/span><b>68<\/b><\/div><div class=\"metric\"><span>WIN RATE<\/span><b>74.0%<\/b><\/div>\r\n<\/div><\/div>\r\n\r\n<div class=\"main-grid\">\r\n<div>\r\n<div class=\"panel\"><div class=\"panel-head\"><h2>Performance<\/h2><span class=\"muted\">All time<\/span><\/div><div class=\"tabs\"><button class=\"active\">Equity<\/button><button>Drawdown<\/button><button>Monthly<\/button><button>Balance<\/button><\/div>\r\n<div class=\"chart\"><div class=\"gridlines\"><\/div><div class=\"chart-note\">Equity curve \u2014 illustrative mock data<\/div><div class=\"equity-line\"><\/div><div class=\"axis\"><span>$12k<\/span><span>$10k<\/span><span>$8k<\/span><span>$6k<\/span><span>$4k<\/span><\/div><\/div><\/div>\r\n\r\n<div class=\"panel\" style=\"margin-top:18px\"><div class=\"panel-head\"><h2>Trading Statistics<\/h2><span class=\"muted\">Verified period: 68 weeks<\/span><\/div><div class=\"stat-grid\">\r\n<div class=\"stat\"><span>TOTAL TRADES<\/span><b>1,482<\/b><\/div><div class=\"stat\"><span>PROFITABLE TRADES<\/span><b>1,097<\/b><\/div><div class=\"stat\"><span>LOSING TRADES<\/span><b>385<\/b><\/div><div class=\"stat\"><span>WIN RATE<\/span><b>74.0%<\/b><\/div>\r\n<div class=\"stat\"><span>AVERAGE PROFIT<\/span><b class=\"green\">$38.42<\/b><\/div><div class=\"stat\"><span>AVERAGE LOSS<\/span><b>$24.17<\/b><\/div><div class=\"stat\"><span>BEST TRADE<\/span><b class=\"green\">$284.60<\/b><\/div><div class=\"stat\"><span>WORST TRADE<\/span><b>$137.40<\/b><\/div>\r\n<div class=\"stat\"><span>RECOVERY FACTOR<\/span><b>3.82<\/b><\/div><div class=\"stat\"><span>SHARPE RATIO<\/span><b>1.67<\/b><\/div><div class=\"stat\"><span>AVG. HOLDING<\/span><b>4h 18m<\/b><\/div><div class=\"stat\"><span>TRADES \/ WEEK<\/span><b>21.8<\/b><\/div>\r\n<\/div><\/div>\r\n\r\n<div class=\"info-grid\"><div class=\"text-panel\"><h3>Strategy Information<\/h3><p>Market: Gold \/ XAUUSD<br>Style: Automated momentum<br>Execution: Cross-broker copy<br>Activity: Intraday<\/p><div class=\"blackbox\"><b>Strategy Logic<\/b><div class=\"protected\">\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588<\/div><small class=\"muted\">Protected proprietary logic. Entry rules, parameters and internal decision model are not publicly exposed.<\/small><\/div><\/div>\r\n<div class=\"text-panel\"><h3>Risk & Allocation<\/h3><p>Recommended allocation is determined by the subscriber's own risk profile and account conditions. MQLPro can apply allocation limits, exposure limits and copy controls before execution.<\/p><div class=\"blackbox\"><b>Important<\/b><br><small class=\"muted\">Past performance does not guarantee future results.<\/small><\/div><\/div><\/div>\r\n\r\n<div class=\"panel\" style=\"margin-top:18px\"><div class=\"panel-head\"><h2>Recent Trading Activity<\/h2><span class=\"muted\">Signal-level activity<\/span><\/div><div class=\"table-wrap\"><table class=\"table\"><thead><tr><th>Time<\/th><th>Symbol<\/th><th>Direction<\/th><th>Result<\/th><th>Duration<\/th><th>Return<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Today 14:32<\/td><td>XAUUSD<\/td><td>BUY<\/td><td class=\"green\">Profit<\/td><td>2h 41m<\/td><td class=\"green\">+0.84%<\/td><\/tr><tr><td>Today 09:15<\/td><td>XAUUSD<\/td><td>SELL<\/td><td class=\"green\">Profit<\/td><td>1h 58m<\/td><td class=\"green\">+0.52%<\/td><\/tr><tr><td>Yesterday 16:07<\/td><td>XAUUSD<\/td><td>BUY<\/td><td>Loss<\/td><td>3h 12m<\/td><td>\u22120.31%<\/td><\/tr><tr><td>Yesterday 10:42<\/td><td>XAUUSD<\/td><td>BUY<\/td><td class=\"green\">Profit<\/td><td>5h 02m<\/td><td class=\"green\">+1.06%<\/td><\/tr>\r\n<\/tbody><\/table><\/div><\/div>\r\n<\/div>\r\n\r\n<aside class=\"side\"><h2>Copy this Signal<\/h2><div class=\"muted\">Gold Strategy Pro<\/div><div class=\"price\">$35 <span class=\"muted\" style=\"font-size:13px\">\/ month<\/span><\/div>\r\n<label>ALLOCATION<\/label><input id=\"allocation\" value=\"1000\" type=\"number\" min=\"1\"><label>RISK MODE<\/label><select><option>Balanced<\/option><option>Conservative<\/option><option>Aggressive<\/option><\/select><label>COPY METHOD<\/label><select><option>Proportional<\/option><option>Fixed Risk<\/option><option>Fixed Lot<\/option><\/select>\r\n<button class=\"btn blue full\" onclick=\"openCopy()\">Start Copying<\/button><div class=\"checklist\"><div><span>\u2713<\/span>Broker compatibility check<\/div><div><span>\u2713<\/span>Risk controls before execution<\/div><div><span>\u2713<\/span>Copy status monitoring<\/div><div><span>\u2713<\/span>Position reconciliation<\/div><\/div><div class=\"notice\">Prototype only \u2014 no live trades are executed.<\/div><\/aside>\r\n<\/div>\r\n\r\n<div id=\"copyBox\" class=\"panel hidden\" style=\"margin-top:18px;padding:18px\"><h2 style=\"font-size:19px;font-weight:400;margin:0 0 8px\">Copy Configuration<\/h2><p class=\"muted\">Review broker connection and copy settings before execution.<\/p><div style=\"display:grid;grid-template-columns:repeat(3,1fr);gap:12px\"><div><label style=\"display:block;font-size:11px;color:#777\">BROKER ACCOUNT<\/label><select style=\"width:100%;height:38px;border:1px solid #ccc\"><option>Demo Account \u2014 not connected<\/option><\/select><\/div><div><label style=\"display:block;font-size:11px;color:#777\">ALLOCATION<\/label><input id=\"allocation2\" value=\"1000\" style=\"width:100%;height:38px;border:1px solid #ccc;padding:0 10px\"><\/div><div><label style=\"display:block;font-size:11px;color:#777\">RISK MODE<\/label><select style=\"width:100%;height:38px;border:1px solid #ccc\"><option>Balanced<\/option><option>Conservative<\/option><\/select><\/div><\/div><div style=\"margin-top:15px\"><button class=\"btn\" onclick=\"document.getElementById('copyBox').classList.add('hidden')\">Cancel<\/button> <button class=\"btn blue\" onclick=\"alert('Prototype only \u2014 no real trade will be executed.')\">Confirm Copy Configuration<\/button><\/div><\/div>\r\n<div class=\"risk notice\"><b>Risk notice.<\/b> Trading involves risk of loss. Historical performance and statistics are illustrative prototype data.<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= RANKING ================= -->\r\n<section id=\"rankingPage\" class=\"hidden\">\r\n<div class=\"breadcrumb\">Home \/ Ranking<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Ranking<\/h1><div class=\"subtitle\">Compare monitored trading signals using multiple performance and risk metrics.<\/div><\/div>\r\n<button class=\"btn blue\" onclick=\"showPage('signals')\">Browse Signals<\/button>\r\n<\/div>\r\n\r\n<div class=\"rank-summary\">\r\n<div class=\"rank-summary-card\"><span>SIGNALS TRACKED<\/span><b>1,284<\/b><\/div>\r\n<div class=\"rank-summary-card\"><span>ACTIVE SIGNALS<\/span><b>936<\/b><\/div>\r\n<div class=\"rank-summary-card\"><span>AVERAGE RETURN<\/span><b class=\"rank-return\">+24.8%<\/b><\/div>\r\n<div class=\"rank-summary-card\"><span>MEDIAN MAX DD<\/span><b>8.42%<\/b><\/div>\r\n<div class=\"rank-summary-card\"><span>DATA PERIOD<\/span><b>12 Months<\/b><\/div>\r\n<\/div>\r\n\r\n<div class=\"ranking-toolbar\">\r\n<select id=\"rankPeriod\" onchange=\"updateRanking()\"><option>12 Months<\/option><option>6 Months<\/option><option>3 Months<\/option><option>1 Month<\/option><\/select>\r\n<select id=\"rankMetric\" onchange=\"updateRanking()\"><option value=\"return\">Return<\/option><option value=\"risk\">Risk Adjusted<\/option><option value=\"dd\">Lowest Drawdown<\/option><option value=\"pf\">Profit Factor<\/option><option value=\"win\">Win Rate<\/option><option value=\"subs\">Subscribers<\/option><\/select>\r\n<select><option>All Markets<\/option><option>Forex<\/option><option>Gold<\/option><option>Indices<\/option><option>Crypto<\/option><\/select>\r\n<select><option>All Styles<\/option><option>Intraday<\/option><option>Swing<\/option><option>Scalping<\/option><option>Position<\/option><\/select>\r\n<input id=\"rankSearch\" oninput=\"filterRanking()\" placeholder=\"Search signal or provider...\" style=\"flex:1;min-width:190px\">\r\n<button class=\"btn\" onclick=\"resetRanking()\">Reset<\/button>\r\n<\/div>\r\n\r\n<div class=\"section-head\" style=\"margin-top:0\"><h2>Top Signals<\/h2><span class=\"muted\">Illustrative marketplace ranking<\/span><\/div>\r\n<div class=\"table-wrap\">\r\n<table class=\"rank-table\" id=\"rankingTable\">\r\n<thead><tr><th>#<\/th><th>Signal<\/th><th>Return<\/th><th>Max DD<\/th><th>Profit Factor<\/th><th>Win Rate<\/th><th>Subscribers<\/th><th>Weeks<\/th><th>Risk \/ Return<\/th><th><\/th><\/tr><\/thead>\r\n<tbody>\r\n<tr data-name=\"Gold Strategy Pro StrategyLab\" data-return=\"82.40\" data-risk=\"17.13\" data-dd=\"4.81\" data-pf=\"2.14\" data-win=\"74\" data-subs=\"124\" onclick=\"openSignal('Gold Strategy Pro')\"><td class=\"rank-num\">1<\/td><td><div class=\"rank-name\">Gold Strategy Pro<\/div><div class=\"rank-provider\">StrategyLab \u00b7 Gold \/ XAUUSD<\/div><\/td><td class=\"rank-return\">+82.40%<\/td><td class=\"risk-low\">4.81%<\/td><td>2.14<\/td><td>74%<\/td><td>124<\/td><td>68<\/td><td>17.13<\/td><td class=\"rank-link\">View \u2192<\/td><\/tr>\r\n<tr data-name=\"FX Momentum MT5 AlgoWorks\" data-return=\"61.18\" data-risk=\"9.87\" data-dd=\"6.20\" data-pf=\"1.91\" data-win=\"69\" data-subs=\"96\" onclick=\"openSignal('FX Momentum MT5')\"><td class=\"rank-num\">2<\/td><td><div class=\"rank-name\">FX Momentum MT5<\/div><div class=\"rank-provider\">AlgoWorks \u00b7 Forex<\/div><\/td><td class=\"rank-return\">+61.18%<\/td><td>6.20%<\/td><td>1.91<\/td><td>69%<\/td><td>96<\/td><td>51<\/td><td>9.87<\/td><td class=\"rank-link\">View \u2192<\/td><\/tr>\r\n<tr data-name=\"Quantum Gold QuantForge\" data-return=\"47.63\" data-risk=\"6.66\" data-dd=\"7.15\" data-pf=\"2.03\" data-win=\"71\" data-subs=\"78\" onclick=\"openSignal('Quantum Gold')\"><td class=\"rank-num\">3<\/td><td><div class=\"rank-name\">Quantum Gold<\/div><div class=\"rank-provider\">QuantForge \u00b7 Gold \/ XAUUSD<\/div><\/td><td class=\"rank-return\">+47.63%<\/td><td>7.15%<\/td><td>2.03<\/td><td>71%<\/td><td>78<\/td><td>43<\/td><td>6.66<\/td><td class=\"rank-link\">View \u2192<\/td><\/tr>\r\n<tr data-name=\"Index Flow Pro DataEdge\" data-return=\"39.22\" data-risk=\"7.58\" data-dd=\"5.17\" data-pf=\"1.82\" data-win=\"68\" data-subs=\"63\" onclick=\"openSignal('Index Flow Pro')\"><td class=\"rank-num\">4<\/td><td><div class=\"rank-name\">Index Flow Pro<\/div><div class=\"rank-provider\">DataEdge \u00b7 Indices<\/div><\/td><td class=\"rank-return\">+39.22%<\/td><td class=\"risk-low\">5.17%<\/td><td>1.82<\/td><td>68%<\/td><td>63<\/td><td>47<\/td><td>7.58<\/td><td class=\"rank-link\">View \u2192<\/td><\/tr>\r\n<tr data-name=\"Atlas Swing System NorthStar\" data-return=\"34.75\" data-risk=\"5.42\" data-dd=\"6.41\" data-pf=\"1.76\" data-win=\"66\" data-subs=\"51\" onclick=\"openSignal('Atlas Swing System')\"><td class=\"rank-num\">5<\/td><td><div class=\"rank-name\">Atlas Swing System<\/div><div class=\"rank-provider\">NorthStar \u00b7 Forex<\/div><\/td><td class=\"rank-return\">+34.75%<\/td><td>6.41%<\/td><td>1.76<\/td><td>66%<\/td><td>51<\/td><td>82<\/td><td>5.42<\/td><td class=\"rank-link\">View \u2192<\/td><\/tr>\r\n<tr data-name=\"Vector Scalper Prime VectorLabs\" data-return=\"31.60\" data-risk=\"4.18\" data-dd=\"7.56\" data-pf=\"1.69\" data-win=\"72\" data-subs=\"44\" onclick=\"openSignal('Vector Scalper Prime')\"><td class=\"rank-num\">6<\/td><td><div class=\"rank-name\">Vector Scalper Prime<\/div><div class=\"rank-provider\">VectorLabs \u00b7 Forex<\/div><\/td><td class=\"rank-return\">+31.60%<\/td><td>7.56%<\/td><td>1.69<\/td><td>72%<\/td><td>44<\/td><td>36<\/td><td>4.18<\/td><td class=\"rank-link\">View \u2192<\/td><\/tr>\r\n<\/tbody>\r\n<\/table>\r\n<\/div>\r\n\r\n<div class=\"rank-explain\">\r\n<div class=\"rank-box\"><h3>How Ranking works<\/h3><p>Ranking is designed as a discovery layer. Users can switch the displayed metric and period rather than treating a single number as a complete measure of a trading system. MQLPro can later calculate these rankings from verified account data.<\/p><\/div>\r\n<div class=\"rank-box\"><h3>Risk context<\/h3><p>Return alone does not describe risk. Max drawdown, profit factor, consistency, trading history and account-level exposure should be reviewed together before copying a signal.<\/p><\/div>\r\n<\/div>\r\n<div class=\"notice\"><b>Ranking notice.<\/b> The figures in this prototype are simulated. A production ranking engine should use verified performance records, defined calculation windows and anti-manipulation rules.<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= ARTICLES ================= -->\r\n<section id=\"articlesPage\" class=\"hidden\">\r\n<div class=\"breadcrumb\">Home \/ Articles<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Articles<\/h1><div class=\"subtitle\">Trading, markets, risk management and algorithmic trading knowledge.<\/div><\/div>\r\n<button class=\"btn blue\">Write an Article<\/button>\r\n<\/div>\r\n\r\n<div class=\"article-layout\">\r\n\r\n<div class=\"article-main\">\r\n<div class=\"article-search\"><input id=\"articleSearch\" oninput=\"filterArticles()\" placeholder=\"Search articles, topics, authors...\"><select><option>Latest<\/option><option>Most Read<\/option><option>Most Discussed<\/option><\/select><\/div>\r\n\r\n<article class=\"article-feature\" onclick=\"openArticle('Building a Robust Cross-Broker Copy Trading System')\">\r\n<div class=\"article-feature-copy\"><div class=\"article-kicker\">Featured \u00b7 Copy Trading<\/div><h2>Building a Robust Cross-Broker Copy Trading System<\/h2><p>What needs to happen between a master strategy and a follower account when brokers, symbols, execution rules and risk limits are not identical.<\/p><div class=\"article-meta\">MQLPro Research \u00b7 16 Sep 2026 \u00b7 8 min read<\/div><\/div>\r\n<div class=\"article-cover\">MQL<span style=\"color:var(--blue)\">Pro<\/span><\/div>\r\n<\/article>\r\n\r\n<div class=\"section-head\" style=\"margin-top:0\"><h2>Latest Articles<\/h2><span class=\"muted\">Knowledge Hub<\/span><\/div>\r\n<div class=\"article-grid\" id=\"articleGrid\">\r\n\r\n<article class=\"article-card\" data-search=\"cross broker copy trading master follower execution risk\" onclick=\"openArticle('Building a Robust Cross-Broker Copy Trading System')\"><div class=\"article-thumb\">COPY<\/div><div class=\"article-copy\"><span class=\"article-kicker\">Copy Trading<\/span><h3>Building a Robust Cross-Broker Copy Trading System<\/h3><p>Architecture, execution mapping and risk controls for cross-broker replication.<\/p><div class=\"article-meta\">MQLPro Research \u00b7 8 min<\/div><\/div><\/article>\r\n\r\n<article class=\"article-card\" data-search=\"drawdown risk management trading signal portfolio\" onclick=\"openArticle('Understanding Drawdown Before Copying a Signal')\"><div class=\"article-thumb\">RISK<\/div><div class=\"article-copy\"><span class=\"article-kicker\">Risk Management<\/span><h3>Understanding Drawdown Before Copying a Signal<\/h3><p>Why return alone is an incomplete description of a trading system.<\/p><div class=\"article-meta\">Risk Desk \u00b7 6 min<\/div><\/div><\/article>\r\n\r\n<article class=\"article-card\" data-search=\"profit factor win rate trading statistics signal\" onclick=\"openArticle('Profit Factor vs Win Rate: Reading Signal Statistics')\"><div class=\"article-thumb\">DATA<\/div><div class=\"article-copy\"><span class=\"article-kicker\">Education<\/span><h3>Profit Factor vs Win Rate: Reading Signal Statistics<\/h3><p>Two commonly displayed metrics can tell very different stories.<\/p><div class=\"article-meta\">MQLPro Education \u00b7 5 min<\/div><\/div><\/article>\r\n\r\n<article class=\"article-card\" data-search=\"metatrader ea expert advisor automation execution\" onclick=\"openArticle('What an Expert Advisor Actually Does')\"><div class=\"article-thumb\">EA<\/div><div class=\"article-copy\"><span class=\"article-kicker\">MetaTrader<\/span><h3>What an Expert Advisor Actually Does<\/h3><p>A practical overview of automated execution, rules and platform constraints.<\/p><div class=\"article-meta\">Platform Desk \u00b7 7 min<\/div><\/div><\/article>\r\n\r\n<article class=\"article-card\" data-search=\"gold xauusd market analysis volatility\" onclick=\"openArticle('Trading Gold: Understanding Volatility and Exposure')\"><div class=\"article-thumb\">XAU<\/div><div class=\"article-copy\"><span class=\"article-kicker\">Market Analysis<\/span><h3>Trading Gold: Understanding Volatility and Exposure<\/h3><p>How volatility can affect position sizing and account-level exposure.<\/p><div class=\"article-meta\">Market Desk \u00b7 6 min<\/div><\/div><\/article>\r\n\r\n<article class=\"article-card\" data-search=\"ranking trading signals performance metrics\" onclick=\"openArticle('How Signal Rankings Should Be Interpreted')\"><div class=\"article-thumb\">RANK<\/div><div class=\"article-copy\"><span class=\"article-kicker\">Signals<\/span><h3>How Signal Rankings Should Be Interpreted<\/h3><p>Why rankings should be read together with the underlying performance metrics.<\/p><div class=\"article-meta\">MQLPro Research \u00b7 4 min<\/div><\/div><\/article>\r\n<\/div>\r\n\r\n<div class=\"notice\"><b>Editorial note.<\/b> MQLPro Articles are designed as an educational and research layer. Published analysis should distinguish historical data, methodology and opinion.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n<!-- ================= ARTICLE DETAIL ================= -->\r\n<section id=\"articleDetailPage\" class=\"hidden\">\r\n<div class=\"article-detail\">\r\n<a class=\"back\" onclick=\"showPage('articles')\">\u2190 Back to Articles<\/a>\r\n<div class=\"article-detail-head\"><div class=\"article-kicker\">Copy Trading \u00b7 Featured<\/div><h1 id=\"articleDetailTitle\">Building a Robust Cross-Broker Copy Trading System<\/h1><div class=\"article-byline\">MQLPro Research \u00b7 16 September 2026 \u00b7 8 min read<\/div><\/div>\r\n<div class=\"article-body\">\r\n<article class=\"article-content\">\r\n<p class=\"lead\">A cross-broker copy trading platform is not simply a mechanism for duplicating an order. The difficult part is maintaining the intended exposure when the master and follower accounts operate under different trading conditions.<\/p>\r\n<h2>1. Master signal<\/h2><p>The master side produces a normalized trading event. The platform should separate the public signal representation from proprietary strategy logic, exposing only the information required by the follower and the risk engine.<\/p>\r\n<h2>2. Normalization layer<\/h2><p>Before a follower receives an execution instruction, the platform needs to map symbols, contract specifications, volume rules and execution constraints. A BUY event on one broker is not automatically equivalent to the same raw order parameters on another broker.<\/p>\r\n<h2>3. Risk and allocation<\/h2><p>Follower allocation can be proportional, fixed-risk or another defined model. Account equity, exposure limits, minimum volume and other broker constraints should be evaluated before an order is sent for execution.<\/p>\r\n<h2>4. Execution and reconciliation<\/h2><p>A connector should report whether an instruction was accepted, rejected or partially executed. Reconciliation then compares the intended follower state with the actual account state so the platform can identify discrepancies.<\/p>\r\n<h2>5. Monitoring<\/h2><p>A production platform should retain an auditable event history: signal received, risk checks applied, connector response and resulting account state. This is useful for operational monitoring and user transparency.<\/p>\r\n<div class=\"notice\"><b>Prototype note.<\/b> This article describes the intended platform architecture. It does not represent live broker connectivity or guarantee execution behavior.<\/div>\r\n<\/article>\r\n<aside class=\"article-aside\"><h3>Related Articles<\/h3><a class=\"related\" onclick=\"openArticle('Understanding Drawdown Before Copying a Signal')\">Understanding Drawdown Before Copying a Signal<\/a><a class=\"related\" onclick=\"openArticle('Profit Factor vs Win Rate: Reading Signal Statistics')\">Profit Factor vs Win Rate<\/a><a class=\"related\" onclick=\"openArticle('How Signal Rankings Should Be Interpreted')\">How Signal Rankings Should Be Interpreted<\/a><h3 style=\"margin-top:18px\">Topics<\/h3><span class=\"badge\">Copy Trading<\/span> <span class=\"badge\">Risk<\/span> <span class=\"badge\">Execution<\/span><\/aside>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= COMMUNITY ================= -->\r\n<section id=\"communityPage\" class=\"hidden\">\r\n<div class=\"breadcrumb\">Home \/ Community<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Community<\/h1><div class=\"subtitle\">Discuss trading, strategies, platforms, automation and market research with other MQLPro users.<\/div><\/div>\r\n<button class=\"btn blue\" onclick=\"openNewDiscussion()\">Start Discussion<\/button>\r\n<\/div>\r\n\r\n<div class=\"community-hero\"><h2>MQLPro Community<\/h2><p>Ask questions, share research and discuss trading technology. Community content is separate from verified signal performance and marketplace listings.<\/p><\/div>\r\n\r\n<div class=\"community-layout\">\r\n<aside class=\"community-sidebar\">\r\n<div class=\"side-title\">Categories<\/div>\r\n<a class=\"community-category active\">All Discussions<\/a><a class=\"community-category\">General Trading<\/a><a class=\"community-category\">Signals<\/a><a class=\"community-category\">Copy Trading<\/a><a class=\"community-category\">Expert Advisors<\/a><a class=\"community-category\">Indicators<\/a><a class=\"community-category\">MetaTrader<\/a><a class=\"community-category\">Market Analysis<\/a><a class=\"community-category\">Risk Management<\/a>\r\n<div class=\"side-title\">Community<\/div><a class=\"community-category\">My Discussions<\/a><a class=\"community-category\">Following<\/a>\r\n<\/aside>\r\n\r\n<div class=\"community-main\">\r\n<div class=\"community-search\"><input id=\"communitySearch\" oninput=\"filterCommunity()\" placeholder=\"Search discussions...\"><select><option>Latest<\/option><option>Most Replies<\/option><option>Most Viewed<\/option><\/select><\/div>\r\n<div class=\"chips\"><span class=\"chip active\">All<\/span><span class=\"chip\">Unanswered<\/span><span class=\"chip\">Popular<\/span><span class=\"chip\">Following<\/span><\/div>\r\n\r\n<div id=\"discussionList\">\r\n<article class=\"community-post\" data-search=\"cross broker copy trading symbol mapping execution connector\" onclick=\"openDiscussion('How should symbol mapping work across different brokers?')\">\r\n<div class=\"post-row\"><div class=\"user-avatar\">AR<\/div><div style=\"min-width:0;flex:1\"><div class=\"post-title\">How should symbol mapping work across different brokers?<\/div><div class=\"post-excerpt\">Looking at a cross-broker copy architecture. How should the connector handle differences such as XAUUSD naming, contract size and minimum volume?<\/div><span class=\"post-tag\">Copy Trading<\/span><span class=\"post-tag\">Execution<\/span><div class=\"post-meta\">Arif R. \u00b7 18 replies \u00b7 642 views \u00b7 2h ago<\/div><\/div><\/div>\r\n<\/article>\r\n\r\n<article class=\"community-post\" data-search=\"signal drawdown return subscribers choosing signal\" onclick=\"openDiscussion('Which metrics do you check before following a signal?')\">\r\n<div class=\"post-row\"><div class=\"user-avatar\">DN<\/div><div style=\"min-width:0;flex:1\"><div class=\"post-title\">Which metrics do you check before following a signal?<\/div><div class=\"post-excerpt\">I am comparing return, maximum drawdown, profit factor and trading history. Interested in how others organize the comparison.<\/div><span class=\"post-tag\">Signals<\/span><span class=\"post-tag\">Risk<\/span><div class=\"post-meta\">Dimas N. \u00b7 27 replies \u00b7 1,204 views \u00b7 5h ago<\/div><\/div><\/div>\r\n<\/article>\r\n\r\n<article class=\"community-post\" data-search=\"mt5 expert advisor VPS execution latency\" onclick=\"openDiscussion('MT5 EA on VPS: what should I monitor?')\">\r\n<div class=\"post-row\"><div class=\"user-avatar\">FK<\/div><div style=\"min-width:0;flex:1\"><div class=\"post-title\">MT5 EA on VPS: what should I monitor?<\/div><div class=\"post-excerpt\">Collecting a checklist for uptime, terminal connection, order execution and log monitoring for automated systems.<\/div><span class=\"post-tag\">MetaTrader<\/span><span class=\"post-tag\">Expert Advisor<\/span><div class=\"post-meta\">Fajar K. \u00b7 11 replies \u00b7 388 views \u00b7 1d ago<\/div><\/div><\/div>\r\n<\/article>\r\n\r\n<article class=\"community-post\" data-search=\"risk allocation proportional fixed risk copy trading\" onclick=\"openDiscussion('Proportional allocation vs fixed-risk copying')\">\r\n<div class=\"post-row\"><div class=\"user-avatar\">SA<\/div><div style=\"min-width:0;flex:1\"><div class=\"post-title\">Proportional allocation vs fixed-risk copying<\/div><div class=\"post-excerpt\">What are the practical differences between proportional sizing and fixed-risk models when follower account balances vary?<\/div><span class=\"post-tag\">Copy Trading<\/span><span class=\"post-tag\">Risk Management<\/span><div class=\"post-meta\">Satria A. \u00b7 9 replies \u00b7 301 views \u00b7 1d ago<\/div><\/div><\/div>\r\n<\/article>\r\n\r\n<article class=\"community-post\" data-search=\"gold xauusd volatility news trading analysis\" onclick=\"openDiscussion('How are you handling XAUUSD volatility?')\">\r\n<div class=\"post-row\"><div class=\"user-avatar\">NR<\/div><div style=\"min-width:0;flex:1\"><div class=\"post-title\">How are you handling XAUUSD volatility?<\/div><div class=\"post-excerpt\">Discussion about exposure limits and execution considerations when gold moves rapidly around major market events.<\/div><span class=\"post-tag\">Market Analysis<\/span><span class=\"post-tag\">Gold<\/span><div class=\"post-meta\">Nadia R. \u00b7 15 replies \u00b7 710 views \u00b7 2d ago<\/div><\/div><\/div>\r\n<\/article>\r\n<\/div>\r\n<div class=\"notice\"><b>Community note.<\/b> User discussions are community-generated and should not be treated as verified performance data, financial advice or an endorsement by MQLPro.<\/div>\r\n<\/div>\r\n\r\n<\/div>\r\n<\/section>\r\n\r\n<!-- ================= DISCUSSION DETAIL ================= -->\r\n<section id=\"discussionDetailPage\" class=\"hidden\">\r\n<div class=\"discussion-detail\">\r\n<a class=\"back\" onclick=\"showPage('community')\">\u2190 Back to Community<\/a>\r\n<div class=\"discussion-head\"><span class=\"post-tag\">Copy Trading<\/span><h1 id=\"discussionTitle\">How should symbol mapping work across different brokers?<\/h1><div class=\"discussion-byline\">Arif R. \u00b7 16 September 2026 \u00b7 18 replies \u00b7 642 views<\/div><\/div>\r\n<div class=\"discussion-body\">\r\n<div>\r\n<div class=\"reply\"><div class=\"reply-head\"><div class=\"user-avatar\">AR<\/div><div><div class=\"reply-user\">Arif R.<\/div><div class=\"reply-time\">Original post \u00b7 2h ago<\/div><\/div><\/div><p>Looking at a cross-broker copy architecture. How should the connector handle differences such as symbol naming, contract size, minimum volume and execution constraints? I am interested in the architecture rather than a specific broker.<\/p><\/div>\r\n<div class=\"reply\"><div class=\"reply-head\"><div class=\"user-avatar\">QF<\/div><div><div class=\"reply-user\">QuantForge<\/div><div class=\"reply-time\">1h 42m ago<\/div><\/div><\/div><p>A normalization layer is useful. Keep the master event abstract, then map symbol, volume and execution rules for each follower account before sending the order.<\/p><\/div>\r\n<div class=\"reply\"><div class=\"reply-head\"><div class=\"user-avatar\">AW<\/div><div><div class=\"reply-user\">AlgoWorks<\/div><div class=\"reply-time\">1h 18m ago<\/div><\/div><\/div><p>I would also keep reconciliation separate from execution. The connector should report the actual account state so the platform can detect differences between intended and executed positions.<\/p><\/div>\r\n<div class=\"reply\"><div class=\"reply-head\"><div class=\"user-avatar\">SL<\/div><div><div class=\"reply-user\">StrategyLab<\/div><div class=\"reply-time\">54m ago<\/div><\/div><\/div><p>Risk checks should happen before the connector call. That allows allocation, exposure and broker-specific constraints to be evaluated consistently.<\/p><\/div>\r\n<div class=\"reply-box\"><h3 style=\"font-size:16px;font-weight:400;margin:0 0 10px\">Join the discussion<\/h3><textarea placeholder=\"Write a reply...\"><\/textarea><div style=\"margin-top:9px\"><button class=\"btn blue\" onclick=\"alert('Prototype only \u2014 authentication and posting are not connected.')\">Post Reply<\/button><\/div><\/div>\r\n<\/div>\r\n<aside class=\"discussion-aside\"><h3>Discussion Info<\/h3><p><b>Category<\/b><br>Copy Trading<\/p><p><b>Status<\/b><br>Open<\/p><p><b>Replies<\/b><br>18<\/p><p><b>Views<\/b><br>642<\/p><p><b>Tags<\/b><br>Broker \u00b7 Connector \u00b7 Symbol Mapping \u00b7 Execution<\/p><div class=\"notice\">Community content is user-generated. Verify technical and trading claims independently.<\/div><\/aside>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= DOCUMENTATION ================= -->\r\n<section id=\"docsPage\" class=\"hidden\">\r\n<div class=\"breadcrumb\">Home \/ Documentation<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Documentation<\/h1><div class=\"subtitle\">Guides and technical references for using the MQLPro platform.<\/div><\/div>\r\n<\/div>\r\n\r\n<div class=\"docs-layout\">\r\n<aside class=\"docs-sidebar\">\r\n<div class=\"side-title\">Documentation<\/div>\r\n<a class=\"docs-item active\">Documentation Home<\/a>\r\n<a class=\"docs-item\" onclick=\"openDoc('Getting Started')\">Getting Started<\/a>\r\n<a class=\"docs-item\" onclick=\"openDoc('Signals')\">Signals<\/a>\r\n<a class=\"docs-item\" onclick=\"openDoc('Copy Trading')\">Copy Trading<\/a>\r\n<a class=\"docs-item\" onclick=\"openDoc('Market')\">Market<\/a>\r\n<a class=\"docs-item\" onclick=\"openDoc('Ranking & Performance')\">Ranking & Performance<\/a>\r\n<a class=\"docs-item\" onclick=\"openDoc('Risk Management')\">Risk Management<\/a>\r\n<a class=\"docs-item\" onclick=\"openDoc('Broker Connectors')\">Broker Connectors<\/a>\r\n<a class=\"docs-item\" onclick=\"openDoc('API & Webhooks')\">API & Webhooks<\/a>\r\n<a class=\"docs-item\" onclick=\"openDoc('FAQ')\">FAQ<\/a>\r\n<\/aside>\r\n\r\n<div class=\"docs-main\">\r\n<div class=\"docs-search\"><input id=\"docsSearch\" oninput=\"filterDocs()\" placeholder=\"Search documentation...\"><button class=\"btn blue\">Search<\/button><\/div>\r\n<div class=\"docs-hero\"><h2>Welcome to MQLPro Documentation<\/h2><p>Start with the platform basics, then explore signal discovery, copy trading, market products, performance metrics, risk controls and connector architecture.<\/p><\/div>\r\n\r\n<div class=\"section-head\" style=\"margin-top:0\"><h2>Get Started<\/h2><span class=\"muted\">Recommended path<\/span><\/div>\r\n<div class=\"docs-section-grid\">\r\n<div class=\"docs-card\" data-search=\"getting started account signals copy trading\"><div class=\"docs-icon\">01<\/div><h3>Getting Started<\/h3><p>Understand the platform, create an account and learn the basic workflow.<\/p><div class=\"docs-count\">6 guides<\/div><\/div>\r\n<div class=\"docs-card\" data-search=\"signals marketplace signal detail performance\"><div class=\"docs-icon\">02<\/div><h3>Signals<\/h3><p>Learn how to browse signals, inspect historical metrics and open signal details.<\/p><div class=\"docs-count\">9 guides<\/div><\/div>\r\n<div class=\"docs-card\" data-search=\"copy trading follower master allocation connector execution\"><div class=\"docs-icon\">03<\/div><h3>Copy Trading<\/h3><p>Architecture, allocation, execution, reconciliation and follower account concepts.<\/p><div class=\"docs-count\">12 guides<\/div><\/div>\r\n<div class=\"docs-card\" data-search=\"market products marketplace product detail\"><div class=\"docs-icon\">04<\/div><h3>Market<\/h3><p>Browse products and understand product listings, versions and marketplace information.<\/p><div class=\"docs-count\">7 guides<\/div><\/div>\r\n<div class=\"docs-card\" data-search=\"ranking performance return drawdown profit factor win rate\"><div class=\"docs-icon\">05<\/div><h3>Ranking & Performance<\/h3><p>Definitions and methodology for performance metrics displayed by MQLPro.<\/p><div class=\"docs-count\">8 guides<\/div><\/div>\r\n<div class=\"docs-card\" data-search=\"risk management exposure drawdown allocation\"><div class=\"docs-icon\">06<\/div><h3>Risk Management<\/h3><p>Understand exposure, allocation limits, drawdown and account-level controls.<\/p><div class=\"docs-count\">10 guides<\/div><\/div>\r\n<div class=\"docs-card\" data-search=\"broker connector mt5 api execution mapping\"><div class=\"docs-icon\">07<\/div><h3>Broker Connectors<\/h3><p>Technical concepts for connecting follower accounts and handling broker differences.<\/p><div class=\"docs-count\">11 guides<\/div><\/div>\r\n<div class=\"docs-card\" data-search=\"api webhooks integration developer\"><div class=\"docs-icon\">08<\/div><h3>API & Webhooks<\/h3><p>Integration concepts for future external applications and event-driven workflows.<\/p><div class=\"docs-count\">5 guides<\/div><\/div>\r\n<\/div>\r\n\r\n<div class=\"notice\"><b>Documentation status.<\/b> This prototype defines the public information architecture. Live broker APIs, authentication, webhooks and production connector behavior are not connected yet.<\/div>\r\n<\/div>\r\n\r\n<\/div>\r\n<\/section>\r\n\r\n<!-- ================= DOCUMENTATION DETAIL ================= -->\r\n<section id=\"docsDetailPage\" class=\"hidden\">\r\n<div class=\"docs-detail\">\r\n<div class=\"docs-breadcrumb\"><a class=\"back\" onclick=\"showPage('docs')\">\u2190 Documentation<\/a><\/div>\r\n<div class=\"docs-detail-layout\">\r\n<aside class=\"docs-detail-side\">\r\n<h3>Documentation<\/h3>\r\n<a onclick=\"openDoc('Getting Started')\">Getting Started<\/a>\r\n<a onclick=\"openDoc('Signals')\">Signals<\/a>\r\n<a onclick=\"openDoc('Copy Trading')\">Copy Trading<\/a>\r\n<a onclick=\"openDoc('Market')\">Market<\/a>\r\n<a onclick=\"openDoc('Ranking & Performance')\">Ranking & Performance<\/a>\r\n<a onclick=\"openDoc('Risk Management')\">Risk Management<\/a>\r\n<a onclick=\"openDoc('Broker Connectors')\">Broker Connectors<\/a>\r\n<a onclick=\"openDoc('API & Webhooks')\">API & Webhooks<\/a>\r\n<a onclick=\"openDoc('FAQ')\">FAQ<\/a>\r\n<\/aside>\r\n<article class=\"docs-article\">\r\n<h1 id=\"docsDetailTitle\">Getting Started<\/h1>\r\n<div class=\"updated\">MQLPro Documentation \u00b7 Updated 16 September 2026<\/div>\r\n\r\n<h2>Overview<\/h2>\r\n<p id=\"docsIntro\">MQLPro is structured around signal discovery, performance research, marketplace products and copy-trading infrastructure. This documentation explains how those components are intended to work.<\/p>\r\n\r\n<h2>Core workflow<\/h2>\r\n<ol>\r\n<li>Browse the <b>Signals<\/b> marketplace and select a signal to inspect.<\/li>\r\n<li>Review historical performance, drawdown and other available metrics.<\/li>\r\n<li>Check the signal's risk information and subscription\/copy settings.<\/li>\r\n<li>Configure the follower allocation and applicable risk limits.<\/li>\r\n<li>Connect the follower account through a supported connector.<\/li>\r\n<li>Monitor execution and reconciliation after copying begins.<\/li>\r\n<\/ol>\r\n\r\n<h2>Important concepts<\/h2>\r\n<h3>Signal<\/h3><p>A signal represents a monitored trading strategy or account whose historical and current performance can be presented to users.<\/p>\r\n<h3>Follower<\/h3><p>A follower is an account configured to replicate a signal according to its allocation and risk settings.<\/p>\r\n<h3>Connector<\/h3><p>A connector is the integration layer responsible for translating platform instructions into broker-specific execution operations.<\/p>\r\n\r\n<div class=\"docs-note\"><b>Prototype scope:<\/b> examples on this page describe MQLPro's planned information architecture. Actual broker compatibility and execution behavior depend on the eventual connector implementation.<\/div>\r\n\r\n<h2>Example event flow<\/h2>\r\n<div class=\"docs-code\">Signal Event \u2192 Normalize \u2192 Risk Check \u2192 Connector \u2192 Broker \u2192 Execution Report \u2192 Reconciliation<\/div>\r\n\r\n<h2>Next steps<\/h2>\r\n<p>Use the documentation sidebar to explore the relevant module. For implementation questions, the Community section can provide a discussion layer while production integrations are developed.<\/p>\r\n<\/article>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= LOGIN ================= -->\r\n<section id=\"loginPage\" class=\"hidden\">\r\n<div class=\"auth-wrap\">\r\n<a class=\"back\" onclick=\"goAuthBack()\">\u2190 Back<\/a>\r\n<div class=\"auth-card\">\r\n<h1>Login<\/h1><div class=\"auth-sub\">Sign in to manage your MQLPro account, signals and copy-trading settings.<\/div>\r\n<div class=\"auth-field\"><label>Email<\/label><input id=\"loginEmail\" type=\"email\" placeholder=\"you@example.com\"><\/div>\r\n<div class=\"auth-field\"><label>Password<\/label><input type=\"password\" placeholder=\"Your password\"><\/div>\r\n<div class=\"auth-row\"><label class=\"auth-check\" style=\"margin:0\"><input type=\"checkbox\"> Remember me<\/label><span class=\"auth-link\">Forgot password?<\/span><\/div>\r\n<button class=\"btn blue\" style=\"width:100%;margin-top:16px\" onclick=\"loginPrototype()\">Login<\/button>\r\n<div class=\"auth-divider\">OR<\/div>\r\n<div style=\"text-align:center;font-size:12px;color:#666\">Don't have an account? <span class=\"auth-link\" onclick=\"showPage('register')\">Register<\/span><\/div>\r\n<div class=\"auth-note\"><b>Prototype.<\/b> Authentication is not connected to WordPress or a production user database yet.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n<!-- ================= REGISTER ================= -->\r\n<section id=\"registerPage\" class=\"hidden\">\r\n<div class=\"auth-wrap\">\r\n<a class=\"back\" onclick=\"goAuthBack()\">\u2190 Back<\/a>\r\n<div class=\"auth-card\">\r\n<h1>Create an account<\/h1><div class=\"auth-sub\">Create your MQLPro account to follow signals, manage marketplace purchases and configure copy trading.<\/div>\r\n<div class=\"auth-field\"><label>Full name<\/label><input id=\"regName\" placeholder=\"Your name\"><\/div>\r\n<div class=\"auth-field\"><label>Email<\/label><input id=\"regEmail\" type=\"email\" placeholder=\"you@example.com\"><\/div>\r\n<div class=\"auth-field\"><label>Password<\/label><input type=\"password\" placeholder=\"Create a password\"><\/div>\r\n<div class=\"auth-field\"><label>Confirm password<\/label><input type=\"password\" placeholder=\"Repeat your password\"><\/div>\r\n<label class=\"auth-check\"><input type=\"checkbox\"> I agree to the MQLPro Terms and Privacy Policy.<\/label>\r\n<button class=\"btn blue\" style=\"width:100%;margin-top:4px\" onclick=\"registerPrototype()\">Create Account<\/button>\r\n<div style=\"text-align:center;font-size:12px;color:#666;margin-top:16px\">Already have an account? <span class=\"auth-link\" onclick=\"showPage('login')\">Login<\/span><\/div>\r\n<div class=\"auth-note\"><b>Prototype.<\/b> Account creation currently demonstrates the UI flow only. No credentials are stored.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n<!-- ================= ACCOUNT ================= -->\r\n<section id=\"accountPage\" class=\"hidden\">\r\n<div class=\"breadcrumb\">Home \/ Account<\/div>\r\n<div class=\"title-row\"><div><h1 class=\"title\">My Account<\/h1><div class=\"subtitle\">Manage your profile, signals, purchases and copy-trading configuration.<\/div><\/div><button class=\"btn logout-btn\" onclick=\"logoutPrototype()\">Logout<\/button><\/div>\r\n<div class=\"account-layout\">\r\n<aside class=\"account-sidebar\">\r\n<div class=\"side-title\">Account<\/div>\r\n<a class=\"account-item active\">Overview<\/a>\r\n<a class=\"account-item\">Profile<\/a>\r\n<a class=\"account-item\">My Signals<\/a>\r\n<a class=\"account-item\">Subscriptions<\/a>\r\n<a class=\"account-item\">Purchases<\/a>\r\n<a class=\"account-item\">Copy Trading<\/a>\r\n<a class=\"account-item\">Security<\/a>\r\n<\/aside>\r\n<div class=\"account-main\">\r\n<div class=\"account-card\"><div class=\"account-profile\"><div class=\"account-avatar\" id=\"accountAvatar\">IH<\/div><div><div class=\"account-name\" id=\"accountName\">MQLPro User<\/div><div class=\"account-email\" id=\"accountEmail\">user@example.com<\/div><\/div><\/div><\/div>\r\n<div class=\"account-stats\"><div class=\"account-stat\"><span>Active Signals<\/span><b>2<\/b><\/div><div class=\"account-stat\"><span>Subscriptions<\/span><b>3<\/b><\/div><div class=\"account-stat\"><span>Market Purchases<\/span><b>4<\/b><\/div><div class=\"account-stat\"><span>Copy Accounts<\/span><b>1<\/b><\/div><\/div>\r\n<div class=\"account-card\"><h2>Recent Activity<\/h2><table class=\"account-table\"><thead><tr><th>Activity<\/th><th>Status<\/th><th>Date<\/th><\/tr><\/thead><tbody><tr><td>Subscribed to Alpha Trend<\/td><td><span class=\"badge\">Active<\/span><\/td><td>16 Sep 2026<\/td><\/tr><tr><td>Added follower account<\/td><td><span class=\"badge\">Connected<\/span><\/td><td>15 Sep 2026<\/td><\/tr><tr><td>Purchased Quantum Titan MT5<\/td><td><span class=\"badge\">Completed<\/span><\/td><td>12 Sep 2026<\/td><\/tr><\/tbody><\/table><\/div>\r\n<div class=\"notice\"><b>Account layer.<\/b> This page is the front-end foundation for the future MQLPro user system. Real authentication, subscriptions, purchases and broker connections will be wired to their respective back-end services later.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= DASHBOARD ================= -->\r\n<section id=\"dashboardPage\" class=\"hidden\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard<\/div>\r\n<div class=\"title-row\"><div><h1 class=\"title\">Dashboard<\/h1><div class=\"subtitle\">Your MQLPro signals, subscriptions and copy-trading activity.<\/div><\/div><button class=\"btn logout-btn\" onclick=\"logoutPrototype()\">Logout<\/button><\/div>\r\n\r\n<div class=\"dashboard-layout\">\r\n<aside class=\"dashboard-sidebar\">\r\n<div class=\"side-title\">Dashboard<\/div>\r\n<a class=\"dashboard-item active\" data-dash-tab=\"overview\" onclick=\"dashboardTab('overview')\">Overview<\/a>\r\n<a class=\"dashboard-item\" data-dash-tab=\"signals\" onclick=\"dashboardTab('signals')\">Browse Signals<\/a>\r\n<a class=\"dashboard-item\" data-dash-tab=\"subscriptions\" onclick=\"showOrders('subscriptions')\">My Subscriptions<\/a>\r\n<a class=\"dashboard-item\" data-dash-release=\"release\" onclick=\"showPage('release')\">Release & Deployment Control<\/a>\r\n<a class=\"dashboard-item\" data-dash-data-governance=\"dataGovernance\" onclick=\"showPage('dataGovernance')\">Data Governance & Retention<\/a>\r\n<a class=\"dashboard-item\" data-dash-governance=\"governance\" onclick=\"showPage('governance')\">Audit, Compliance & Governance<\/a>\r\n<a class=\"dashboard-item\" data-dash-monitoring=\"monitoring\" onclick=\"showPage('monitoring')\">Monitoring, Alerting & SLO<\/a>\r\n<a class=\"dashboard-item\" data-dash-incident-management=\"incidentManagement\" onclick=\"showPage('incidentManagement')\">Incident Management<\/a>\r\n<a class=\"dashboard-item\" data-dash-disaster-recovery=\"disasterRecovery\" onclick=\"showPage('disasterRecovery')\">Disaster Recovery & Business Continuity<\/a>\r\n<a class=\"dashboard-item\" data-dash-infrastructure=\"infrastructure\" onclick=\"showPage('infrastructure')\">Infrastructure & Service Health<\/a>\r\n<a class=\"dashboard-item\" data-dash-production=\"production\" onclick=\"showPage('production')\">Production Readiness & Deployment<\/a>\r\n<a class=\"dashboard-item\" data-dash-security=\"security\" onclick=\"showPage('security')\">Security & Access Control<\/a>\r\n<a class=\"dashboard-item\" data-dash-observability=\"observability\" onclick=\"showPage('observability')\">Observability & Audit<\/a>\r\n<a class=\"dashboard-item\" data-dash-reconciliation=\"accountReconciliation\" onclick=\"showPage('accountReconciliation')\">Account Sync & Reconciliation<\/a>\r\n<a class=\"dashboard-item\" data-dash-brokerconnector=\"brokerConnector\" onclick=\"showPage('brokerConnector')\">Broker Connector<\/a>\r\n<a class=\"dashboard-item\" data-dash-orchestrator=\"copyOrchestrator\" onclick=\"showPage('copyOrchestrator')\">Copy Orchestrator<\/a>\r\n<a class=\"dashboard-item\" data-dash-intake=\"signalIntake\" onclick=\"showPage('signalIntake')\">Signal Intake<\/a>\r\n<a class=\"dashboard-item\" data-dash-billing=\"billing\" onclick=\"showPage('billing')\">Subscription & Billing<\/a>\r\n<a class=\"dashboard-item\" data-dash-policy=\"copyPolicies\" onclick=\"showPage('copyPolicies')\">Copy Policies<\/a>\r\n<a class=\"dashboard-item\" data-dash-map=\"symbolMapping\" onclick=\"showPage('symbolMapping')\">Symbol Mapping<\/a>\r\n<a class=\"dashboard-item\" data-dash-sync=\"accountSync\" onclick=\"showPage('accountSync')\">Account Sync<\/a>\r\n<a class=\"dashboard-item\" data-dash-exec=\"executionQueue\" onclick=\"showPage('executionQueue')\">Execution Queue<\/a>\r\n<a class=\"dashboard-item\" data-dash-risk=\"riskEngine\" onclick=\"showPage('riskEngine')\">Risk & Allocation<\/a>\r\n<a class=\"dashboard-item\" data-dash-engine=\"signalEngine\" onclick=\"showPage('signalEngine')\">Signal Engine<\/a>\r\n<a class=\"dashboard-item\" data-dash-tab=\"copy\" onclick=\"showPage('copyAccounts')\">Copy Accounts<\/a>\r\n<a class=\"dashboard-item\" data-dash-tab=\"purchases\" onclick=\"showOrders('purchases')\">My Purchases<\/a>\r\n<a class=\"dashboard-item\" data-dash-tab=\"account\" onclick=\"dashboardTab('account')\">Account Settings<\/a>\r\n<\/aside>\r\n\r\n<div class=\"dashboard-main\">\r\n\r\n<div id=\"dashOverview\" class=\"dashboard-section active\">\r\n<div class=\"dash-welcome\"><h2>Welcome back, <span id=\"dashUserName\">MQLPro User<\/span><\/h2><p>Monitor your subscriptions and connected copy-trading accounts from one place.<\/p><\/div>\r\n<div class=\"dash-grid\">\r\n<div class=\"dash-stat\"><span>Active Signals<\/span><b>2<\/b><\/div>\r\n<div class=\"dash-stat\"><span>Monthly Subscriptions<\/span><b>3<\/b><\/div>\r\n<div class=\"dash-stat\"><span>Copy Accounts<\/span><b>1<\/b><\/div>\r\n<div class=\"dash-stat\"><span>Market Purchases<\/span><b>4<\/b><\/div>\r\n<\/div>\r\n<div class=\"dash-card\">\r\n<div class=\"dash-card-head\"><h3>My Signal Subscriptions<\/h3><button class=\"btn\" onclick=\"showOrders('subscriptions')\">View All<\/button><\/div>\r\n<div class=\"dash-card-body\">\r\n<div class=\"sub-row\"><div><div class=\"sub-name\">Alpha Trend<\/div><div class=\"sub-meta\">Forex \u00b7 12 Month subscription<\/div><\/div><div class=\"sub-value\">+18.42%<\/div><div class=\"sub-value\">DD 5.21%<\/div><div class=\"status-active\">Active<\/div><\/div>\r\n<div class=\"sub-row\"><div><div class=\"sub-name\">Gold Momentum<\/div><div class=\"sub-meta\">XAUUSD \u00b7 6 Month subscription<\/div><\/div><div class=\"sub-value\">+12.61%<\/div><div class=\"sub-value\">DD 4.81%<\/div><div class=\"status-active\">Active<\/div><\/div>\r\n<div class=\"sub-row\"><div><div class=\"sub-name\">Index Pulse<\/div><div class=\"sub-meta\">Indices \u00b7 3 Month subscription<\/div><\/div><div class=\"sub-value\">+8.77%<\/div><div class=\"sub-value\">DD 3.94%<\/div><div class=\"status-paused\">Paused<\/div><\/div>\r\n<\/div><\/div>\r\n<div class=\"dash-card\">\r\n<div class=\"dash-card-head\"><h3>Copy Trading Accounts<\/h3><button class=\"btn\" onclick=\"showPage('copyAccounts')\">Manage<\/button><\/div>\r\n<div class=\"dash-card-body\">\r\n<table class=\"dash-table\"><thead><tr><th>Account<\/th><th>Broker<\/th><th>Signal<\/th><th>Status<\/th><th>Last Sync<\/th><\/tr><\/thead><tbody><tr><td>Primary Follower<\/td><td>Demo Broker<\/td><td>Alpha Trend<\/td><td class=\"status-active\">Connected<\/td><td>2 min ago<\/td><\/tr><\/tbody><\/table>\r\n<\/div><\/div>\r\n<div class=\"dash-card\"><div class=\"dash-card-head\"><h3>Quick Actions<\/h3><\/div><div class=\"dash-card-body\" style=\"padding:13px 15px\"><div class=\"quick-actions\"><button class=\"btn\" onclick=\"showPage('signals')\">Explore Signals<\/button><button class=\"btn\" onclick=\"showPage('ranking')\">View Ranking<\/button><button class=\"btn\" onclick=\"showPage('market')\">Visit Market<\/button><button class=\"btn\" onclick=\"showPage('docs')\">Read Documentation<\/button><button class=\"btn\" onclick=\"showPage('community')\">Community<\/button><\/div><\/div><\/div>\r\n<div class=\"notice\"><b>Dashboard status.<\/b> Subscription, payment, broker connectivity and execution values shown here are prototype data.<\/div>\r\n<\/div>\r\n\r\n<div id=\"dashSignals\" class=\"dashboard-section\">\r\n<div class=\"dash-card\"><div class=\"dash-card-head\"><h3>Browse Signals<\/h3><button class=\"btn blue\" onclick=\"showPage('signals')\">Open Signals Marketplace<\/button><\/div><div class=\"dash-card-body\" style=\"padding:15px\"><p style=\"font-size:12px;color:#666;line-height:1.6\">Discover trading signals, compare performance metrics and open Signal Detail pages before subscribing.<\/p><\/div><\/div>\r\n<\/div>\r\n\r\n<div id=\"dashSubscriptions\" class=\"dashboard-section\">\r\n<div class=\"dash-card\"><div class=\"dash-card-head\"><h3>My Signal Subscriptions<\/h3><button class=\"btn\" onclick=\"showPage('signals')\">Browse More<\/button><\/div><div class=\"dash-card-body\">\r\n<div class=\"sub-row\"><div><div class=\"sub-name\">Alpha Trend<\/div><div class=\"sub-meta\">Forex \u00b7 12 Month subscription<\/div><\/div><div class=\"sub-value\">+18.42%<\/div><div class=\"sub-value\">DD 5.21%<\/div><div class=\"status-active\">Active<\/div><\/div>\r\n<div class=\"sub-row\"><div><div class=\"sub-name\">Gold Momentum<\/div><div class=\"sub-meta\">XAUUSD \u00b7 6 Month subscription<\/div><\/div><div class=\"sub-value\">+12.61%<\/div><div class=\"sub-value\">DD 4.81%<\/div><div class=\"status-active\">Active<\/div><\/div>\r\n<div class=\"sub-row\"><div><div class=\"sub-name\">Index Pulse<\/div><div class=\"sub-meta\">Indices \u00b7 3 Month subscription<\/div><\/div><div class=\"sub-value\">+8.77%<\/div><div class=\"sub-value\">DD 3.94%<\/div><div class=\"status-paused\">Paused<\/div><\/div>\r\n<\/div><\/div>\r\n<\/div>\r\n\r\n<div id=\"dashCopy\" class=\"dashboard-section\">\r\n<div class=\"dash-card\"><div class=\"dash-card-head\"><h3>Copy Trading Accounts<\/h3><button class=\"btn blue\" onclick=\"alert('Connector setup will be implemented in a later stage.')\">Add Account<\/button><\/div><div class=\"dash-card-body\">\r\n<table class=\"dash-table\"><thead><tr><th>Account<\/th><th>Broker<\/th><th>Signal<\/th><th>Status<\/th><th>Last Sync<\/th><\/tr><\/thead><tbody><tr><td>Primary Follower<\/td><td>Demo Broker<\/td><td>Alpha Trend<\/td><td class=\"status-active\">Connected<\/td><td>2 min ago<\/td><\/tr><\/tbody><\/table>\r\n<\/div><\/div>\r\n<div class=\"notice\"><b>Connector status.<\/b> The connected account is prototype data. Real broker authentication and execution will be connected later.<\/div>\r\n<\/div>\r\n\r\n<div id=\"dashPurchases\" class=\"dashboard-section\">\r\n<div class=\"dash-card\"><div class=\"dash-card-head\"><h3>My Purchases<\/h3><button class=\"btn\" onclick=\"showPage('market')\">Visit Market<\/button><\/div><div class=\"dash-card-body\">\r\n<table class=\"dash-table\"><thead><tr><th>Product<\/th><th>Type<\/th><th>Version<\/th><th>Status<\/th><th>Date<\/th><\/tr><\/thead>\r\n<tbody><tr><td>Quantum Titan MT5<\/td><td>Trading Tool<\/td><td>v2.4<\/td><td>Completed<\/td><td>12 Sep 2026<\/td><\/tr><tr><td>Risk Manager Pro<\/td><td>Utility<\/td><td>v1.8<\/td><td>Completed<\/td><td>08 Sep 2026<\/td><\/tr><tr><td>Signal Bridge<\/td><td>Connector<\/td><td>v1.2<\/td><td>Completed<\/td><td>02 Sep 2026<\/td><\/tr><\/tbody><\/table>\r\n<\/div><\/div>\r\n<\/div>\r\n\r\n<div id=\"dashAccount\" class=\"dashboard-section\">\r\n<div class=\"dash-card\"><div class=\"dash-card-head\"><h3>Account Settings<\/h3><button class=\"btn\" onclick=\"showPage('account')\">Open Account<\/button><\/div><div class=\"dash-card-body\" style=\"padding:15px\"><div class=\"account-profile\"><div class=\"account-avatar\" id=\"dashAvatar\">IH<\/div><div><div class=\"account-name\" id=\"dashAccountName\">MQLPro User<\/div><div class=\"account-email\" id=\"dashAccountEmail\">user@example.com<\/div><\/div><\/div><\/div><\/div>\r\n<\/div>\r\n\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= SIGNAL CHECKOUT ================= -->\r\n<section id=\"checkoutPage\" class=\"hidden\">\r\n<div class=\"checkout-wrap\">\r\n<div class=\"breadcrumb\"><a class=\"back\" onclick=\"goBackFromCheckout()\">\u2190 Signal Detail<\/a> \/ Subscribe<\/div>\r\n<div class=\"title-row\"><div><h1 class=\"title\">Subscribe to Signal<\/h1><div class=\"subtitle\">Choose a subscription plan and review your order before continuing.<\/div><\/div><\/div>\r\n\r\n<div class=\"checkout-layout\">\r\n<div>\r\n<div class=\"checkout-card\">\r\n<div class=\"checkout-signal\"><div><div class=\"checkout-signal-name\" id=\"checkoutSignalName\">Alpha Trend<\/div><div class=\"checkout-signal-meta\" id=\"checkoutSignalMeta\">Forex \u00b7 MQLPro Signal<\/div><\/div><div class=\"checkout-price\" id=\"checkoutBasePrice\">$49 <small>\/ month<\/small><\/div><\/div>\r\n<\/div>\r\n\r\n<div class=\"checkout-card\">\r\n<h2>1. Choose a plan<\/h2>\r\n<div class=\"plan-grid\">\r\n<div class=\"plan selected\" data-plan=\"monthly\" data-price=\"49\" onclick=\"selectPlan(this)\"><div class=\"plan-name\">Monthly<\/div><div class=\"plan-price\">$49<\/div><div class=\"plan-note\">Billed every month. Cancel according to the applicable subscription terms.<\/div><\/div>\r\n<div class=\"plan\" data-plan=\"quarterly\" data-price=\"129\" onclick=\"selectPlan(this)\"><div class=\"plan-name\">3 Months<\/div><div class=\"plan-price\">$129<\/div><div class=\"plan-note\">Three-month subscription period.<\/div><\/div>\r\n<div class=\"plan\" data-plan=\"annual\" data-price=\"399\" onclick=\"selectPlan(this)\"><div class=\"plan-name\">12 Months<\/div><div class=\"plan-price\">$399<\/div><div class=\"plan-note\">Annual subscription period.<\/div><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div class=\"checkout-card\">\r\n<h2>2. Account<\/h2>\r\n<div class=\"checkout-field\"><label>Email<\/label><input id=\"checkoutEmail\" type=\"email\" placeholder=\"you@example.com\"><\/div>\r\n<div class=\"checkout-field\"><label>Account \/ Profile name<\/label><input id=\"checkoutProfile\" placeholder=\"Your MQLPro profile\"><\/div>\r\n<\/div>\r\n\r\n<div class=\"checkout-card\">\r\n<h2>3. Payment method<\/h2>\r\n<div class=\"checkout-field\"><label>Payment method<\/label><select id=\"checkoutPayment\"><option>Credit \/ Debit Card<\/option><option>Bank Transfer<\/option><option>Available balance<\/option><\/select><\/div>\r\n<div class=\"checkout-two\"><div class=\"checkout-field\"><label>Billing country<\/label><select><option>Indonesia<\/option><option>Singapore<\/option><option>Malaysia<\/option><option>United States<\/option><\/select><\/div><div class=\"checkout-field\"><label>Currency<\/label><select><option>USD<\/option><option>IDR<\/option><\/select><\/div><\/div>\r\n<label class=\"checkout-check\"><input type=\"checkbox\" id=\"checkoutTerms\"> I understand that trading involves risk and agree to the applicable MQLPro subscription terms.<\/label>\r\n<button class=\"btn blue\" style=\"width:100%;height:42px\" onclick=\"confirmSubscription()\">Continue to Payment<\/button>\r\n<div class=\"auth-note\"><b>Prototype.<\/b> No real payment is processed. The next stage will connect this flow to the selected payment provider and subscription service.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<aside class=\"checkout-summary\">\r\n<h3>Order Summary<\/h3>\r\n<div class=\"summary-line\"><span>Signal<\/span><b id=\"summarySignal\">Alpha Trend<\/b><\/div>\r\n<div class=\"summary-line\"><span>Plan<\/span><b id=\"summaryPlan\">Monthly<\/b><\/div>\r\n<div class=\"summary-line\"><span>Subscription<\/span><b id=\"summaryPrice\">$49<\/b><\/div>\r\n<div class=\"summary-total\"><span>Total<\/span><b id=\"summaryTotal\">$49<\/b><\/div>\r\n<div class=\"checkout-security\">Your subscription status and payment confirmation will be handled by the MQLPro account and billing system after production integration.<\/div>\r\n<\/aside>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n<!-- ================= SUBSCRIPTION CONFIRMATION ================= -->\r\n<section id=\"subscriptionConfirmPage\" class=\"hidden\">\r\n<div class=\"auth-wrap\">\r\n<div class=\"auth-card\">\r\n<div style=\"font-size:12px;color:#26733b;margin-bottom:8px\">\u25cf Order created<\/div>\r\n<h1>Subscription Review<\/h1>\r\n<div class=\"auth-sub\">Your subscription request has been prepared. Review the details below.<\/div>\r\n<div class=\"summary-line\"><span>Signal<\/span><b id=\"confirmSignal\">Alpha Trend<\/b><\/div>\r\n<div class=\"summary-line\"><span>Plan<\/span><b id=\"confirmPlan\">Monthly<\/b><\/div>\r\n<div class=\"summary-line\"><span>Amount<\/span><b id=\"confirmPrice\">$49<\/b><\/div>\r\n<button class=\"btn blue\" style=\"width:100%;margin-top:16px\" onclick=\"showPage('dashboard')\">Go to Dashboard<\/button>\r\n<button class=\"btn\" style=\"width:100%;margin-top:8px\" onclick=\"showPage('signals')\">Back to Signals<\/button>\r\n<div class=\"auth-note\"><b>Prototype.<\/b> Payment confirmation is simulated. No funds have been charged.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= MARKET CHECKOUT ================= -->\r\n<section id=\"marketCheckoutPage\" class=\"hidden\">\r\n<div class=\"market-checkout-wrap\">\r\n<div class=\"breadcrumb\"><a class=\"back\" onclick=\"goBackFromMarketCheckout()\">\u2190 Product Detail<\/a> \/ Purchase<\/div>\r\n<div class=\"title-row\"><div><h1 class=\"title\">Purchase Product<\/h1><div class=\"subtitle\">Review the product and complete the purchase setup.<\/div><\/div><\/div>\r\n<div class=\"market-checkout-layout\">\r\n<div>\r\n<div class=\"product-checkout-card\">\r\n<div class=\"product-preview\"><div class=\"product-thumb\" id=\"purchaseThumb\">MQLPro<br>MARKET<\/div><div><div class=\"product-checkout-name\" id=\"purchaseProductName\">Quantum Titan MT5<\/div><div class=\"product-checkout-meta\" id=\"purchaseProductMeta\">Trading Tool \u00b7 MT5 \u00b7 Version 2.4<\/div><\/div><\/div>\r\n<\/div>\r\n<div class=\"product-checkout-card\">\r\n<h2>1. License<\/h2>\r\n<div class=\"purchase-type-grid\">\r\n<div class=\"purchase-type selected\" data-type=\"personal\" onclick=\"selectPurchaseType(this)\"><b>Personal License<\/b><div>For use on your own supported trading account.<\/div><\/div>\r\n<div class=\"purchase-type\" data-type=\"commercial\" onclick=\"selectPurchaseType(this)\"><b>Commercial License<\/b><div>For eligible commercial or multi-account usage.<\/div><\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"product-checkout-card\">\r\n<h2>2. Account<\/h2>\r\n<div class=\"checkout-field\"><label>Email<\/label><input id=\"purchaseEmail\" type=\"email\" placeholder=\"you@example.com\"><\/div>\r\n<div class=\"checkout-field\"><label>Profile \/ Company name<\/label><input id=\"purchaseProfile\" placeholder=\"Your MQLPro profile\"><\/div>\r\n<\/div>\r\n<div class=\"product-checkout-card\">\r\n<h2>3. Payment<\/h2>\r\n<div class=\"checkout-field\"><label>Payment method<\/label><select id=\"purchasePayment\"><option>Credit \/ Debit Card<\/option><option>Bank Transfer<\/option><option>Available balance<\/option><\/select><\/div>\r\n<label class=\"checkout-check\"><input type=\"checkbox\" id=\"purchaseTerms\"> I agree to the applicable product license and purchase terms.<\/label>\r\n<button class=\"btn blue\" style=\"width:100%;height:42px\" onclick=\"confirmMarketPurchase()\">Continue to Payment<\/button>\r\n<div class=\"auth-note\"><b>Prototype.<\/b> No real payment is processed. Product delivery and licensing will be connected in a later integration stage.<\/div>\r\n<\/div>\r\n<\/div>\r\n<aside class=\"market-summary\">\r\n<h3>Order Summary<\/h3>\r\n<div class=\"market-summary-line\"><span>Product<\/span><b id=\"purchaseSummaryProduct\">Quantum Titan MT5<\/b><\/div>\r\n<div class=\"market-summary-line\"><span>License<\/span><b id=\"purchaseSummaryType\">Personal<\/b><\/div>\r\n<div class=\"market-summary-line\"><span>Price<\/span><b id=\"purchaseSummaryPrice\">$149<\/b><\/div>\r\n<div class=\"market-summary-total\"><span>Total<\/span><b id=\"purchaseSummaryTotal\">$149<\/b><\/div>\r\n<\/aside>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n<!-- ================= MARKET PURCHASE CONFIRMATION ================= -->\r\n<section id=\"marketPurchaseConfirmPage\" class=\"hidden\">\r\n<div class=\"auth-wrap\"><div class=\"auth-card\">\r\n<div style=\"font-size:12px;color:#26733b;margin-bottom:8px\">\u25cf Order created<\/div>\r\n<h1>Purchase Review<\/h1><div class=\"auth-sub\">Your market purchase request has been prepared. Review the details below.<\/div>\r\n<div class=\"summary-line\"><span>Product<\/span><b id=\"purchaseConfirmProduct\">Quantum Titan MT5<\/b><\/div>\r\n<div class=\"summary-line\"><span>License<\/span><b id=\"purchaseConfirmType\">Personal<\/b><\/div>\r\n<div class=\"summary-line\"><span>Amount<\/span><b id=\"purchaseConfirmPrice\">$149<\/b><\/div>\r\n<button class=\"btn blue\" style=\"width:100%;margin-top:16px\" onclick=\"showPage('dashboard')\">Go to Dashboard<\/button>\r\n<button class=\"btn\" style=\"width:100%;margin-top:8px\" onclick=\"showPage('market')\">Back to Market<\/button>\r\n<div class=\"auth-note\"><b>Prototype.<\/b> Payment is simulated. No funds have been charged and no product has been delivered.<\/div>\r\n<\/div><\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= ORDERS & SUBSCRIPTIONS ================= -->\r\n<section id=\"ordersPage\" class=\"hidden\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Orders<\/div>\r\n<div class=\"title-row\"><div><h1 class=\"title\">Orders & Subscriptions<\/h1><div class=\"subtitle\">Manage your MQLPro signal subscriptions and Market purchases.<\/div><\/div><button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button><\/div>\r\n\r\n<div class=\"manage-tabs\">\r\n<div class=\"manage-tab active\" data-order-tab=\"subscriptions\" onclick=\"ordersTab('subscriptions')\">Signal Subscriptions<\/div>\r\n<div class=\"manage-tab\" data-order-tab=\"purchases\" onclick=\"ordersTab('purchases')\">Market Purchases<\/div>\r\n<\/div>\r\n\r\n<div id=\"ordersSubscriptions\" class=\"orders-section\">\r\n<div class=\"manage-toolbar\"><span style=\"font-size:12px;color:#666\">3 subscriptions<\/span><button class=\"btn blue\" onclick=\"showPage('signals')\">Find Signals<\/button><\/div>\r\n<div class=\"order-card\"><div class=\"order-head\"><div><div class=\"order-name\">Alpha Trend<\/div><div class=\"order-meta\">Signal \u00b7 Forex \u00b7 12 Month plan<\/div><\/div><div><div class=\"order-amount\">$399<\/div><span class=\"manage-status active\">Active<\/span><\/div><\/div><div class=\"order-detail\"><div><span>Started<\/span><b>16 Sep 2026<\/b><\/div><div><span>Renewal<\/span><b>16 Sep 2027<\/b><\/div><div><span>Performance<\/span><b>+18.42%<\/b><\/div><div><span>Max DD<\/span><b>5.21%<\/b><\/div><\/div><div class=\"detail-actions\"><button class=\"btn\" onclick=\"showPage('dashboard')\">Manage Copy<\/button><button class=\"btn\">View Signal<\/button><button class=\"btn\">Billing<\/button><\/div><\/div>\r\n<div class=\"order-card\"><div class=\"order-head\"><div><div class=\"order-name\">Gold Momentum<\/div><div class=\"order-meta\">Signal \u00b7 XAUUSD \u00b7 6 Month plan<\/div><\/div><div><div class=\"order-amount\">$249<\/div><span class=\"manage-status active\">Active<\/span><\/div><\/div><div class=\"order-detail\"><div><span>Started<\/span><b>01 Sep 2026<\/b><\/div><div><span>Renewal<\/span><b>01 Mar 2027<\/b><\/div><div><span>Performance<\/span><b>+12.61%<\/b><\/div><div><span>Max DD<\/span><b>4.81%<\/b><\/div><\/div><div class=\"detail-actions\"><button class=\"btn\">Manage Copy<\/button><button class=\"btn\">View Signal<\/button><button class=\"btn\">Billing<\/button><\/div><\/div>\r\n<div class=\"order-card\"><div class=\"order-head\"><div><div class=\"order-name\">Index Pulse<\/div><div class=\"order-meta\">Signal \u00b7 Indices \u00b7 3 Month plan<\/div><\/div><div><div class=\"order-amount\">$129<\/div><span class=\"manage-status pending\">Paused<\/span><\/div><\/div><div class=\"order-detail\"><div><span>Started<\/span><b>10 Aug 2026<\/b><\/div><div><span>Renewal<\/span><b>10 Nov 2026<\/b><\/div><div><span>Performance<\/span><b>+8.77%<\/b><\/div><div><span>Max DD<\/span><b>3.94%<\/b><\/div><\/div><div class=\"detail-actions\"><button class=\"btn\">Resume<\/button><button class=\"btn\">View Signal<\/button><button class=\"btn\">Billing<\/button><\/div><\/div>\r\n<\/div>\r\n\r\n<div id=\"ordersPurchases\" class=\"orders-section\" style=\"display:none\">\r\n<div class=\"manage-toolbar\"><span style=\"font-size:12px;color:#666\">4 purchases<\/span><button class=\"btn blue\" onclick=\"showPage('market')\">Browse Market<\/button><\/div>\r\n<div class=\"order-card\"><div class=\"order-head\"><div><div class=\"order-name\">Quantum Titan MT5<\/div><div class=\"order-meta\">Trading Tool \u00b7 MT5 \u00b7 Personal License<\/div><\/div><div><div class=\"order-amount\">$149<\/div><span class=\"manage-status completed\">Completed<\/span><\/div><\/div><div class=\"order-detail\"><div><span>Order ID<\/span><b>MQL-24091<\/b><\/div><div><span>Purchased<\/span><b>12 Sep 2026<\/b><\/div><div><span>Version<\/span><b>2.4<\/b><\/div><div><span>Delivery<\/span><b>Available<\/b><\/div><\/div><div class=\"detail-actions\"><button class=\"btn\">Product Details<\/button><button class=\"btn\">License<\/button><\/div><\/div>\r\n<div class=\"order-card\"><div class=\"order-head\"><div><div class=\"order-name\">Risk Manager Pro<\/div><div class=\"order-meta\">Utility \u00b7 MT5 \u00b7 Personal License<\/div><\/div><div><div class=\"order-amount\">$79<\/div><span class=\"manage-status completed\">Completed<\/span><\/div><\/div><div class=\"order-detail\"><div><span>Order ID<\/span><b>MQL-23872<\/b><\/div><div><span>Purchased<\/span><b>08 Sep 2026<\/b><\/div><div><span>Version<\/span><b>1.8<\/b><\/div><div><span>Delivery<\/span><b>Available<\/b><\/div><\/div><div class=\"detail-actions\"><button class=\"btn\">Product Details<\/button><button class=\"btn\">License<\/button><\/div><\/div>\r\n<\/div>\r\n<div class=\"notice\"><b>Prototype data.<\/b> Billing, renewal, cancellation, license delivery and order history will be connected to the production account system in a later backend stage.<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= COPY TRADING ACCOUNTS ================= -->\r\n<section id=\"copyAccountsPage\" class=\"hidden\">\r\n<div class=\"copy-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Copy Accounts<\/div>\r\n<div class=\"title-row\"><div><h1 class=\"title\">Copy Trading Accounts<\/h1><div class=\"subtitle\">Connect follower accounts and manage their copy-trading configuration.<\/div><\/div><button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button><\/div>\r\n\r\n<div class=\"copy-summary\">\r\n<div class=\"copy-stat\"><span>Connected Accounts<\/span><b>1<\/b><\/div>\r\n<div class=\"copy-stat\"><span>Active Copies<\/span><b>1<\/b><\/div>\r\n<div class=\"copy-stat\"><span>Last Sync<\/span><b>2 min<\/b><\/div>\r\n<div class=\"copy-stat\"><span>Connection Status<\/span><b style=\"font-size:13px;color:#26733b\">Connected<\/b><\/div>\r\n<\/div>\r\n\r\n<div class=\"copy-layout\">\r\n<aside class=\"copy-sidebar\">\r\n<div class=\"side-title\">Copy Trading<\/div>\r\n<a class=\"copy-nav active\" data-copy-tab=\"accounts\" onclick=\"copyTab('accounts')\">Accounts<\/a>\r\n<a class=\"copy-nav\" data-copy-tab=\"connections\" onclick=\"showPage('connectorCenter')\">Broker Connections<\/a>\r\n<a class=\"copy-nav\" data-copy-tab=\"settings\" onclick=\"copyTab('settings')\">Copy Settings<\/a>\r\n<a class=\"copy-nav\" data-copy-tab=\"activity\" onclick=\"copyTab('activity')\">Activity Log<\/a>\r\n<\/aside>\r\n\r\n<div class=\"copy-main\">\r\n<div id=\"copyAccountsTab\" class=\"copy-section\">\r\n<div class=\"broker-card\">\r\n<div class=\"broker-head\"><div><div class=\"broker-title\">Primary Follower<\/div><div class=\"broker-meta\">Follower Account \u00b7 Alpha Trend<\/div><\/div><div class=\"connection-dot\">Connected<\/div><\/div>\r\n<div class=\"broker-grid\">\r\n<div><span>Broker<\/span><b>Demo Broker<\/b><\/div><div><span>Platform<\/span><b>MT5<\/b><\/div><div><span>Account<\/span><b>\u2022\u2022\u2022\u2022 4821<\/b><\/div><div><span>Copy Status<\/span><b style=\"color:#26733b\">Active<\/b><\/div>\r\n<\/div>\r\n<div class=\"broker-actions\"><button class=\"btn\" onclick=\"toggleCopyForm('copySettingsForm')\">Copy Settings<\/button><button class=\"btn\" onclick=\"copyTab('activity')\">Activity<\/button><button class=\"btn\" onclick=\"disconnectPrototype()\">Disconnect<\/button><\/div>\r\n<div id=\"copySettingsForm\" class=\"copy-form\">\r\n<div class=\"copy-two\"><div class=\"checkout-field\"><label>Risk Mode<\/label><select><option>Proportional<\/option><option>Fixed Lot<\/option><option>Fixed Risk %<\/option><\/select><\/div><div class=\"checkout-field\"><label>Risk Multiplier<\/label><select><option>1.00x<\/option><option>0.50x<\/option><option>1.50x<\/option><option>2.00x<\/option><\/select><\/div><\/div>\r\n<div class=\"copy-two\"><div class=\"checkout-field\"><label>Maximum Drawdown Guard<\/label><select><option>10%<\/option><option>5%<\/option><option>15%<\/option><\/select><\/div><div class=\"checkout-field\"><label>Copy Direction<\/label><select><option>Same Direction<\/option><option>Disabled<\/option><\/select><\/div><\/div>\r\n<button class=\"btn blue\" onclick=\"saveCopySettings()\">Save Settings<\/button>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"copyConnectorBox\" class=\"connector-box\">\r\n<h3>Connect another follower account<\/h3><p>Choose a supported broker connector and authorize the follower account. MQLPro will use the connector to receive and route eligible copy instructions.<\/p>\r\n<button class=\"btn blue\" onclick=\"toggleCopyForm('newConnectorForm')\">Add Follower Account<\/button>\r\n<\/div>\r\n<div id=\"newConnectorForm\" class=\"copy-form\">\r\n<div class=\"copy-two\"><div class=\"checkout-field\"><label>Broker \/ Connector<\/label><select><option>Demo Broker \u2014 MT5<\/option><option>MT5 Direct Connector<\/option><option>Broker API Connector<\/option><\/select><\/div><div class=\"checkout-field\"><label>Account Label<\/label><input placeholder=\"e.g. Secondary Follower\"><\/div><\/div>\r\n<div class=\"copy-two\"><div class=\"checkout-field\"><label>Login \/ Account ID<\/label><input placeholder=\"Account ID\"><\/div><div class=\"checkout-field\"><label>Server<\/label><input placeholder=\"Broker server\"><\/div><\/div>\r\n<button class=\"btn blue\" onclick=\"connectPrototype()\">Connect Account<\/button>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"copyConnectionsTab\" class=\"copy-section\" style=\"display:none\">\r\n<div class=\"broker-card\"><div class=\"broker-head\"><div><div class=\"broker-title\">Demo Broker \u2014 MT5 Connector<\/div><div class=\"broker-meta\">Primary Follower connection<\/div><\/div><div class=\"connection-dot\">Operational<\/div><\/div><div class=\"broker-grid\"><div><span>Transport<\/span><b>Connector<\/b><\/div><div><span>Platform<\/span><b>MT5<\/b><\/div><div><span>Last Heartbeat<\/span><b>2 min ago<\/b><\/div><div><span>API Status<\/span><b>Available<\/b><\/div><\/div><\/div>\r\n<div class=\"connector-box\"><h3>Connector architecture<\/h3><p>Broker authentication, signal routing and trade execution are separated into connector services. Credentials should never be exposed in the public Signal or Market interface.<\/p><button class=\"btn\" onclick=\"copyTab('accounts')\">Back to Accounts<\/button><\/div>\r\n<\/div>\r\n\r\n<div id=\"copySettingsTab\" class=\"copy-section\" style=\"display:none\">\r\n<div class=\"broker-card\"><h2 style=\"font-size:18px;font-weight:400;margin:0 0 12px\">Global Copy Settings<\/h2>\r\n<div class=\"copy-two\"><div class=\"checkout-field\"><label>Default Risk Mode<\/label><select><option>Proportional<\/option><option>Fixed Lot<\/option><option>Fixed Risk %<\/option><\/select><\/div><div class=\"checkout-field\"><label>Default Risk Multiplier<\/label><select><option>1.00x<\/option><option>0.50x<\/option><option>1.50x<\/option><\/select><\/div><\/div>\r\n<div class=\"copy-two\"><div class=\"checkout-field\"><label>Maximum Account Drawdown<\/label><select><option>10%<\/option><option>5%<\/option><option>15%<\/option><option>20%<\/option><\/select><\/div><div class=\"checkout-field\"><label>Execution Mode<\/label><select><option>Automatic<\/option><option>Approval Required<\/option><\/select><\/div><\/div>\r\n<button class=\"btn blue\" onclick=\"saveCopySettings()\">Save Settings<\/button>\r\n<div class=\"risk-note\"><b>Risk:<\/b> Copy trading does not guarantee identical execution or results between accounts. Slippage, spreads, latency, rejected orders and broker-specific conditions can affect follower performance.<\/div>\r\n<\/div><\/div>\r\n\r\n<div id=\"copyActivityTab\" class=\"copy-section\" style=\"display:none\">\r\n<div class=\"broker-card\"><h2 style=\"font-size:18px;font-weight:400;margin:0 0 12px\">Activity Log<\/h2>\r\n<table class=\"dash-table\"><thead><tr><th>Time<\/th><th>Event<\/th><th>Account<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>22:14<\/td><td>Heartbeat received<\/td><td>Primary Follower<\/td><td class=\"status-active\">OK<\/td><\/tr>\r\n<tr><td>22:12<\/td><td>Copy instruction synchronized<\/td><td>Primary Follower<\/td><td class=\"status-active\">Synced<\/td><\/tr>\r\n<tr><td>22:03<\/td><td>Signal subscription checked<\/td><td>Alpha Trend<\/td><td class=\"status-active\">Active<\/td><\/tr>\r\n<tr><td>21:48<\/td><td>Connector authenticated<\/td><td>Primary Follower<\/td><td class=\"status-active\">Connected<\/td><\/tr>\r\n<\/tbody><\/table><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= CONNECTOR CENTER ================= -->\r\n<section id=\"connectorCenterPage\" class=\"hidden\">\r\n<div class=\"connector-center\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Copy Accounts \/ Broker Connections<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Broker Connector Center<\/h1><div class=\"subtitle\">Monitor broker connections, connector health and the copy-trading execution path.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('copyAccounts')\">\u2190 Copy Accounts<\/button>\r\n<\/div>\r\n\r\n<div class=\"connector-layout\">\r\n<aside class=\"connector-nav\">\r\n<a class=\"active\" data-connector-tab=\"overview\" onclick=\"connectorTab('overview')\">Overview<\/a>\r\n<a data-connector-tab=\"brokers\" onclick=\"connectorTab('brokers')\">Supported Connections<\/a>\r\n<a data-connector-tab=\"health\" onclick=\"connectorTab('health')\">Connection Health<\/a>\r\n<a data-connector-tab=\"architecture\" onclick=\"connectorTab('architecture')\">Architecture<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"connectorOverview\" class=\"connector-section active\">\r\n<div class=\"connector-card\">\r\n<h2>Connector Overview<\/h2>\r\n<div class=\"connector-desc\">MQLPro separates the public marketplace from broker authentication and execution. A connector acts as the controlled bridge between a follower account and the MQLPro copy engine.<\/div>\r\n<div class=\"health-grid\">\r\n<div class=\"health-box\"><span>Active Connectors<\/span><b>1<\/b><\/div>\r\n<div class=\"health-box\"><span>Connected Accounts<\/span><b>1<\/b><\/div>\r\n<div class=\"health-box\"><span>Heartbeat<\/span><b>2 min ago<\/b><\/div>\r\n<div class=\"health-box\"><span>System Status<\/span><b style=\"color:#26733b\">Operational<\/b><\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"connector-card\">\r\n<h3>Primary Connector<\/h3>\r\n<div class=\"connector-desc\">Demo Broker \u2014 MT5 Connector<\/div>\r\n<div class=\"health-grid\">\r\n<div class=\"health-box\"><span>Transport<\/span><b>Connector<\/b><\/div>\r\n<div class=\"health-box\"><span>Platform<\/span><b>MT5<\/b><\/div>\r\n<div class=\"health-box\"><span>Authentication<\/span><b>Connected<\/b><\/div>\r\n<div class=\"health-box\"><span>Execution<\/span><b>Ready<\/b><\/div>\r\n<\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"connectorTab('health')\">View Health<\/button><button class=\"btn\" onclick=\"connectorTab('architecture')\">View Architecture<\/button><button class=\"btn blue\" onclick=\"showPage('copyAccounts')\">Manage Account<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"connectorBrokers\" class=\"connector-section\">\r\n<div class=\"connector-card\"><h2>Supported Connections<\/h2><div class=\"connector-desc\">These are prototype connector types. Production support will depend on broker infrastructure, platform capabilities and the connector implementation.<\/div>\r\n<div class=\"connector-list\">\r\n<div class=\"connector-item\"><div class=\"connector-item-head\"><div><div class=\"connector-name\">MT5 Direct Connector<\/div><div class=\"connector-meta\">MetaTrader 5 \u00b7 Expert Advisor \/ terminal bridge<\/div><\/div><span class=\"connector-status\">Available<\/span><\/div><div class=\"connector-features\">Trade events \u00b7 account state \u00b7 execution routing \u00b7 heartbeat<\/div><div class=\"detail-actions\"><button class=\"btn blue\" onclick=\"showPage('copyAccounts')\">Connect<\/button><\/div><\/div>\r\n<div class=\"connector-item\"><div class=\"connector-item-head\"><div><div class=\"connector-name\">Broker API Connector<\/div><div class=\"connector-meta\">Broker-provided REST \/ WebSocket API<\/div><\/div><span class=\"connector-status offline\">Setup Required<\/span><\/div><div class=\"connector-features\">Depends on broker API access, permissions, authentication and order endpoints.<\/div><div class=\"detail-actions\"><button class=\"btn\" onclick=\"connectorTab('architecture')\">Requirements<\/button><\/div><\/div>\r\n<div class=\"connector-item\"><div class=\"connector-item-head\"><div><div class=\"connector-name\">Python Execution Bridge<\/div><div class=\"connector-meta\">Local \/ hosted Python integration<\/div><\/div><span class=\"connector-status offline\">Prototype<\/span><\/div><div class=\"connector-features\">Can act as an execution bridge where the supported broker\/platform interface permits it.<\/div><div class=\"detail-actions\"><button class=\"btn\" onclick=\"connectorTab('architecture')\">Architecture<\/button><\/div><\/div>\r\n<div class=\"connector-item\"><div class=\"connector-item-head\"><div><div class=\"connector-name\">Custom Broker Connector<\/div><div class=\"connector-meta\">Broker-specific implementation<\/div><\/div><span class=\"connector-status offline\">Setup Required<\/span><\/div><div class=\"connector-features\">Used where a broker requires its own authentication, API or platform integration.<\/div><div class=\"detail-actions\"><button class=\"btn\" onclick=\"connectorTab('architecture')\">Requirements<\/button><\/div><\/div>\r\n<\/div><\/div>\r\n<\/div>\r\n\r\n<div id=\"connectorHealth\" class=\"connector-section\">\r\n<div class=\"connector-card\"><h2>Connection Health<\/h2><div class=\"connector-desc\">Operational indicators for the prototype connector.<\/div>\r\n<div class=\"health-grid\">\r\n<div class=\"health-box\"><span>Authentication<\/span><b style=\"color:#26733b\">OK<\/b><\/div>\r\n<div class=\"health-box\"><span>Heartbeat<\/span><b style=\"color:#26733b\">OK<\/b><\/div>\r\n<div class=\"health-box\"><span>Account Read<\/span><b style=\"color:#26733b\">OK<\/b><\/div>\r\n<div class=\"health-box\"><span>Execution Channel<\/span><b style=\"color:#26733b\">READY<\/b><\/div>\r\n<\/div>\r\n<\/div>\r\n<div class=\"connector-card\"><h3>Recent Checks<\/h3>\r\n<table class=\"dash-table\"><thead><tr><th>Check<\/th><th>Result<\/th><th>Last Checked<\/th><th>Latency<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Connector heartbeat<\/td><td class=\"status-active\">OK<\/td><td>22:14<\/td><td>84 ms<\/td><\/tr>\r\n<tr><td>Account synchronization<\/td><td class=\"status-active\">OK<\/td><td>22:13<\/td><td>126 ms<\/td><\/tr>\r\n<tr><td>Signal routing<\/td><td class=\"status-active\">READY<\/td><td>22:12<\/td><td>91 ms<\/td><\/tr>\r\n<tr><td>Execution channel<\/td><td class=\"status-active\">READY<\/td><td>22:12<\/td><td>118 ms<\/td><\/tr>\r\n<\/tbody><\/table><\/div>\r\n<div class=\"connector-warning\"><b>Production note:<\/b> A green health indicator in the UI must not be treated as proof that a broker supports every required API or execution operation. Capability verification belongs in the connector onboarding process.<\/div>\r\n<\/div>\r\n\r\n<div id=\"connectorArchitecture\" class=\"connector-section\">\r\n<div class=\"connector-card\"><h2>Copy Execution Architecture<\/h2><div class=\"connector-desc\">Logical flow for cross-broker copy trading. The public Signal page does not directly access follower broker credentials.<\/div>\r\n<div class=\"flow\">\r\n<div class=\"flow-step\">Signal Provider<\/div><div class=\"flow-arrow\">\u2192<\/div><div class=\"flow-step\">MQLPro Signal Engine<\/div><div class=\"flow-arrow\">\u2192<\/div><div class=\"flow-step\">Risk \/ Allocation<\/div><div class=\"flow-arrow\">\u2192<\/div><div class=\"flow-step\">Connector<\/div><div class=\"flow-arrow\">\u2192<\/div><div class=\"flow-step\">Follower Broker<\/div>\r\n<\/div>\r\n<div class=\"connector-desc\">The connector receives only the information required for the authorized account operation. The implementation may differ between MT5, broker APIs and other supported platforms.<\/div>\r\n<div class=\"connector-warning\"><b>Security boundary:<\/b> Broker credentials, tokens and execution secrets should be isolated from the public marketplace UI and stored using appropriate server-side security controls.<\/div>\r\n<\/div>\r\n<div class=\"connector-card\"><h3>Onboarding Requirements<\/h3>\r\n<div class=\"connector-desc\">Before activating a production connector, MQLPro should verify authentication, account read access, order placement\/modification\/cancellation, symbol mapping, position state, error handling, rate limits, heartbeat and disconnect recovery.<\/div>\r\n<button class=\"btn\" onclick=\"showPage('copyAccounts')\">Back to Copy Accounts<\/button>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= SIGNAL ENGINE ================= -->\r\n<section id=\"signalEnginePage\" class=\"hidden\">\r\n<div class=\"engine-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Signal Engine<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Signal Engine<\/h1><div class=\"subtitle\">Monitor master signals, normalized trade events and downstream copy routing.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"engine-layout\">\r\n<aside class=\"engine-nav\">\r\n<a class=\"active\" data-engine-tab=\"overview\" onclick=\"engineTab('overview')\">Overview<\/a>\r\n<a data-engine-tab=\"signals\" onclick=\"engineTab('signals')\">Master Signals<\/a>\r\n<a data-engine-tab=\"events\" onclick=\"engineTab('events')\">Trade Events<\/a>\r\n<a data-engine-tab=\"routing\" onclick=\"engineTab('routing')\">Routing<\/a>\r\n<a data-engine-tab=\"monitoring\" onclick=\"engineTab('monitoring')\">Monitoring<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"engineOverview\" class=\"engine-section active\">\r\n<div class=\"engine-card\"><h2>Engine Overview<\/h2><div class=\"engine-desc\">The Signal Engine converts authorized master activity into normalized events before risk allocation and connector execution. Public users see strategy performance, not broker credentials or execution secrets.<\/div>\r\n<div class=\"engine-grid\">\r\n<div class=\"engine-stat\"><span>Master Signals<\/span><b>12<\/b><\/div>\r\n<div class=\"engine-stat\"><span>Active Events<\/span><b>3<\/b><\/div>\r\n<div class=\"engine-stat\"><span>Followers Routed<\/span><b>47<\/b><\/div>\r\n<div class=\"engine-stat\"><span>Engine Status<\/span><b style=\"color:#26733b\">Operational<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"engine-card\"><h3>Core Processing Flow<\/h3>\r\n<div class=\"engine-flow\">\r\n<div class=\"engine-flow-step\">Master Account<\/div><div class=\"engine-flow-arrow\">\u2192<\/div>\r\n<div class=\"engine-flow-step\">Trade Event<\/div><div class=\"engine-flow-arrow\">\u2192<\/div>\r\n<div class=\"engine-flow-step\">Normalize<\/div><div class=\"engine-flow-arrow\">\u2192<\/div>\r\n<div class=\"engine-flow-step\">Risk \/ Allocation<\/div><div class=\"engine-flow-arrow\">\u2192<\/div>\r\n<div class=\"engine-flow-step\">Follower Queue<\/div><div class=\"engine-flow-arrow\">\u2192<\/div>\r\n<div class=\"engine-flow-step\">Connector<\/div>\r\n<\/div>\r\n<div class=\"engine-warning\"><b>Execution boundary:<\/b> The engine should not assume that a follower broker can execute the same symbol, volume, price or order type as the master. Mapping and validation occur before execution.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"engineSignals\" class=\"engine-section\">\r\n<div class=\"engine-card\"><h2>Master Signals<\/h2><div class=\"engine-desc\">Prototype master strategies currently registered with the engine.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Signal<\/th><th>Asset Group<\/th><th>Followers<\/th><th>State<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Alpha Trend<\/td><td>Forex<\/td><td>24<\/td><td><span class=\"engine-badge live\">LIVE<\/span><\/td><\/tr>\r\n<tr><td>Gold Momentum<\/td><td>XAUUSD<\/td><td>15<\/td><td><span class=\"engine-badge live\">LIVE<\/span><\/td><\/tr>\r\n<tr><td>Index Pulse<\/td><td>Indices<\/td><td>8<\/td><td><span class=\"engine-badge live\">LIVE<\/span><\/td><\/tr>\r\n<tr><td>Crypto Swing<\/td><td>Crypto<\/td><td>0<\/td><td><span class=\"engine-badge test\">TEST<\/span><\/td><\/tr>\r\n<\/tbody><\/table><\/div>\r\n<\/div>\r\n\r\n<div id=\"engineEvents\" class=\"engine-section\">\r\n<div class=\"engine-card\"><h2>Normalized Trade Events<\/h2><div class=\"engine-desc\">A normalized event is an internal representation. It is not a public copy instruction and does not expose a master's account credentials.<\/div>\r\n<div class=\"signal-event\"><div><div class=\"signal-event-main\">Alpha Trend \u00b7 Position Opened<\/div><div class=\"signal-event-meta\">Event EVT-98214 \u00b7 normalized \u00b7 22:14:02<\/div><\/div><div class=\"signal-event-state\">Accepted<\/div><\/div>\r\n<div class=\"signal-event\"><div><div class=\"signal-event-main\">Gold Momentum \u00b7 Position Updated<\/div><div class=\"signal-event-meta\">Event EVT-98213 \u00b7 normalized \u00b7 22:13:41<\/div><\/div><div class=\"signal-event-state\">Accepted<\/div><\/div>\r\n<div class=\"signal-event\"><div><div class=\"signal-event-main\">Alpha Trend \u00b7 Stop Modified<\/div><div class=\"signal-event-meta\">Event EVT-98212 \u00b7 normalized \u00b7 22:12:18<\/div><\/div><div class=\"signal-event-state\">Queued<\/div><\/div>\r\n<div class=\"signal-event\"><div><div class=\"signal-event-main\">Index Pulse \u00b7 Position Closed<\/div><div class=\"signal-event-meta\">Event EVT-98211 \u00b7 normalized \u00b7 22:11:57<\/div><\/div><div class=\"signal-event-state\">Routed<\/div><\/div>\r\n<\/div>\r\n<div class=\"engine-card\"><h3>Example internal event<\/h3>\r\n<div class=\"engine-code\">event_id: EVT-98214\r\nsignal_id: SIG-ALPHA\r\nevent_type: POSITION_OPEN\r\ninstrument: XAUUSD\r\ndirection: BUY\r\nmaster_reference: internal\r\ntimestamp: 2026-09-16T22:14:02\r\nstatus: ACCEPTED<\/div><\/div>\r\n<\/div>\r\n\r\n<div id=\"engineRouting\" class=\"engine-section\">\r\n<div class=\"engine-card\"><h2>Follower Routing<\/h2><div class=\"engine-desc\">The routing layer resolves which authorized followers receive an eligible event and passes the result to the appropriate connector.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Signal<\/th><th>Followers<\/th><th>Risk Mode<\/th><th>Queue<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Alpha Trend<\/td><td>24<\/td><td>Proportional<\/td><td>Normal<\/td><td class=\"status-active\">Ready<\/td><\/tr>\r\n<tr><td>Gold Momentum<\/td><td>15<\/td><td>Fixed Risk %<\/td><td>Normal<\/td><td class=\"status-active\">Ready<\/td><\/tr>\r\n<tr><td>Index Pulse<\/td><td>8<\/td><td>Proportional<\/td><td>Normal<\/td><td class=\"status-active\">Ready<\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"engine-warning\"><b>Important:<\/b> Routing eligibility must check subscription status, follower account status, symbol mapping, risk limits and connector health before an execution request is created.<\/div>\r\n<\/div>\r\n\r\n<div id=\"engineMonitoring\" class=\"engine-section\">\r\n<div class=\"engine-card\"><h2>Engine Monitoring<\/h2><div class=\"engine-grid\">\r\n<div class=\"engine-stat\"><span>Event Latency<\/span><b>91 ms<\/b><\/div>\r\n<div class=\"engine-stat\"><span>Queue Depth<\/span><b>3<\/b><\/div>\r\n<div class=\"engine-stat\"><span>Rejected Events<\/span><b>0<\/b><\/div>\r\n<div class=\"engine-stat\"><span>Last Heartbeat<\/span><b>22:14:02<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"engine-card\"><h3>Operational Checks<\/h3>\r\n<table class=\"dash-table\"><thead><tr><th>Component<\/th><th>Check<\/th><th>Result<\/th><th>Last Check<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Event Listener<\/td><td>Master event intake<\/td><td class=\"status-active\">OK<\/td><td>22:14<\/td><\/tr>\r\n<tr><td>Normalizer<\/td><td>Schema validation<\/td><td class=\"status-active\">OK<\/td><td>22:14<\/td><\/tr>\r\n<tr><td>Risk Layer<\/td><td>Follower allocation<\/td><td class=\"status-active\">OK<\/td><td>22:14<\/td><\/tr>\r\n<tr><td>Routing Queue<\/td><td>Dispatch readiness<\/td><td class=\"status-active\">OK<\/td><td>22:14<\/td><\/tr>\r\n<\/tbody><\/table><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= RISK & ALLOCATION ================= -->\r\n<section id=\"riskEnginePage\" class=\"hidden\">\r\n<div class=\"risk-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Risk & Allocation<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Risk & Allocation Engine<\/h1><div class=\"subtitle\">Apply follower-specific risk rules before an eligible copy instruction reaches a broker connector.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"risk-layout\">\r\n<aside class=\"risk-nav\">\r\n<a class=\"active\" data-risk-tab=\"overview\" onclick=\"riskTab('overview')\">Overview<\/a>\r\n<a data-risk-tab=\"rules\" onclick=\"riskTab('rules')\">Risk Rules<\/a>\r\n<a data-risk-tab=\"allocation\" onclick=\"riskTab('allocation')\">Allocation<\/a>\r\n<a data-risk-tab=\"guards\" onclick=\"riskTab('guards')\">Safety Guards<\/a>\r\n<a data-risk-tab=\"simulation\" onclick=\"riskTab('simulation')\">Simulation<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"riskOverview\" class=\"risk-section active\">\r\n<div class=\"risk-card\"><h2>Risk Engine Overview<\/h2><div class=\"risk-desc\">A master trade event is not copied blindly. The allocation layer evaluates each follower's subscription, account equity, configured risk mode, limits and instrument constraints.<\/div>\r\n<div class=\"risk-grid\">\r\n<div class=\"risk-stat\"><span>Followers Evaluated<\/span><b>47<\/b><\/div>\r\n<div class=\"risk-stat\"><span>Rules Applied<\/span><b>142<\/b><\/div>\r\n<div class=\"risk-stat\"><span>Blocked Requests<\/span><b>2<\/b><\/div>\r\n<div class=\"risk-stat\"><span>Engine Status<\/span><b style=\"color:#26733b\">Operational<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"risk-card\"><h3>Processing Flow<\/h3>\r\n<div class=\"risk-flow\">\r\n<div class=\"risk-flow-step\">Normalized Event<\/div><div class=\"risk-flow-arrow\">\u2192<\/div>\r\n<div class=\"risk-flow-step\">Subscription Check<\/div><div class=\"risk-flow-arrow\">\u2192<\/div>\r\n<div class=\"risk-flow-step\">Risk Profile<\/div><div class=\"risk-flow-arrow\">\u2192<\/div>\r\n<div class=\"risk-flow-step\">Volume Allocation<\/div><div class=\"risk-flow-arrow\">\u2192<\/div>\r\n<div class=\"risk-flow-step\">Safety Guards<\/div><div class=\"risk-flow-arrow\">\u2192<\/div>\r\n<div class=\"risk-flow-step\">Execution Request<\/div>\r\n<\/div><\/div>\r\n<\/div>\r\n\r\n<div id=\"riskRules\" class=\"risk-section\">\r\n<div class=\"risk-card\"><h2>Risk Rules<\/h2><div class=\"risk-desc\">Prototype rules used to determine whether and how a signal is allocated to a follower.<\/div>\r\n<div class=\"risk-rule\"><div><b>Subscription Active<\/b><small>Follower must have an eligible subscription.<\/small><\/div><div>Required<\/div><div>Pass<\/div><span class=\"risk-badge ok\">ENABLED<\/span><\/div>\r\n<div class=\"risk-rule\"><div><b>Account Drawdown Guard<\/b><small>Blocks new exposure after the configured threshold.<\/small><\/div><div>10%<\/div><div>Current 3.2%<\/div><span class=\"risk-badge ok\">OK<\/span><\/div>\r\n<div class=\"risk-rule\"><div><b>Risk Multiplier<\/b><small>Scales the normalized master allocation.<\/small><\/div><div>1.00x<\/div><div>Follower profile<\/div><span class=\"risk-badge ok\">ACTIVE<\/span><\/div>\r\n<div class=\"risk-rule\"><div><b>Maximum Exposure<\/b><small>Prevents exposure above account-level limits.<\/small><\/div><div>20%<\/div><div>Current 11.4%<\/div><span class=\"risk-badge ok\">OK<\/span><\/div>\r\n<div class=\"risk-rule\"><div><b>Instrument Mapping<\/b><small>Requires a valid follower symbol mapping.<\/small><\/div><div>Required<\/div><div>1 pending<\/div><span class=\"risk-badge warn\">CHECK<\/span><\/div>\r\n<\/div>\r\n<div class=\"risk-card\"><h3>Default Risk Profile<\/h3>\r\n<div class=\"risk-form-grid\">\r\n<div class=\"checkout-field\"><label>Risk Mode<\/label><select><option>Proportional<\/option><option>Fixed Risk %<\/option><option>Fixed Lot<\/option><\/select><\/div>\r\n<div class=\"checkout-field\"><label>Risk Multiplier<\/label><select><option>1.00x<\/option><option>0.50x<\/option><option>1.50x<\/option><option>2.00x<\/option><\/select><\/div>\r\n<div class=\"checkout-field\"><label>Maximum Drawdown<\/label><select><option>10%<\/option><option>5%<\/option><option>15%<\/option><\/select><\/div>\r\n<div class=\"checkout-field\"><label>Maximum Exposure<\/label><select><option>20%<\/option><option>10%<\/option><option>30%<\/option><\/select><\/div>\r\n<\/div>\r\n<button class=\"btn blue\" onclick=\"saveRiskPrototype()\">Save Risk Profile<\/button>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"riskAllocation\" class=\"risk-section\">\r\n<div class=\"risk-card\"><h2>Follower Allocation<\/h2><div class=\"risk-desc\">Illustrative allocation results for a single normalized event. Values are prototype calculations, not live orders.<\/div>\r\n<table class=\"allocation-table\"><thead><tr><th>Follower<\/th><th>Equity<\/th><th>Risk Mode<\/th><th>Multiplier<\/th><th>Calculated Allocation<\/th><th>Eligibility<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Primary Follower<\/td><td>$10,000<\/td><td>Proportional<\/td><td>1.00x<\/td><td>0.27 lot*<\/td><td class=\"status-active\">Eligible<\/td><\/tr>\r\n<tr><td>Follower B<\/td><td>$5,000<\/td><td>Proportional<\/td><td>0.50x<\/td><td>0.07 lot*<\/td><td class=\"status-active\">Eligible<\/td><\/tr>\r\n<tr><td>Follower C<\/td><td>$2,500<\/td><td>Fixed Risk %<\/td><td>1.00x<\/td><td>0.03 lot*<\/td><td class=\"status-active\">Eligible<\/td><\/tr>\r\n<tr><td>Follower D<\/td><td>$1,000<\/td><td>Proportional<\/td><td>1.00x<\/td><td>\u2014<\/td><td style=\"color:#996c18\">Blocked<\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"risk-note\"><b>*Illustrative only.<\/b> Final volume depends on the strategy's normalized risk input, instrument contract specifications, broker constraints, account currency, leverage and the follower's configuration. The UI must not imply guaranteed identical sizing across brokers.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"riskGuards\" class=\"risk-section\">\r\n<div class=\"risk-card\"><h2>Safety Guards<\/h2><div class=\"risk-desc\">Hard checks that can stop an execution request before it reaches a connector.<\/div>\r\n<table class=\"allocation-table\"><thead><tr><th>Guard<\/th><th>Condition<\/th><th>Current<\/th><th>Action<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Max Drawdown<\/td><td>\u2265 10%<\/td><td>3.2%<\/td><td>Block new copy<\/td><td class=\"status-active\">Clear<\/td><\/tr>\r\n<tr><td>Max Exposure<\/td><td>\u2265 20%<\/td><td>11.4%<\/td><td>Block new exposure<\/td><td class=\"status-active\">Clear<\/td><\/tr>\r\n<tr><td>Connector Health<\/td><td>Not operational<\/td><td>Operational<\/td><td>Pause routing<\/td><td class=\"status-active\">Clear<\/td><\/tr>\r\n<tr><td>Subscription<\/td><td>Inactive \/ expired<\/td><td>Active<\/td><td>Reject request<\/td><td class=\"status-active\">Clear<\/td><\/tr>\r\n<tr><td>Symbol Mapping<\/td><td>Missing<\/td><td>1 pending<\/td><td>Reject request<\/td><td style=\"color:#996c18\">Review<\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"riskSimulation\" class=\"risk-section\">\r\n<div class=\"risk-card\"><h2>Allocation Simulation<\/h2><div class=\"risk-desc\">Test the allocation logic with example account parameters before connecting a production execution path.<\/div>\r\n<div class=\"risk-form-grid\">\r\n<div class=\"checkout-field\"><label>Follower Equity<\/label><input id=\"simEquity\" value=\"10000\"><\/div>\r\n<div class=\"checkout-field\"><label>Master Allocation<\/label><input id=\"simMaster\" value=\"0.27\"><\/div>\r\n<div class=\"checkout-field\"><label>Risk Multiplier<\/label><select id=\"simMultiplier\"><option value=\"1\">1.00x<\/option><option value=\".5\">0.50x<\/option><option value=\"1.5\">1.50x<\/option><option value=\"2\">2.00x<\/option><\/select><\/div>\r\n<div class=\"checkout-field\"><label>Drawdown<\/label><input id=\"simDD\" value=\"3.2\"><\/div>\r\n<\/div>\r\n<button class=\"btn blue\" onclick=\"runRiskSimulation()\">Run Simulation<\/button>\r\n<div id=\"riskSimulationResult\" class=\"notice\" style=\"margin-top:12px\">No simulation has been run.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= EXECUTION QUEUE ================= -->\r\n<section id=\"executionQueuePage\" class=\"hidden\">\r\n<div class=\"exec-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Execution Queue<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Execution Queue<\/h1><div class=\"subtitle\">Track eligible copy requests from allocation through connector acknowledgement and final execution state.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"exec-layout\">\r\n<aside class=\"exec-nav\">\r\n<a class=\"active\" data-exec-tab=\"overview\" onclick=\"execTab('overview')\">Overview<\/a>\r\n<a data-exec-tab=\"queue\" onclick=\"execTab('queue')\">Order Queue<\/a>\r\n<a data-exec-tab=\"lifecycle\" onclick=\"execTab('lifecycle')\">Order Lifecycle<\/a>\r\n<a data-exec-tab=\"reconciliation\" onclick=\"execTab('reconciliation')\">Reconciliation<\/a>\r\n<a data-exec-tab=\"errors\" onclick=\"execTab('errors')\">Errors & Recovery<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"execOverview\" class=\"exec-section active\">\r\n<div class=\"exec-card\"><h2>Execution Overview<\/h2><div class=\"exec-desc\">The queue is the controlled handoff between risk-approved follower instructions and broker connectors. Each request receives an internal identifier so its lifecycle can be audited.<\/div>\r\n<div class=\"exec-grid\">\r\n<div class=\"exec-stat\"><span>Queued<\/span><b>3<\/b><\/div>\r\n<div class=\"exec-stat\"><span>Processing<\/span><b>1<\/b><\/div>\r\n<div class=\"exec-stat\"><span>Executed Today<\/span><b>126<\/b><\/div>\r\n<div class=\"exec-stat\"><span>Failed<\/span><b>2<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"exec-card\"><h3>Execution Flow<\/h3>\r\n<div class=\"exec-flow\">\r\n<div class=\"exec-step\">Risk Approved<\/div><div class=\"exec-arrow\">\u2192<\/div>\r\n<div class=\"exec-step\">Create Request<\/div><div class=\"exec-arrow\">\u2192<\/div>\r\n<div class=\"exec-step\">Queue<\/div><div class=\"exec-arrow\">\u2192<\/div>\r\n<div class=\"exec-step\">Connector<\/div><div class=\"exec-arrow\">\u2192<\/div>\r\n<div class=\"exec-step\">Broker<\/div><div class=\"exec-arrow\">\u2192<\/div>\r\n<div class=\"exec-step\">Acknowledge<\/div><div class=\"exec-arrow\">\u2192<\/div>\r\n<div class=\"exec-step\">Reconcile<\/div>\r\n<\/div><\/div>\r\n<\/div>\r\n\r\n<div id=\"execQueue\" class=\"exec-section\">\r\n<div class=\"exec-card\"><h2>Order Queue<\/h2><div class=\"exec-desc\">Prototype requests waiting for or passing through the execution layer.<\/div>\r\n<div class=\"exec-event\"><div class=\"exec-event-id\">REQ-77102<\/div><div><div class=\"exec-event-main\">Alpha Trend \u00b7 Primary Follower \u00b7 Position Open<\/div><div class=\"exec-event-meta\">XAUUSD \u00b7 BUY \u00b7 created 22:14:03 \u00b7 connector MT5<\/div><\/div><span class=\"exec-status wait\">PROCESSING<\/span><\/div>\r\n<div class=\"exec-event\"><div class=\"exec-event-id\">REQ-77101<\/div><div><div class=\"exec-event-main\">Gold Momentum \u00b7 Primary Follower \u00b7 Position Update<\/div><div class=\"exec-event-meta\">XAUUSD \u00b7 MODIFY \u00b7 created 22:13:42 \u00b7 connector MT5<\/div><\/div><span class=\"exec-status ok\">ACKNOWLEDGED<\/span><\/div>\r\n<div class=\"exec-event\"><div class=\"exec-event-id\">REQ-77100<\/div><div><div class=\"exec-event-main\">Index Pulse \u00b7 Follower C \u00b7 Position Close<\/div><div class=\"exec-event-meta\">US500 \u00b7 CLOSE \u00b7 created 22:12:01 \u00b7 connector MT5<\/div><\/div><span class=\"exec-status ok\">EXECUTED<\/span><\/div>\r\n<div class=\"exec-event\"><div class=\"exec-event-id\">REQ-77099<\/div><div><div class=\"exec-event-main\">Alpha Trend \u00b7 Follower D \u00b7 Position Open<\/div><div class=\"exec-event-meta\">XAUUSD \u00b7 BUY \u00b7 blocked by risk guard<\/div><\/div><span class=\"exec-status fail\">BLOCKED<\/span><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"execLifecycle\" class=\"exec-section\">\r\n<div class=\"exec-card\"><h2>Order Lifecycle<\/h2><div class=\"exec-desc\">Example lifecycle for request REQ-77102.<\/div>\r\n<div class=\"exec-timeline\">\r\n<div class=\"exec-timeline-item\"><b>22:14:02.118 \u2014 Event received<\/b><small>Master event EVT-98214 normalized successfully.<\/small><\/div>\r\n<div class=\"exec-timeline-item\"><b>22:14:02.136 \u2014 Risk approved<\/b><small>Follower subscription, drawdown and allocation rules passed.<\/small><\/div>\r\n<div class=\"exec-timeline-item\"><b>22:14:02.141 \u2014 Request created<\/b><small>Execution request REQ-77102 assigned.<\/small><\/div>\r\n<div class=\"exec-timeline-item\"><b>22:14:02.158 \u2014 Connector dispatched<\/b><small>Request handed to the MT5 connector.<\/small><\/div>\r\n<div class=\"exec-timeline-item\"><b>22:14:02.247 \u2014 Broker acknowledgement<\/b><small>Prototype acknowledgement received.<\/small><\/div>\r\n<div class=\"exec-timeline-item\"><b>22:14:02.251 \u2014 Reconciliation<\/b><small>Follower position state queued for verification.<\/small><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"execReconciliation\" class=\"exec-section\">\r\n<div class=\"exec-card\"><h2>Reconciliation<\/h2><div class=\"exec-desc\">Compare the expected internal state with the follower account state after connector execution.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Request<\/th><th>Expected<\/th><th>Follower State<\/th><th>Result<\/th><\/tr><\/thead><tbody>\r\n<tr><td>REQ-77102<\/td><td>Position Open<\/td><td>Pending check<\/td><td><span class=\"exec-status wait\">VERIFY<\/span><\/td><\/tr>\r\n<tr><td>REQ-77101<\/td><td>Position Modified<\/td><td>Modified<\/td><td><span class=\"exec-status ok\">MATCH<\/span><\/td><\/tr>\r\n<tr><td>REQ-77100<\/td><td>Position Closed<\/td><td>Closed<\/td><td><span class=\"exec-status ok\">MATCH<\/span><\/td><\/tr>\r\n<tr><td>REQ-77098<\/td><td>Position Open<\/td><td>Volume mismatch<\/td><td><span class=\"exec-status fail\">REVIEW<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"exec-note\"><b>Reconciliation matters:<\/b> a successful connector response does not by itself prove that the final follower position matches the intended state. The production system should verify actual account state and handle partial fills, rejected orders and broker-side modifications.<\/div>\r\n<\/div>\r\n\r\n<div id=\"execErrors\" class=\"exec-section\">\r\n<div class=\"exec-card\"><h2>Errors & Recovery<\/h2><div class=\"exec-desc\">Failed requests should become observable and recoverable rather than silently disappearing.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Request<\/th><th>Failure<\/th><th>Action<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>REQ-77098<\/td><td>Volume constraint<\/td><td>Recalculate \/ review<\/td><td><span class=\"exec-status fail\">REVIEW<\/span><\/td><\/tr>\r\n<tr><td>REQ-77091<\/td><td>Connector timeout<\/td><td>Retry with backoff<\/td><td><span class=\"exec-status ok\">RECOVERED<\/span><\/td><\/tr>\r\n<tr><td>REQ-77082<\/td><td>Symbol mapping missing<\/td><td>Block request<\/td><td><span class=\"exec-status fail\">BLOCKED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype retry queue opened.')\">Retry Eligible<\/button><button class=\"btn\" onclick=\"alert('Prototype error log refreshed.')\">Refresh Log<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= ACCOUNT STATE & POSITION SYNC ================= -->\r\n<section id=\"accountSyncPage\" class=\"hidden\">\r\n<div class=\"sync-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Account Synchronization<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Account Synchronization<\/h1><div class=\"subtitle\">Maintain a consistent internal view of follower balances, positions and execution state across connected brokers.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"sync-layout\">\r\n<aside class=\"sync-nav\">\r\n<a class=\"active\" data-sync-tab=\"overview\" onclick=\"syncTab('overview')\">Overview<\/a>\r\n<a data-sync-tab=\"accounts\" onclick=\"syncTab('accounts')\">Accounts<\/a>\r\n<a data-sync-tab=\"positions\" onclick=\"syncTab('positions')\">Positions<\/a>\r\n<a data-sync-tab=\"balances\" onclick=\"syncTab('balances')\">Balances<\/a>\r\n<a data-sync-tab=\"reconcile\" onclick=\"syncTab('reconcile')\">Reconcile<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"syncOverview\" class=\"sync-section active\">\r\n<div class=\"sync-card\"><h2>Synchronization Overview<\/h2><div class=\"sync-desc\">The synchronization layer continuously refreshes the platform's internal representation of follower accounts. It is separate from the signal engine: signals create intent, while synchronization verifies actual account state.<\/div>\r\n<div class=\"sync-grid\">\r\n<div class=\"sync-stat\"><span>Connected Accounts<\/span><b>47<\/b><\/div>\r\n<div class=\"sync-stat\"><span>Healthy<\/span><b>45<\/b><\/div>\r\n<div class=\"sync-stat\"><span>Needs Review<\/span><b>2<\/b><\/div>\r\n<div class=\"sync-stat\"><span>Last Sync<\/span><b>22:14:05<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"sync-card\"><h3>State Synchronization Flow<\/h3>\r\n<div class=\"sync-flow\">\r\n<div class=\"sync-step\">Broker Connector<\/div><div class=\"sync-arrow\">\u2192<\/div>\r\n<div class=\"sync-step\">Account Snapshot<\/div><div class=\"sync-arrow\">\u2192<\/div>\r\n<div class=\"sync-step\">Normalize<\/div><div class=\"sync-arrow\">\u2192<\/div>\r\n<div class=\"sync-step\">Compare<\/div><div class=\"sync-arrow\">\u2192<\/div>\r\n<div class=\"sync-step\">Reconcile<\/div><div class=\"sync-arrow\">\u2192<\/div>\r\n<div class=\"sync-step\">Internal State<\/div>\r\n<\/div><\/div>\r\n<div class=\"sync-card\"><h3>What is synchronized?<\/h3>\r\n<table class=\"dash-table\"><thead><tr><th>State<\/th><th>Purpose<\/th><th>Frequency<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Account Balance<\/td><td>Risk and exposure calculations<\/td><td>Periodic<\/td><td><span class=\"sync-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>Open Positions<\/td><td>Copy state and reconciliation<\/td><td>Near real-time<\/td><td><span class=\"sync-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>Pending Orders<\/td><td>Execution tracking<\/td><td>Near real-time<\/td><td><span class=\"sync-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>Margin \/ Exposure<\/td><td>Safety guard evaluation<\/td><td>Periodic<\/td><td><span class=\"sync-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<\/tbody><\/table><\/div>\r\n<\/div>\r\n\r\n<div id=\"syncAccounts\" class=\"sync-section\">\r\n<div class=\"sync-card\"><h2>Connected Accounts<\/h2><div class=\"sync-desc\">Illustrative follower account health across connector types.<\/div>\r\n<div class=\"sync-account\"><div><div class=\"sync-account-main\">Primary Follower<\/div><div class=\"sync-account-meta\">ACC-10021 \u00b7 MT5 Connector<\/div><\/div><div>$10,000 equity<\/div><div>Last sync 22:14:05<\/div><span class=\"sync-badge ok\">HEALTHY<\/span><\/div>\r\n<div class=\"sync-account\"><div><div class=\"sync-account-main\">Follower B<\/div><div class=\"sync-account-meta\">ACC-10022 \u00b7 MT5 Connector<\/div><\/div><div>$5,000 equity<\/div><div>Last sync 22:14:04<\/div><span class=\"sync-badge ok\">HEALTHY<\/span><\/div>\r\n<div class=\"sync-account\"><div><div class=\"sync-account-main\">Follower C<\/div><div class=\"sync-account-meta\">ACC-10023 \u00b7 API Connector<\/div><\/div><div>$2,500 equity<\/div><div>Last sync 22:13:58<\/div><span class=\"sync-badge ok\">HEALTHY<\/span><\/div>\r\n<div class=\"sync-account\"><div><div class=\"sync-account-main\">Follower D<\/div><div class=\"sync-account-meta\">ACC-10024 \u00b7 API Connector<\/div><\/div><div>$1,000 equity<\/div><div>Last sync 21:58:12<\/div><span class=\"sync-badge warn\">STALE<\/span><\/div>\r\n<div class=\"sync-note\"><b>Privacy boundary:<\/b> the dashboard should expose only the minimum account information required by the user. Broker credentials, API secrets and connector tokens should never be rendered in this page.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"syncPositions\" class=\"sync-section\">\r\n<div class=\"sync-card\"><h2>Follower Positions<\/h2><div class=\"sync-desc\">Compare platform intent with the current broker-reported position state.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Account<\/th><th>Symbol<\/th><th>Side<\/th><th>Volume<\/th><th>Platform State<\/th><th>Broker State<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Primary Follower<\/td><td>XAUUSD<\/td><td>BUY<\/td><td>0.27<\/td><td>Open<\/td><td><span class=\"sync-badge ok\">MATCH<\/span><\/td><\/tr>\r\n<tr><td>Follower B<\/td><td>XAUUSD<\/td><td>BUY<\/td><td>0.07<\/td><td>Open<\/td><td><span class=\"sync-badge ok\">MATCH<\/span><\/td><\/tr>\r\n<tr><td>Follower C<\/td><td>US500<\/td><td>SELL<\/td><td>0.03<\/td><td>Closed<\/td><td><span class=\"sync-badge ok\">MATCH<\/span><\/td><\/tr>\r\n<tr><td>Follower D<\/td><td>XAUUSD<\/td><td>BUY<\/td><td>\u2014<\/td><td>Blocked<\/td><td><span class=\"sync-badge warn\">NO ORDER<\/span><\/td><\/tr>\r\n<\/tbody><\/table><\/div>\r\n<\/div>\r\n\r\n<div id=\"syncBalances\" class=\"sync-section\">\r\n<div class=\"sync-card\"><h2>Balance & Exposure Snapshot<\/h2><div class=\"sync-desc\">Illustrative account snapshots used by the risk layer.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Account<\/th><th>Balance<\/th><th>Equity<\/th><th>Margin Used<\/th><th>Exposure<\/th><th>Snapshot<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Primary Follower<\/td><td>$10,120<\/td><td>$10,000<\/td><td>$1,220<\/td><td>11.4%<\/td><td>22:14:05<\/td><\/tr>\r\n<tr><td>Follower B<\/td><td>$5,040<\/td><td>$5,000<\/td><td>$620<\/td><td>9.8%<\/td><td>22:14:04<\/td><\/tr>\r\n<tr><td>Follower C<\/td><td>$2,520<\/td><td>$2,500<\/td><td>$310<\/td><td>8.1%<\/td><td>22:13:58<\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"syncReconcile\" class=\"sync-section\">\r\n<div class=\"sync-card\"><h2>Reconciliation Center<\/h2><div class=\"sync-desc\">Exceptions are retained until the platform state and broker state are aligned or an operator resolves the difference.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Reference<\/th><th>Mismatch<\/th><th>Detected<\/th><th>Suggested Action<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>ACC-10024<\/td><td>Account snapshot stale<\/td><td>21:58<\/td><td>Refresh connector<\/td><td><span class=\"sync-badge warn\">OPEN<\/span><\/td><\/tr>\r\n<tr><td>REQ-77098<\/td><td>Volume differs from intent<\/td><td>21:42<\/td><td>Review execution<\/td><td><span class=\"sync-badge warn\">OPEN<\/span><\/td><\/tr>\r\n<tr><td>REQ-77091<\/td><td>Connector timeout<\/td><td>20:11<\/td><td>Verify broker state<\/td><td><span class=\"sync-badge ok\">RESOLVED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype synchronization refresh requested.')\">Run Sync<\/button><button class=\"btn\" onclick=\"alert('Prototype reconciliation queue refreshed.')\">Refresh Exceptions<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= SYMBOL MAPPING ================= -->\r\n<section id=\"symbolMappingPage\" class=\"hidden\">\r\n<div class=\"map-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Symbol Mapping<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Symbol Mapping<\/h1><div class=\"subtitle\">Normalize instruments and broker-specific symbol names before a copy request reaches execution.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"map-layout\">\r\n<aside class=\"map-nav\">\r\n<a class=\"active\" data-map-tab=\"overview\" onclick=\"mapTab('overview')\">Overview<\/a>\r\n<a data-map-tab=\"mappings\" onclick=\"mapTab('mappings')\">Mappings<\/a>\r\n<a data-map-tab=\"brokers\" onclick=\"mapTab('brokers')\">Broker Profiles<\/a>\r\n<a data-map-tab=\"rules\" onclick=\"mapTab('rules')\">Normalization Rules<\/a>\r\n<a data-map-tab=\"validation\" onclick=\"mapTab('validation')\">Validation<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"mapOverview\" class=\"map-section active\">\r\n<div class=\"map-card\"><h2>Symbol Mapping Overview<\/h2><div class=\"map-desc\">Cross-broker copy requires an instrument normalization layer. A strategy may publish one canonical instrument while individual brokers expose different symbol names, suffixes, contract sizes or trading constraints.<\/div>\r\n<div class=\"map-grid\">\r\n<div class=\"map-stat\"><span>Canonical Symbols<\/span><b>38<\/b><\/div>\r\n<div class=\"map-stat\"><span>Broker Profiles<\/span><b>7<\/b><\/div>\r\n<div class=\"map-stat\"><span>Active Mappings<\/span><b>214<\/b><\/div>\r\n<div class=\"map-stat\"><span>Needs Review<\/span><b>1<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"map-card\"><h3>Normalization Flow<\/h3>\r\n<div class=\"map-flow\">\r\n<div class=\"map-step\">Master Symbol<\/div><div class=\"map-arrow\">\u2192<\/div>\r\n<div class=\"map-step\">Canonical Instrument<\/div><div class=\"map-arrow\">\u2192<\/div>\r\n<div class=\"map-step\">Broker Profile<\/div><div class=\"map-arrow\">\u2192<\/div>\r\n<div class=\"map-step\">Follower Symbol<\/div><div class=\"map-arrow\">\u2192<\/div>\r\n<div class=\"map-step\">Contract Validation<\/div>\r\n<\/div><\/div>\r\n<div class=\"map-card\"><h3>Why this layer exists<\/h3>\r\n<table class=\"dash-table\"><thead><tr><th>Difference<\/th><th>Example<\/th><th>Required Handling<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Symbol name<\/td><td>XAUUSD \/ XAUUSD.a<\/td><td>Explicit mapping<\/td><\/tr>\r\n<tr><td>Contract size<\/td><td>100 \/ broker-specific<\/td><td>Contract metadata<\/td><\/tr>\r\n<tr><td>Volume step<\/td><td>0.01 \/ 0.10<\/td><td>Normalize and validate<\/td><\/tr>\r\n<tr><td>Minimum volume<\/td><td>0.01 \/ 0.10<\/td><td>Broker constraint check<\/td><\/tr>\r\n<tr><td>Trading session<\/td><td>Different market hours<\/td><td>Session eligibility<\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"mapMappings\" class=\"map-section\">\r\n<div class=\"map-card\"><h2>Active Mappings<\/h2><div class=\"map-desc\">Illustrative mappings from canonical MQLPro instruments to broker-specific symbols.<\/div>\r\n<div class=\"map-row\"><div><div class=\"map-main\">XAUUSD<\/div><div class=\"map-meta\">Canonical \u00b7 Gold Spot<\/div><\/div><div>XAUUSD.a<\/div><div>MT5 Profile A<\/div><span class=\"map-badge ok\">VALID<\/span><\/div>\r\n<div class=\"map-row\"><div><div class=\"map-main\">XAUUSD<\/div><div class=\"map-meta\">Canonical \u00b7 Gold Spot<\/div><\/div><div>GOLD<\/div><div>API Profile B<\/div><span class=\"map-badge ok\">VALID<\/span><\/div>\r\n<div class=\"map-row\"><div><div class=\"map-main\">EURUSD<\/div><div class=\"map-meta\">Canonical \u00b7 Euro \/ US Dollar<\/div><\/div><div>EURUSDm<\/div><div>MT5 Profile A<\/div><span class=\"map-badge ok\">VALID<\/span><\/div>\r\n<div class=\"map-row\"><div><div class=\"map-main\">US500<\/div><div class=\"map-meta\">Canonical \u00b7 US Equity Index<\/div><\/div><div>SPX500.cash<\/div><div>API Profile B<\/div><span class=\"map-badge warn\">REVIEW<\/span><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"mapBrokers\" class=\"map-section\">\r\n<div class=\"map-card\"><h2>Broker Profiles<\/h2><div class=\"map-desc\">A broker profile stores non-secret trading metadata required for safe normalization and execution validation.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Profile<\/th><th>Connector<\/th><th>Symbols<\/th><th>Metadata<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>MT5 Profile A<\/td><td>MT5<\/td><td>82<\/td><td>Complete<\/td><td><span class=\"map-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>API Profile B<\/td><td>Broker API<\/td><td>61<\/td><td>Complete<\/td><td><span class=\"map-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>MT5 Profile C<\/td><td>MT5<\/td><td>43<\/td><td>Complete<\/td><td><span class=\"map-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>API Profile D<\/td><td>Broker API<\/td><td>28<\/td><td>1 missing<\/td><td><span class=\"map-badge warn\">REVIEW<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"map-note\"><b>Security boundary:<\/b> broker credentials, API keys and login secrets are connector secrets. They should be stored in the backend\/secret store and never included in the symbol-mapping payload rendered to the browser.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"mapRules\" class=\"map-section\">\r\n<div class=\"map-card\"><h2>Normalization Rules<\/h2><div class=\"map-desc\">Rules define how canonical instruments are translated into broker-specific execution parameters.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Rule<\/th><th>Purpose<\/th><th>Example<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Alias Mapping<\/td><td>Translate symbol aliases<\/td><td>XAUUSD \u2192 XAUUSD.a<\/td><td><span class=\"map-badge ok\">ENABLED<\/span><\/td><\/tr>\r\n<tr><td>Volume Step<\/td><td>Round to broker step<\/td><td>0.273 \u2192 0.27<\/td><td><span class=\"map-badge ok\">ENABLED<\/span><\/td><\/tr>\r\n<tr><td>Minimum Volume<\/td><td>Reject unsupported size<\/td><td>0.03 below 0.10 \u2192 reject<\/td><td><span class=\"map-badge ok\">ENABLED<\/span><\/td><\/tr>\r\n<tr><td>Contract Size<\/td><td>Normalize sizing calculation<\/td><td>100 units<\/td><td><span class=\"map-badge ok\">ENABLED<\/span><\/td><\/tr>\r\n<tr><td>Session Check<\/td><td>Prevent closed-market requests<\/td><td>Outside trading session<\/td><td><span class=\"map-badge ok\">ENABLED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"mapValidation\" class=\"map-section\">\r\n<div class=\"map-card\"><h2>Mapping Validation<\/h2><div class=\"map-desc\">Every execution request should pass instrument validation before entering the connector.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Check<\/th><th>Result<\/th><th>Details<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Canonical symbol exists<\/td><td class=\"status-active\">PASS<\/td><td>XAUUSD registered<\/td><\/tr>\r\n<tr><td>Follower symbol mapped<\/td><td class=\"status-active\">PASS<\/td><td>XAUUSD.a<\/td><\/tr>\r\n<tr><td>Contract metadata<\/td><td class=\"status-active\">PASS<\/td><td>Available<\/td><\/tr>\r\n<tr><td>Volume constraints<\/td><td class=\"status-active\">PASS<\/td><td>Step 0.01<\/td><\/tr>\r\n<tr><td>Trading session<\/td><td class=\"status-active\">PASS<\/td><td>Open<\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype mapping validation completed.')\">Run Validation<\/button><button class=\"btn\" onclick=\"alert('Prototype mapping cache refreshed.')\">Refresh Mapping Cache<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= COPY POLICIES & SAFETY RULES ================= -->\r\n<section id=\"copyPoliciesPage\" class=\"hidden\">\r\n<div class=\"policy-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Copy Policies<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Copy Policies<\/h1><div class=\"subtitle\">Define how a follower subscription may translate a strategy signal into an eligible copy instruction.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"policy-layout\">\r\n<aside class=\"policy-nav\">\r\n<a class=\"active\" data-policy-tab=\"overview\" onclick=\"policyTab('overview')\">Overview<\/a>\r\n<a data-policy-tab=\"rules\" onclick=\"policyTab('rules')\">Safety Rules<\/a>\r\n<a data-policy-tab=\"allocation\" onclick=\"policyTab('allocation')\">Allocation Policy<\/a>\r\n<a data-policy-tab=\"limits\" onclick=\"policyTab('limits')\">Exposure Limits<\/a>\r\n<a data-policy-tab=\"emergency\" onclick=\"policyTab('emergency')\">Emergency Controls<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"policyOverview\" class=\"policy-section active\">\r\n<div class=\"policy-card\"><h2>Copy Policy Overview<\/h2><div class=\"policy-desc\">Policies sit between a published strategy and the execution queue. They determine whether a signal is eligible for a specific follower before sizing and broker execution occur.<\/div>\r\n<div class=\"policy-grid\">\r\n<div class=\"policy-stat\"><span>Active Policies<\/span><b>32<\/b><\/div>\r\n<div class=\"policy-stat\"><span>Protected Accounts<\/span><b>47<\/b><\/div>\r\n<div class=\"policy-stat\"><span>Rules Evaluated Today<\/span><b>4,821<\/b><\/div>\r\n<div class=\"policy-stat\"><span>Blocked Requests<\/span><b>17<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"policy-card\"><h3>Policy Evaluation Flow<\/h3>\r\n<div class=\"policy-flow\">\r\n<div class=\"policy-step\">Signal<\/div><div class=\"policy-arrow\">\u2192<\/div>\r\n<div class=\"policy-step\">Subscription<\/div><div class=\"policy-arrow\">\u2192<\/div>\r\n<div class=\"policy-step\">Safety Rules<\/div><div class=\"policy-arrow\">\u2192<\/div>\r\n<div class=\"policy-step\">Allocation<\/div><div class=\"policy-arrow\">\u2192<\/div>\r\n<div class=\"policy-step\">Exposure Limit<\/div><div class=\"policy-arrow\">\u2192<\/div>\r\n<div class=\"policy-step\">Execution<\/div>\r\n<\/div><\/div>\r\n<div class=\"policy-card\"><h3>Policy Principles<\/h3>\r\n<table class=\"dash-table\"><thead><tr><th>Principle<\/th><th>Purpose<\/th><th>Example<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Explicit opt-in<\/td><td>Only subscribed accounts receive copies<\/td><td>Active subscription required<\/td><\/tr>\r\n<tr><td>Risk bounded<\/td><td>Respect account-level limits<\/td><td>Maximum DD \/ exposure<\/td><\/tr>\r\n<tr><td>Broker aware<\/td><td>Respect follower constraints<\/td><td>Volume and session checks<\/td><\/tr>\r\n<tr><td>Fail closed<\/td><td>Reject uncertain requests<\/td><td>Missing mapping \u2192 block<\/td><\/tr>\r\n<\/tbody><\/table><\/div>\r\n<\/div>\r\n\r\n<div id=\"policyRules\" class=\"policy-section\">\r\n<div class=\"policy-card\"><h2>Safety Rules<\/h2><div class=\"policy-desc\">Rules that can stop a copy request before it reaches the execution layer.<\/div>\r\n<div class=\"policy-rule\"><div><div class=\"policy-rule-main\">Maximum Drawdown Guard<\/div><div class=\"policy-rule-meta\">Block new exposure when configured account drawdown threshold is reached.<\/div><\/div><div>10%<\/div><span class=\"policy-badge ok\">ENABLED<\/span><\/div>\r\n<div class=\"policy-rule\"><div><div class=\"policy-rule-main\">Maximum Exposure<\/div><div class=\"policy-rule-meta\">Prevent new positions when total strategy exposure exceeds the account policy.<\/div><\/div><div>25%<\/div><span class=\"policy-badge ok\">ENABLED<\/span><\/div>\r\n<div class=\"policy-rule\"><div><div class=\"policy-rule-main\">Daily Loss Guard<\/div><div class=\"policy-rule-meta\">Stop eligible new requests after the configured daily loss limit.<\/div><\/div><div>3%<\/div><span class=\"policy-badge ok\">ENABLED<\/span><\/div>\r\n<div class=\"policy-rule\"><div><div class=\"policy-rule-main\">Symbol Eligibility<\/div><div class=\"policy-rule-meta\">Reject symbols not mapped or explicitly permitted for the follower.<\/div><\/div><div>Strict<\/div><span class=\"policy-badge ok\">ENABLED<\/span><\/div>\r\n<div class=\"policy-rule\"><div><div class=\"policy-rule-main\">Trading Session<\/div><div class=\"policy-rule-meta\">Reject requests outside the follower broker's supported session.<\/div><\/div><div>Broker<\/div><span class=\"policy-badge ok\">ENABLED<\/span><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"policyAllocation\" class=\"policy-section\">\r\n<div class=\"policy-card\"><h2>Allocation Policy<\/h2><div class=\"policy-desc\">Choose the sizing model applied after a request passes subscription and safety checks.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Mode<\/th><th>Calculation Basis<\/th><th>Use Case<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Proportional Equity<\/td><td>Follower equity \/ reference equity<\/td><td>Scale strategy exposure<\/td><td><span class=\"policy-badge ok\">AVAILABLE<\/span><\/td><\/tr>\r\n<tr><td>Risk Percentage<\/td><td>Target risk per position<\/td><td>Risk-normalized copying<\/td><td><span class=\"policy-badge ok\">AVAILABLE<\/span><\/td><\/tr>\r\n<tr><td>Fixed Lot<\/td><td>Configured volume<\/td><td>Simple volume policy<\/td><td><span class=\"policy-badge ok\">AVAILABLE<\/span><\/td><\/tr>\r\n<tr><td>Multiplier<\/td><td>Base size \u00d7 multiplier<\/td><td>Controlled scaling<\/td><td><span class=\"policy-badge ok\">AVAILABLE<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"policy-note\"><b>Important:<\/b> allocation is a calculation policy, not a guarantee of identical broker exposure. Contract size, leverage, minimum volume, volume step and execution conditions must still be validated by the broker profile.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"policyLimits\" class=\"policy-section\">\r\n<div class=\"policy-card\"><h2>Exposure Limits<\/h2><div class=\"policy-desc\">Account-level and strategy-level limits provide a second control layer after position sizing.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Limit<\/th><th>Configured<\/th><th>Current<\/th><th>Action<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Strategy Exposure<\/td><td>25%<\/td><td>11.4%<\/td><td><span class=\"policy-badge ok\">ALLOW<\/span><\/td><\/tr>\r\n<tr><td>Symbol Exposure<\/td><td>15%<\/td><td>8.2%<\/td><td><span class=\"policy-badge ok\">ALLOW<\/span><\/td><\/tr>\r\n<tr><td>Daily Loss<\/td><td>3%<\/td><td>0.7%<\/td><td><span class=\"policy-badge ok\">ALLOW<\/span><\/td><\/tr>\r\n<tr><td>Open Positions<\/td><td>20<\/td><td>7<\/td><td><span class=\"policy-badge ok\">ALLOW<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"policyEmergency\" class=\"policy-section\">\r\n<div class=\"policy-card\"><h2>Emergency Controls<\/h2><div class=\"policy-desc\">Operational controls for temporarily stopping new copy instructions. Existing broker positions are not automatically altered by these controls unless a separate close-position policy is explicitly implemented.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Control<\/th><th>Current State<\/th><th>Effect<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Global Copy Pause<\/td><td><span class=\"policy-badge ok\">OFF<\/span><\/td><td>Stops new copy requests globally<\/td><\/tr>\r\n<tr><td>Strategy Pause<\/td><td><span class=\"policy-badge ok\">OFF<\/span><\/td><td>Stops a selected strategy<\/td><\/tr>\r\n<tr><td>Account Pause<\/td><td><span class=\"policy-badge ok\">OFF<\/span><\/td><td>Stops copying to selected follower<\/td><\/tr>\r\n<tr><td>New Exposure Lock<\/td><td><span class=\"policy-badge ok\">OFF<\/span><\/td><td>Blocks new positions while allowing state sync<\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype: global copy pause control opened.')\">Global Pause<\/button><button class=\"btn\" onclick=\"alert('Prototype: exposure lock control opened.')\">Exposure Lock<\/button><\/div>\r\n<div class=\"policy-note\"><b>Production requirement:<\/b> emergency controls should be enforced server-side. A browser-only toggle is not a reliable trading safety mechanism.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= SUBSCRIPTION & BILLING ================= -->\r\n<section id=\"billingPage\" class=\"hidden\">\r\n<div class=\"bill-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Subscription & Billing<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Subscription & Billing<\/h1><div class=\"subtitle\">Manage signal subscriptions, billing status and copy-trading entitlements.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"bill-layout\">\r\n<aside class=\"bill-nav\">\r\n<a class=\"active\" data-bill-tab=\"overview\" onclick=\"billTab('overview')\">Overview<\/a>\r\n<a data-bill-tab=\"subscriptions\" onclick=\"billTab('subscriptions')\">Subscriptions<\/a>\r\n<a data-bill-tab=\"plans\" onclick=\"billTab('plans')\">Plans<\/a>\r\n<a data-bill-tab=\"invoices\" onclick=\"billTab('invoices')\">Invoices<\/a>\r\n<a data-bill-tab=\"entitlements\" onclick=\"billTab('entitlements')\">Entitlements<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"billOverview\" class=\"bill-section active\">\r\n<div class=\"bill-card\"><h2>Subscription & Billing Overview<\/h2><div class=\"bill-desc\">Billing determines whether a user has an active commercial entitlement to copy a selected signal. Payment state and trading authorization should remain separate backend concepts.<\/div>\r\n<div class=\"bill-grid\">\r\n<div class=\"bill-stat\"><span>Active Subscriptions<\/span><b>84<\/b><\/div>\r\n<div class=\"bill-stat\"><span>Monthly Recurring<\/span><b>$8,420<\/b><\/div>\r\n<div class=\"bill-stat\"><span>Pending Renewal<\/span><b>6<\/b><\/div>\r\n<div class=\"bill-stat\"><span>Payment Issues<\/span><b>2<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"bill-card\"><h3>Entitlement Flow<\/h3>\r\n<div class=\"bill-flow\">\r\n<div class=\"bill-step\">Signal Selected<\/div><div class=\"bill-arrow\">\u2192<\/div>\r\n<div class=\"bill-step\">Checkout<\/div><div class=\"bill-arrow\">\u2192<\/div>\r\n<div class=\"bill-step\">Payment<\/div><div class=\"bill-arrow\">\u2192<\/div>\r\n<div class=\"bill-step\">Subscription<\/div><div class=\"bill-arrow\">\u2192<\/div>\r\n<div class=\"bill-step\">Entitlement<\/div><div class=\"bill-arrow\">\u2192<\/div>\r\n<div class=\"bill-step\">Copy Eligible<\/div>\r\n<\/div><\/div>\r\n<div class=\"bill-card\"><h3>Billing States<\/h3>\r\n<table class=\"dash-table\"><thead><tr><th>State<\/th><th>Meaning<\/th><th>Copy Access<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Active<\/td><td>Paid and within subscription period<\/td><td><span class=\"bill-badge ok\">ELIGIBLE<\/span><\/td><\/tr>\r\n<tr><td>Pending<\/td><td>Payment or activation not finalized<\/td><td><span class=\"bill-badge warn\">HOLD<\/span><\/td><\/tr>\r\n<tr><td>Past Due<\/td><td>Renewal payment requires attention<\/td><td><span class=\"bill-badge warn\">POLICY<\/span><\/td><\/tr>\r\n<tr><td>Cancelled \/ Expired<\/td><td>Entitlement period ended<\/td><td><span class=\"bill-badge fail\">NOT ELIGIBLE<\/span><\/td><\/tr>\r\n<\/tbody><\/table><\/div>\r\n<\/div>\r\n\r\n<div id=\"billSubscriptions\" class=\"bill-section\">\r\n<div class=\"bill-card\"><h2>Active Subscriptions<\/h2><div class=\"bill-desc\">Subscriptions connect a user to a signal product and its commercial terms.<\/div>\r\n<div class=\"bill-plan\"><div><div class=\"bill-main\">Alpha Trend<\/div><div class=\"bill-meta\">SUB-10421 \u00b7 Monthly \u00b7 Next renewal 01 Oct 2026<\/div><\/div><div>$99\/mo<\/div><div>Auto renewal<\/div><span class=\"bill-badge ok\">ACTIVE<\/span><\/div>\r\n<div class=\"bill-plan\"><div><div class=\"bill-main\">Gold Momentum<\/div><div class=\"bill-meta\">SUB-10418 \u00b7 Monthly \u00b7 Next renewal 28 Sep 2026<\/div><\/div><div>$129\/mo<\/div><div>Auto renewal<\/div><span class=\"bill-badge ok\">ACTIVE<\/span><\/div>\r\n<div class=\"bill-plan\"><div><div class=\"bill-main\">Index Pulse<\/div><div class=\"bill-meta\">SUB-10402 \u00b7 Quarterly \u00b7 Ends 12 Nov 2026<\/div><\/div><div>$249\/qtr<\/div><div>Manual renewal<\/div><span class=\"bill-badge ok\">ACTIVE<\/span><\/div>\r\n<div class=\"bill-plan\"><div><div class=\"bill-main\">EUR Scalper<\/div><div class=\"bill-meta\">SUB-10387 \u00b7 Monthly \u00b7 Payment requires attention<\/div><\/div><div>$79\/mo<\/div><div>Renewal failed<\/div><span class=\"bill-badge warn\">PAST DUE<\/span><\/div>\r\n<div class=\"bill-actions\"><button class=\"btn\" onclick=\"alert('Prototype subscription management opened.')\">Manage Subscription<\/button><button class=\"btn\" onclick=\"alert('Prototype renewal action opened.')\">Renew<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"billPlans\" class=\"bill-section\">\r\n<div class=\"bill-card\"><h2>Signal Plans<\/h2><div class=\"bill-desc\">Commercial plans are separate from the strategy's performance and risk metrics.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Plan<\/th><th>Billing<\/th><th>Price<\/th><th>Copy Entitlement<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Alpha Trend Standard<\/td><td>Monthly<\/td><td>$99<\/td><td>1 strategy<\/td><td><span class=\"bill-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>Alpha Trend Pro<\/td><td>Monthly<\/td><td>$149<\/td><td>3 strategies<\/td><td><span class=\"bill-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>Portfolio Access<\/td><td>Monthly<\/td><td>$249<\/td><td>10 strategies<\/td><td><span class=\"bill-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>Trial<\/td><td>Limited<\/td><td>$0<\/td><td>Read-only \/ configured trial<\/td><td><span class=\"bill-badge warn\">LIMITED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"bill-note\"><b>Architecture rule:<\/b> the frontend should never decide that payment equals trading authorization. A backend entitlement service should validate subscription status, product scope, expiry and any account-specific conditions before copy eligibility is granted.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"billInvoices\" class=\"bill-section\">\r\n<div class=\"bill-card\"><h2>Invoices & Payments<\/h2><div class=\"bill-desc\">Illustrative billing records. Payment provider references should be stored securely and only safe display fields exposed here.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Invoice<\/th><th>Subscription<\/th><th>Amount<\/th><th>Date<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>INV-2026-09121<\/td><td>Alpha Trend<\/td><td>$99<\/td><td>01 Sep 2026<\/td><td><span class=\"bill-badge ok\">PAID<\/span><\/td><\/tr>\r\n<tr><td>INV-2026-09118<\/td><td>Gold Momentum<\/td><td>$129<\/td><td>28 Aug 2026<\/td><td><span class=\"bill-badge ok\">PAID<\/span><\/td><\/tr>\r\n<tr><td>INV-2026-09103<\/td><td>EUR Scalper<\/td><td>$79<\/td><td>01 Sep 2026<\/td><td><span class=\"bill-badge warn\">PAST DUE<\/span><\/td><\/tr>\r\n<tr><td>INV-2026-09088<\/td><td>Index Pulse<\/td><td>$249<\/td><td>12 Aug 2026<\/td><td><span class=\"bill-badge ok\">PAID<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"bill-actions\"><button class=\"btn\" onclick=\"alert('Prototype invoice export requested.')\">Export Invoices<\/button><button class=\"btn\" onclick=\"alert('Prototype payment reconciliation requested.')\">Reconcile Payments<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"billEntitlements\" class=\"bill-section\">\r\n<div class=\"bill-card\"><h2>Copy Entitlements<\/h2><div class=\"bill-desc\">Entitlement is the final authorization state consumed by the copy engine. It should be independently queryable and auditable.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>User \/ Account<\/th><th>Signal<\/th><th>Subscription<\/th><th>Expires<\/th><th>Copy Access<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Primary Follower<\/td><td>Alpha Trend<\/td><td>SUB-10421<\/td><td>01 Oct 2026<\/td><td><span class=\"bill-badge ok\">GRANTED<\/span><\/td><\/tr>\r\n<tr><td>Follower B<\/td><td>Gold Momentum<\/td><td>SUB-10418<\/td><td>28 Sep 2026<\/td><td><span class=\"bill-badge ok\">GRANTED<\/span><\/td><\/tr>\r\n<tr><td>Follower C<\/td><td>Index Pulse<\/td><td>SUB-10402<\/td><td>12 Nov 2026<\/td><td><span class=\"bill-badge ok\">GRANTED<\/span><\/td><\/tr>\r\n<tr><td>Follower D<\/td><td>EUR Scalper<\/td><td>SUB-10387<\/td><td>01 Sep 2026<\/td><td><span class=\"bill-badge fail\">SUSPENDED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"bill-note\"><b>Copy eligibility check:<\/b> entitlement should be evaluated together with risk policy, broker connectivity, symbol mapping and account safety state. An active subscription alone does not override a safety block.<\/div>\r\n<div class=\"bill-actions\"><button class=\"btn\" onclick=\"alert('Prototype entitlement refresh requested.')\">Refresh Entitlements<\/button><button class=\"btn\" onclick=\"alert('Prototype entitlement audit opened.')\">Audit Log<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= WEBHOOK & SIGNAL INTAKE ================= -->\r\n<section id=\"signalIntakePage\" class=\"hidden\">\r\n<div class=\"intake-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Signal Intake<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Signal Intake Gateway<\/h1><div class=\"subtitle\">Receive, validate, deduplicate and normalize external strategy events before they enter the MQLPro signal engine.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"intake-layout\">\r\n<aside class=\"intake-nav\">\r\n<a class=\"active\" data-intake-tab=\"overview\" onclick=\"intakeTab('overview')\">Overview<\/a>\r\n<a data-intake-tab=\"endpoints\" onclick=\"intakeTab('endpoints')\">Endpoints<\/a>\r\n<a data-intake-tab=\"events\" onclick=\"intakeTab('events')\">Event Log<\/a>\r\n<a data-intake-tab=\"validation\" onclick=\"intakeTab('validation')\">Validation<\/a>\r\n<a data-intake-tab=\"security\" onclick=\"intakeTab('security')\">Security<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"intakeOverview\" class=\"intake-section active\">\r\n<div class=\"intake-card\"><h2>Signal Intake Overview<\/h2><div class=\"intake-desc\">The intake gateway is the boundary between external strategy providers and the internal copy-trading pipeline. It should accept only authenticated, schema-valid events and assign a unique event identity before processing.<\/div>\r\n<div class=\"intake-grid\">\r\n<div class=\"intake-stat\"><span>Active Endpoints<\/span><b>12<\/b><\/div>\r\n<div class=\"intake-stat\"><span>Events Today<\/span><b>18,421<\/b><\/div>\r\n<div class=\"intake-stat\"><span>Accepted<\/span><b>18,307<\/b><\/div>\r\n<div class=\"intake-stat\"><span>Rejected<\/span><b>114<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"intake-card\"><h3>Signal Intake Flow<\/h3>\r\n<div class=\"intake-flow\">\r\n<div class=\"intake-step\">External Provider<\/div><div class=\"intake-arrow\">\u2192<\/div>\r\n<div class=\"intake-step\">Webhook \/ API<\/div><div class=\"intake-arrow\">\u2192<\/div>\r\n<div class=\"intake-step\">Authentication<\/div><div class=\"intake-arrow\">\u2192<\/div>\r\n<div class=\"intake-step\">Schema Validation<\/div><div class=\"intake-arrow\">\u2192<\/div>\r\n<div class=\"intake-step\">Deduplication<\/div><div class=\"intake-arrow\">\u2192<\/div>\r\n<div class=\"intake-step\">Canonical Event<\/div><div class=\"intake-arrow\">\u2192<\/div>\r\n<div class=\"intake-step\">Signal Engine<\/div>\r\n<\/div><\/div>\r\n<div class=\"intake-card\"><h3>Canonical Event Contract<\/h3>\r\n<div class=\"intake-code\">{\r\n  \"event_id\": \"evt_01J...\",\r\n  \"strategy_id\": \"strategy_alpha\",\r\n  \"instrument\": \"XAUUSD\",\r\n  \"action\": \"OPEN\",\r\n  \"direction\": \"BUY\",\r\n  \"timestamp\": \"2026-09-16T14:32:11Z\",\r\n  \"source\": \"provider_a\"\r\n}<\/div>\r\n<div class=\"intake-note\"><b>Production rule:<\/b> the intake gateway should treat the event ID as an idempotency key. A repeated event must not create a second copy instruction.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"intakeEndpoints\" class=\"intake-section\">\r\n<div class=\"intake-card\"><h2>Signal Endpoints<\/h2><div class=\"intake-desc\">Endpoints represent controlled ingestion channels. Secrets and signing keys are never rendered in the browser.<\/div>\r\n<div class=\"intake-endpoint\"><div><div class=\"intake-main\">Strategy Alpha Webhook<\/div><div class=\"intake-meta\">POST \u00b7 \/v1\/signals\/alpha \u00b7 HMAC signature<\/div><\/div><div>18,102 events<\/div><div>Last: 14:32 UTC<\/div><span class=\"intake-badge ok\">ACTIVE<\/span><\/div>\r\n<div class=\"intake-endpoint\"><div><div class=\"intake-main\">Gold Momentum API<\/div><div class=\"intake-meta\">POST \u00b7 \/v1\/signals\/gold \u00b7 API key + timestamp<\/div><\/div><div>6,841 events<\/div><div>Last: 14:31 UTC<\/div><span class=\"intake-badge ok\">ACTIVE<\/span><\/div>\r\n<div class=\"intake-endpoint\"><div><div class=\"intake-main\">Index Pulse Webhook<\/div><div class=\"intake-meta\">POST \u00b7 \/v1\/signals\/index \u00b7 HMAC signature<\/div><\/div><div>3,214 events<\/div><div>Last: 14:29 UTC<\/div><span class=\"intake-badge ok\">ACTIVE<\/span><\/div>\r\n<div class=\"intake-endpoint\"><div><div class=\"intake-main\">Legacy Connector<\/div><div class=\"intake-meta\">POST \u00b7 \/v1\/legacy\/signals \u00b7 migration pending<\/div><\/div><div>264 events<\/div><div>Last: 11:02 UTC<\/div><span class=\"intake-badge warn\">REVIEW<\/span><\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype endpoint creation opened.')\">Create Endpoint<\/button><button class=\"btn\" onclick=\"alert('Prototype endpoint rotation opened.')\">Rotate Secret<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"intakeEvents\" class=\"intake-section\">\r\n<div class=\"intake-card\"><h2>Event Log<\/h2><div class=\"intake-desc\">Operational view of received events and their intake disposition.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Event ID<\/th><th>Source<\/th><th>Instrument<\/th><th>Action<\/th><th>Received<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>evt_8F21A<\/td><td>Strategy Alpha<\/td><td>XAUUSD<\/td><td>OPEN BUY<\/td><td>14:32:11<\/td><td><span class=\"intake-badge ok\">ACCEPTED<\/span><\/td><\/tr>\r\n<tr><td>evt_8F219<\/td><td>Strategy Alpha<\/td><td>EURUSD<\/td><td>CLOSE<\/td><td>14:31:48<\/td><td><span class=\"intake-badge ok\">ACCEPTED<\/span><\/td><\/tr>\r\n<tr><td>evt_8F217<\/td><td>Gold Momentum<\/td><td>XAUUSD<\/td><td>OPEN SELL<\/td><td>14:30:02<\/td><td><span class=\"intake-badge warn\">DUPLICATE<\/span><\/td><\/tr>\r\n<tr><td>evt_8F211<\/td><td>Legacy Connector<\/td><td>US500<\/td><td>OPEN BUY<\/td><td>14:27:39<\/td><td><span class=\"intake-badge fail\">REJECTED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"intakeValidation\" class=\"intake-section\">\r\n<div class=\"intake-card\"><h2>Validation Pipeline<\/h2><div class=\"intake-desc\">Validation should happen before an event becomes an internal signal instruction.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Check<\/th><th>Purpose<\/th><th>Example Result<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Authentication<\/td><td>Verify source identity\/signature<\/td><td class=\"status-active\">PASS<\/td><\/tr>\r\n<tr><td>Timestamp Window<\/td><td>Reject stale or replayed requests<\/td><td class=\"status-active\">PASS<\/td><\/tr>\r\n<tr><td>Schema<\/td><td>Require valid event structure<\/td><td class=\"status-active\">PASS<\/td><\/tr>\r\n<tr><td>Idempotency<\/td><td>Prevent duplicate processing<\/td><td class=\"status-active\">PASS<\/td><\/tr>\r\n<tr><td>Strategy State<\/td><td>Confirm strategy is allowed to publish<\/td><td class=\"status-active\">PASS<\/td><\/tr>\r\n<tr><td>Instrument<\/td><td>Confirm canonical symbol exists<\/td><td class=\"status-active\">PASS<\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype validation replay started.')\">Test Validation<\/button><button class=\"btn\" onclick=\"alert('Prototype event replay opened.')\">Replay Safe Event<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"intakeSecurity\" class=\"intake-section\">\r\n<div class=\"intake-card\"><h2>Intake Security<\/h2><div class=\"intake-desc\">The gateway should be treated as a security boundary. Authentication, replay protection and rate controls belong on the server.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Control<\/th><th>Configuration<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Request Signing<\/td><td>HMAC \/ provider signature<\/td><td><span class=\"intake-badge ok\">ENABLED<\/span><\/td><\/tr>\r\n<tr><td>Timestamp Validation<\/td><td>\u00b1 5 minutes<\/td><td><span class=\"intake-badge ok\">ENABLED<\/span><\/td><\/tr>\r\n<tr><td>Idempotency<\/td><td>Event ID required<\/td><td><span class=\"intake-badge ok\">ENABLED<\/span><\/td><\/tr>\r\n<tr><td>Rate Limiting<\/td><td>Provider-specific<\/td><td><span class=\"intake-badge ok\">ENABLED<\/span><\/td><\/tr>\r\n<tr><td>Secret Storage<\/td><td>Server-side secret store<\/td><td><span class=\"intake-badge ok\">REQUIRED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"intake-note\"><b>Do not expose:<\/b> API keys, webhook signing secrets, broker credentials, private connector tokens or raw authentication headers in frontend HTML or client-side JavaScript.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= COPY ORCHESTRATOR ================= -->\r\n<section id=\"copyOrchestratorPage\" class=\"hidden\">\r\n<div class=\"orch-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Copy Orchestrator<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Copy Orchestrator<\/h1><div class=\"subtitle\">Coordinate an approved signal from intake through follower order lifecycle, with deterministic state transitions and reconciliation.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"orch-layout\">\r\n<aside class=\"orch-nav\">\r\n<a class=\"active\" data-orch-tab=\"overview\" onclick=\"orchTab('overview')\">Overview<\/a>\r\n<a data-orch-tab=\"lifecycle\" onclick=\"orchTab('lifecycle')\">Order Lifecycle<\/a>\r\n<a data-orch-tab=\"requests\" onclick=\"orchTab('requests')\">Copy Requests<\/a>\r\n<a data-orch-tab=\"retries\" onclick=\"orchTab('retries')\">Retries & Recovery<\/a>\r\n<a data-orch-tab=\"reconciliation\" onclick=\"orchTab('reconciliation')\">Reconciliation<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"orchOverview\" class=\"orch-section active\">\r\n<div class=\"orch-card\"><h2>Copy Orchestrator Overview<\/h2><div class=\"orch-desc\">The orchestrator coordinates already-validated instructions. It should not blindly mirror a broker order; it creates an auditable lifecycle for each follower request and preserves idempotency across retries.<\/div>\r\n<div class=\"orch-grid\">\r\n<div class=\"orch-stat\"><span>Requests Today<\/span><b>4,821<\/b><\/div>\r\n<div class=\"orch-stat\"><span>Executed<\/span><b>4,674<\/b><\/div>\r\n<div class=\"orch-stat\"><span>In Flight<\/span><b>23<\/b><\/div>\r\n<div class=\"orch-stat\"><span>Exceptions<\/span><b>7<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"orch-card\"><h3>Copy Lifecycle<\/h3>\r\n<div class=\"orch-flow\">\r\n<div class=\"orch-step\">Canonical Signal<\/div><div class=\"orch-arrow\">\u2192<\/div>\r\n<div class=\"orch-step\">Eligibility<\/div><div class=\"orch-arrow\">\u2192<\/div>\r\n<div class=\"orch-step\">Risk \/ Allocation<\/div><div class=\"orch-arrow\">\u2192<\/div>\r\n<div class=\"orch-step\">Symbol Mapping<\/div><div class=\"orch-arrow\">\u2192<\/div>\r\n<div class=\"orch-step\">Copy Request<\/div><div class=\"orch-arrow\">\u2192<\/div>\r\n<div class=\"orch-step\">Broker Execution<\/div><div class=\"orch-arrow\">\u2192<\/div>\r\n<div class=\"orch-step\">Broker Result<\/div><div class=\"orch-arrow\">\u2192<\/div>\r\n<div class=\"orch-step\">Reconcile<\/div>\r\n<\/div><\/div>\r\n<div class=\"orch-card\"><h3>State Model<\/h3>\r\n<table class=\"dash-table\"><thead><tr><th>State<\/th><th>Meaning<\/th><th>Next Transition<\/th><\/tr><\/thead><tbody>\r\n<tr><td>RECEIVED<\/td><td>Canonical signal accepted<\/td><td>ELIGIBILITY_CHECK<\/td><\/tr>\r\n<tr><td>ELIGIBLE<\/td><td>Follower passed policy checks<\/td><td>QUEUED<\/td><\/tr>\r\n<tr><td>QUEUED<\/td><td>Waiting for connector execution<\/td><td>SUBMITTED<\/td><\/tr>\r\n<tr><td>SUBMITTED<\/td><td>Broker request sent<\/td><td>EXECUTED \/ REJECTED<\/td><\/tr>\r\n<tr><td>EXECUTED<\/td><td>Broker acknowledged execution<\/td><td>RECONCILED<\/td><\/tr>\r\n<tr><td>EXCEPTION<\/td><td>Unexpected or unresolved state<\/td><td>RECOVERY \/ REVIEW<\/td><\/tr>\r\n<\/tbody><\/table><\/div>\r\n<\/div>\r\n\r\n<div id=\"orchLifecycle\" class=\"orch-section\">\r\n<div class=\"orch-card\"><h2>Order Lifecycle<\/h2><div class=\"orch-desc\">A copy request gets its own lifecycle ID so the system can distinguish a signal event, a follower request and the broker's resulting order\/deal.<\/div>\r\n<div class=\"orch-order\"><div><div class=\"orch-main\">COPY-8F21-001 \u00b7 Alpha \/ Follower A<\/div><div class=\"orch-meta\">XAUUSD \u00b7 BUY \u00b7 target 0.27 lot<\/div><\/div><div>14:32:11<\/div><div>Broker: MT5-A<\/div><span class=\"orch-badge ok\">RECONCILED<\/span><\/div>\r\n<div class=\"orch-order\"><div><div class=\"orch-main\">COPY-8F21-002 \u00b7 Alpha \/ Follower B<\/div><div class=\"orch-meta\">XAUUSD \u00b7 BUY \u00b7 target 0.14 lot<\/div><\/div><div>14:32:12<\/div><div>Broker: API-B<\/div><span class=\"orch-badge info\">EXECUTED<\/span><\/div>\r\n<div class=\"orch-order\"><div><div class=\"orch-main\">COPY-8F21-003 \u00b7 Alpha \/ Follower C<\/div><div class=\"orch-meta\">EURUSD \u00b7 CLOSE<\/div><\/div><div>14:31:48<\/div><div>Broker: MT5-C<\/div><span class=\"orch-badge warn\">RETRY<\/span><\/div>\r\n<div class=\"orch-order\"><div><div class=\"orch-main\">COPY-8F20-991 \u00b7 Gold \/ Follower D<\/div><div class=\"orch-meta\">XAUUSD \u00b7 SELL \u00b7 blocked by policy<\/div><\/div><div>14:30:02<\/div><div>Broker: API-D<\/div><span class=\"orch-badge fail\">BLOCKED<\/span><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"orchRequests\" class=\"orch-section\">\r\n<div class=\"orch-card\"><h2>Copy Requests<\/h2><div class=\"orch-desc\">Each request carries the source event, follower account, policy version, mapped instrument and execution intent.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Request ID<\/th><th>Source Event<\/th><th>Follower<\/th><th>Intent<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>COPY-8F21-001<\/td><td>evt_8F21A<\/td><td>Follower A<\/td><td>OPEN BUY 0.27<\/td><td><span class=\"orch-badge ok\">RECONCILED<\/span><\/td><\/tr>\r\n<tr><td>COPY-8F21-002<\/td><td>evt_8F21A<\/td><td>Follower B<\/td><td>OPEN BUY 0.14<\/td><td><span class=\"orch-badge info\">EXECUTED<\/span><\/td><\/tr>\r\n<tr><td>COPY-8F21-003<\/td><td>evt_8F219<\/td><td>Follower C<\/td><td>CLOSE<\/td><td><span class=\"orch-badge warn\">RETRY<\/span><\/td><\/tr>\r\n<tr><td>COPY-8F20-991<\/td><td>evt_8F217<\/td><td>Follower D<\/td><td>OPEN SELL<\/td><td><span class=\"orch-badge fail\">BLOCKED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"orch-note\"><b>Idempotency rule:<\/b> the request ID should remain stable through retries. A timeout after submission must not automatically create a new broker order unless the connector can safely determine the prior request's outcome.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"orchRetries\" class=\"orch-section\">\r\n<div class=\"orch-card\"><h2>Retries & Recovery<\/h2><div class=\"orch-desc\">Transient connector failures require controlled retries. Permanent policy or validation failures should not be retried as if they were network failures.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Failure<\/th><th>Classification<\/th><th>Action<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Network timeout<\/td><td>Transient<\/td><td>Retry with bounded backoff<\/td><td><span class=\"orch-badge ok\">RETRYABLE<\/span><\/td><\/tr>\r\n<tr><td>Rate limit<\/td><td>Transient<\/td><td>Respect retry-after \/ backoff<\/td><td><span class=\"orch-badge ok\">RETRYABLE<\/span><\/td><\/tr>\r\n<tr><td>Invalid volume<\/td><td>Permanent<\/td><td>Recalculate or reject<\/td><td><span class=\"orch-badge fail\">NO RETRY<\/span><\/td><\/tr>\r\n<tr><td>Market closed<\/td><td>Conditional<\/td><td>Apply session policy<\/td><td><span class=\"orch-badge warn\">POLICY<\/span><\/td><\/tr>\r\n<tr><td>Unknown broker result<\/td><td>Critical<\/td><td>Query broker before retry<\/td><td><span class=\"orch-badge warn\">RECONCILE<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"orchReconciliation\" class=\"orch-section\">\r\n<div class=\"orch-card\"><h2>Execution Reconciliation<\/h2><div class=\"orch-desc\">Reconciliation compares the intended copy state with the broker's observed state. This closes the loop between order submission and actual account state.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Request<\/th><th>Intent<\/th><th>Broker State<\/th><th>Match<\/th><th>Action<\/th><\/tr><\/thead><tbody>\r\n<tr><td>COPY-8F21-001<\/td><td>BUY 0.27<\/td><td>BUY 0.27<\/td><td><span class=\"orch-badge ok\">YES<\/span><\/td><td>Close lifecycle<\/td><\/tr>\r\n<tr><td>COPY-8F21-002<\/td><td>BUY 0.14<\/td><td>BUY 0.14<\/td><td><span class=\"orch-badge ok\">YES<\/span><\/td><td>Close lifecycle<\/td><\/tr>\r\n<tr><td>COPY-8F21-003<\/td><td>CLOSE<\/td><td>Position still open<\/td><td><span class=\"orch-badge fail\">NO<\/span><\/td><td>Investigate<\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"orch-timeline\">\r\n<div class=\"orch-event\"><b>14:32:12 \u00b7 Broker acknowledgement<\/b><span>COPY-8F21-002 accepted by connector.<\/span><\/div>\r\n<div class=\"orch-event\"><b>14:32:13 \u00b7 Account sync<\/b><span>Follower B position observed at broker.<\/span><\/div>\r\n<div class=\"orch-event\"><b>14:32:13 \u00b7 Reconciliation<\/b><span>Requested volume and observed volume match.<\/span><\/div>\r\n<\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype reconciliation scan started.')\">Run Reconciliation<\/button><button class=\"btn\" onclick=\"alert('Prototype exception review opened.')\">Review Exceptions<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= BROKER CONNECTOR RUNTIME ================= -->\r\n<section id=\"brokerConnectorPage\" class=\"hidden\">\r\n<div class=\"conn-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Broker Connector<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Broker Connector Runtime<\/h1><div class=\"subtitle\">Manage the runtime layer that translates approved copy requests into broker-specific execution commands and returns normalized results.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"conn-layout\">\r\n<aside class=\"conn-nav\">\r\n<a class=\"active\" data-conn-tab=\"overview\" onclick=\"connTab('overview')\">Overview<\/a>\r\n<a data-conn-tab=\"connectors\" onclick=\"connTab('connectors')\">Connectors<\/a>\r\n<a data-conn-tab=\"runtime\" onclick=\"connTab('runtime')\">Runtime<\/a>\r\n<a data-conn-tab=\"health\" onclick=\"connTab('health')\">Health<\/a>\r\n<a data-conn-tab=\"credentials\" onclick=\"connTab('credentials')\">Credentials<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"connOverview\" class=\"conn-section active\">\r\n<div class=\"conn-card\"><h2>Broker Connector Overview<\/h2><div class=\"conn-desc\">The connector is the broker-facing execution boundary. MQLPro should send a normalized execution intent and receive a normalized result regardless of whether the underlying adapter uses MT5, a broker API, FIX or another supported transport.<\/div>\r\n<div class=\"conn-grid\">\r\n<div class=\"conn-stat\"><span>Active Connectors<\/span><b>18<\/b><\/div>\r\n<div class=\"conn-stat\"><span>Connected Accounts<\/span><b>247<\/b><\/div>\r\n<div class=\"conn-stat\"><span>Healthy<\/span><b>244<\/b><\/div>\r\n<div class=\"conn-stat\"><span>Exceptions<\/span><b>3<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"conn-card\"><h3>Execution Boundary<\/h3>\r\n<div class=\"conn-flow\">\r\n<div class=\"conn-step\">Copy Request<\/div><div class=\"conn-arrow\">\u2192<\/div>\r\n<div class=\"conn-step\">Connector Adapter<\/div><div class=\"conn-arrow\">\u2192<\/div>\r\n<div class=\"conn-step\">Broker Transport<\/div><div class=\"conn-arrow\">\u2192<\/div>\r\n<div class=\"conn-step\">Broker<\/div><div class=\"conn-arrow\">\u2192<\/div>\r\n<div class=\"conn-step\">Normalized Result<\/div><div class=\"conn-arrow\">\u2192<\/div>\r\n<div class=\"conn-step\">Reconciliation<\/div>\r\n<\/div><\/div>\r\n<div class=\"conn-card\"><h3>Normalized Execution Intent<\/h3>\r\n<div class=\"conn-code\">{\r\n  \"request_id\": \"COPY-8F21-001\",\r\n  \"account_id\": \"acct_1024\",\r\n  \"instrument\": \"XAUUSD\",\r\n  \"side\": \"BUY\",\r\n  \"quantity\": 0.27,\r\n  \"order_type\": \"MARKET\",\r\n  \"client_reference\": \"mqlpro_copy_8f21_001\"\r\n}<\/div>\r\n<div class=\"conn-note\"><b>Design rule:<\/b> broker-specific credentials and transport details stay inside the connector service. The orchestrator should not need to know how an individual broker executes the request.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"connConnectors\" class=\"conn-section\">\r\n<div class=\"conn-card\"><h2>Connector Registry<\/h2><div class=\"conn-desc\">Each adapter has its own capability profile, transport and health state.<\/div>\r\n<div class=\"conn-row\"><div><div class=\"conn-main\">MT5 Connector A<\/div><div class=\"conn-meta\">MetaTrader 5 \u00b7 terminal\/bridge adapter \u00b7 64 accounts<\/div><\/div><div>Latency 82 ms<\/div><div>Last heartbeat 14:32<\/div><span class=\"conn-badge ok\">CONNECTED<\/span><\/div>\r\n<div class=\"conn-row\"><div><div class=\"conn-main\">Broker API B<\/div><div class=\"conn-meta\">REST API \u00b7 31 accounts \u00b7 market + pending orders<\/div><\/div><div>Latency 104 ms<\/div><div>Last heartbeat 14:32<\/div><span class=\"conn-badge ok\">CONNECTED<\/span><\/div>\r\n<div class=\"conn-row\"><div><div class=\"conn-main\">MT5 Connector C<\/div><div class=\"conn-meta\">MetaTrader 5 \u00b7 bridge adapter \u00b7 87 accounts<\/div><\/div><div>Latency 96 ms<\/div><div>Last heartbeat 14:31<\/div><span class=\"conn-badge ok\">CONNECTED<\/span><\/div>\r\n<div class=\"conn-row\"><div><div class=\"conn-main\">Broker API D<\/div><div class=\"conn-meta\">REST API \u00b7 12 accounts \u00b7 authentication renewal required<\/div><\/div><div>Latency \u2014<\/div><div>Last heartbeat 13:57<\/div><span class=\"conn-badge warn\">ATTENTION<\/span><\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype connector registration opened.')\">Register Connector<\/button><button class=\"btn\" onclick=\"alert('Prototype connector test started.')\">Test Connection<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"connRuntime\" class=\"conn-section\">\r\n<div class=\"conn-card\"><h2>Runtime Workers<\/h2><div class=\"conn-desc\">Workers consume execution jobs, communicate with broker adapters and publish normalized outcomes.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Worker<\/th><th>Queue<\/th><th>Throughput<\/th><th>Last Heartbeat<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>worker-eu-01<\/td><td>execution.eu<\/td><td>142\/min<\/td><td>14:32:12<\/td><td><span class=\"conn-badge ok\">RUNNING<\/span><\/td><\/tr>\r\n<tr><td>worker-ap-02<\/td><td>execution.ap<\/td><td>118\/min<\/td><td>14:32:11<\/td><td><span class=\"conn-badge ok\">RUNNING<\/span><\/td><\/tr>\r\n<tr><td>worker-us-01<\/td><td>execution.us<\/td><td>96\/min<\/td><td>14:32:10<\/td><td><span class=\"conn-badge ok\">RUNNING<\/span><\/td><\/tr>\r\n<tr><td>worker-recovery-01<\/td><td>recovery<\/td><td>7\/min<\/td><td>14:32:08<\/td><td><span class=\"conn-badge info\">STANDBY<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype worker restart requested.')\">Restart Worker<\/button><button class=\"btn\" onclick=\"alert('Prototype runtime metrics opened.')\">Runtime Metrics<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"connHealth\" class=\"conn-section\">\r\n<div class=\"conn-card\"><h2>Connector Health<\/h2><div class=\"conn-desc\">Health monitoring should cover transport availability, authentication, latency, execution acknowledgements and account synchronization.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Check<\/th><th>Expected<\/th><th>Observed<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Transport<\/td><td>Reachable<\/td><td>Reachable<\/td><td><span class=\"conn-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Authentication<\/td><td>Valid<\/td><td>Valid<\/td><td><span class=\"conn-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Heartbeat<\/td><td>&lt; 30 sec<\/td><td>4 sec<\/td><td><span class=\"conn-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Execution ACK<\/td><td>Received<\/td><td>Received<\/td><td><span class=\"conn-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Account Sync<\/td><td>Current<\/td><td>Current<\/td><td><span class=\"conn-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>API credential renewal<\/td><td>Valid<\/td><td>Pending<\/td><td><span class=\"conn-badge warn\">ATTENTION<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"connCredentials\" class=\"conn-section\">\r\n<div class=\"conn-card\"><h2>Connector Credentials<\/h2><div class=\"conn-desc\">Credentials are represented only by safe metadata in this UI. Secret values must be managed by the backend or a dedicated secret-management system.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Connector<\/th><th>Credential Type<\/th><th>Last Rotated<\/th><th>Expiry<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>MT5 Connector A<\/td><td>Terminal \/ bridge credential<\/td><td>01 Sep 2026<\/td><td>Not applicable<\/td><td><span class=\"conn-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Broker API B<\/td><td>OAuth \/ API token<\/td><td>15 Aug 2026<\/td><td>15 Nov 2026<\/td><td><span class=\"conn-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Broker API D<\/td><td>API token<\/td><td>01 Jun 2026<\/td><td>20 Sep 2026<\/td><td><span class=\"conn-badge warn\">RENEW<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"conn-note\"><b>Security boundary:<\/b> never place broker passwords, API secrets, private keys or access tokens in frontend source, localStorage or URL parameters.<\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype credential rotation opened.')\">Rotate Credential<\/button><button class=\"btn\" onclick=\"alert('Prototype credential audit opened.')\">Audit Access<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= ACCOUNT SYNC & POSITION RECONCILIATION ================= -->\r\n<section id=\"accountReconciliationPage\" class=\"hidden\">\r\n<div class=\"sync-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Account Sync & Reconciliation<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Account Sync & Reconciliation<\/h1><div class=\"subtitle\">Compare intended copy state with broker-observed account state and resolve differences before they become persistent drift.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"sync-layout\">\r\n<aside class=\"sync-nav\">\r\n<a class=\"active\" data-sync-tab=\"overview\" onclick=\"syncTab('overview')\">Overview<\/a>\r\n<a data-sync-tab=\"accounts\" onclick=\"syncTab('accounts')\">Accounts<\/a>\r\n<a data-sync-tab=\"positions\" onclick=\"syncTab('positions')\">Positions<\/a>\r\n<a data-sync-tab=\"orders\" onclick=\"syncTab('orders')\">Orders<\/a>\r\n<a data-sync-tab=\"exceptions\" onclick=\"syncTab('exceptions')\">Exceptions<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"syncOverview\" class=\"sync-section active\">\r\n<div class=\"sync-card\"><h2>Account Sync Overview<\/h2><div class=\"sync-desc\">Synchronization closes the loop between MQLPro's internal ledger and the real state reported by connected broker accounts.<\/div>\r\n<div class=\"sync-grid\">\r\n<div class=\"sync-stat\"><span>Accounts Monitored<\/span><b>247<\/b><\/div>\r\n<div class=\"sync-stat\"><span>Positions Synced<\/span><b>1,284<\/b><\/div>\r\n<div class=\"sync-stat\"><span>Matched<\/span><b>1,276<\/b><\/div>\r\n<div class=\"sync-stat\"><span>Exceptions<\/span><b>8<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"sync-card\"><h3>Synchronization Flow<\/h3>\r\n<div class=\"sync-flow\">\r\n<div class=\"sync-step\">Copy Intent<\/div><div class=\"sync-arrow\">\u2192<\/div>\r\n<div class=\"sync-step\">Broker Execution<\/div><div class=\"sync-arrow\">\u2192<\/div>\r\n<div class=\"sync-step\">Broker State<\/div><div class=\"sync-arrow\">\u2192<\/div>\r\n<div class=\"sync-step\">Account Snapshot<\/div><div class=\"sync-arrow\">\u2192<\/div>\r\n<div class=\"sync-step\">Compare<\/div><div class=\"sync-arrow\">\u2192<\/div>\r\n<div class=\"sync-step\">Reconcile<\/div><div class=\"sync-arrow\">\u2192<\/div>\r\n<div class=\"sync-step\">Audit<\/div>\r\n<\/div><\/div>\r\n<div class=\"sync-card\"><h3>Reconciliation Principles<\/h3>\r\n<table class=\"dash-table\"><thead><tr><th>Principle<\/th><th>Purpose<\/th><th>Result<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Source of truth<\/td><td>Broker state is observed independently<\/td><td>Current account snapshot<\/td><\/tr>\r\n<tr><td>Idempotency<\/td><td>Repeated sync must not duplicate actions<\/td><td>Stable state<\/td><\/tr>\r\n<tr><td>Drift detection<\/td><td>Find intent\/state differences<\/td><td>Exception generated<\/td><\/tr>\r\n<tr><td>Safe recovery<\/td><td>Do not blindly force an order<\/td><td>Policy-based action<\/td><\/tr>\r\n<\/tbody><\/table><\/div>\r\n<\/div>\r\n\r\n<div id=\"syncAccounts\" class=\"sync-section\">\r\n<div class=\"sync-card\"><h2>Connected Accounts<\/h2><div class=\"sync-desc\">Account health and last observed snapshot for connected follower accounts.<\/div>\r\n<div class=\"sync-row\"><div><div class=\"sync-main\">Follower A \u00b7 MT5-A<\/div><div class=\"sync-meta\">acct_1024 \u00b7 Equity $10,842 \u00b7 4 open positions<\/div><\/div><div>14:32:14<\/div><div>Snapshot age 2 sec<\/div><span class=\"sync-badge ok\">SYNCED<\/span><\/div>\r\n<div class=\"sync-row\"><div><div class=\"sync-main\">Follower B \u00b7 API-B<\/div><div class=\"sync-meta\">acct_1138 \u00b7 Equity $7,214 \u00b7 2 open positions<\/div><\/div><div>14:32:13<\/div><div>Snapshot age 3 sec<\/div><span class=\"sync-badge ok\">SYNCED<\/span><\/div>\r\n<div class=\"sync-row\"><div><div class=\"sync-main\">Follower C \u00b7 MT5-C<\/div><div class=\"sync-meta\">acct_1202 \u00b7 Equity $15,901 \u00b7 7 open positions<\/div><\/div><div>14:32:12<\/div><div>Snapshot age 4 sec<\/div><span class=\"sync-badge ok\">SYNCED<\/span><\/div>\r\n<div class=\"sync-row\"><div><div class=\"sync-main\">Follower D \u00b7 API-D<\/div><div class=\"sync-meta\">acct_1320 \u00b7 Last broker snapshot incomplete<\/div><\/div><div>14:28:57<\/div><div>Snapshot age 3m 17s<\/div><span class=\"sync-badge warn\">STALE<\/span><\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype account sync started.')\">Sync All Accounts<\/button><button class=\"btn\" onclick=\"alert('Prototype account health scan started.')\">Health Scan<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"syncPositions\" class=\"sync-section\">\r\n<div class=\"sync-card\"><h2>Position Reconciliation<\/h2><div class=\"sync-desc\">Compare expected follower positions with broker-observed positions after execution.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Account<\/th><th>Symbol<\/th><th>Expected<\/th><th>Observed<\/th><th>Match<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Follower A<\/td><td>XAUUSD<\/td><td>BUY 0.27<\/td><td>BUY 0.27<\/td><td><span class=\"sync-badge ok\">MATCH<\/span><\/td><\/tr>\r\n<tr><td>Follower B<\/td><td>XAUUSD<\/td><td>BUY 0.14<\/td><td>BUY 0.14<\/td><td><span class=\"sync-badge ok\">MATCH<\/span><\/td><\/tr>\r\n<tr><td>Follower C<\/td><td>EURUSD<\/td><td>FLAT<\/td><td>BUY 0.10<\/td><td><span class=\"sync-badge fail\">DRIFT<\/span><\/td><\/tr>\r\n<tr><td>Follower D<\/td><td>US500<\/td><td>BUY 0.05<\/td><td>UNKNOWN<\/td><td><span class=\"sync-badge warn\">STALE<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"sync-note\"><b>Drift handling:<\/b> a mismatch should first create an exception and trigger a fresh broker query. Automatic corrective trading should require an explicit, policy-approved recovery path.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"syncOrders\" class=\"sync-section\">\r\n<div class=\"sync-card\"><h2>Order Reconciliation<\/h2><div class=\"sync-desc\">Order-level checks link MQLPro request IDs to broker order\/deal identifiers.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Copy Request<\/th><th>Broker Ref<\/th><th>Requested<\/th><th>Observed<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>COPY-8F21-001<\/td><td>MT5 #7812401<\/td><td>BUY 0.27<\/td><td>BUY 0.27<\/td><td><span class=\"sync-badge ok\">MATCH<\/span><\/td><\/tr>\r\n<tr><td>COPY-8F21-002<\/td><td>API-B #99218<\/td><td>BUY 0.14<\/td><td>BUY 0.14<\/td><td><span class=\"sync-badge ok\">MATCH<\/span><\/td><\/tr>\r\n<tr><td>COPY-8F21-003<\/td><td>Pending lookup<\/td><td>CLOSE<\/td><td>Position open<\/td><td><span class=\"sync-badge fail\">DRIFT<\/span><\/td><\/tr>\r\n<tr><td>COPY-8F20-991<\/td><td>None<\/td><td>BUY 0.05<\/td><td>Blocked<\/td><td><span class=\"sync-badge info\">EXPECTED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"syncExceptions\" class=\"sync-section\">\r\n<div class=\"sync-card\"><h2>Sync Exceptions<\/h2><div class=\"sync-desc\">Exceptions require deterministic handling rather than silent correction.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Exception<\/th><th>Account<\/th><th>Cause<\/th><th>Recommended State<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>EXC-2031<\/td><td>Follower C<\/td><td>Unexpected EURUSD position<\/td><td>Investigate<\/td><td><span class=\"sync-badge fail\">OPEN<\/span><\/td><\/tr>\r\n<tr><td>EXC-2029<\/td><td>Follower D<\/td><td>Stale account snapshot<\/td><td>Refresh<\/td><td><span class=\"sync-badge warn\">OPEN<\/span><\/td><\/tr>\r\n<tr><td>EXC-2024<\/td><td>Follower A<\/td><td>Delayed broker acknowledgement<\/td><td>Re-query<\/td><td><span class=\"sync-badge info\">REVIEW<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype exception scan started.')\">Scan Again<\/button><button class=\"btn\" onclick=\"alert('Prototype recovery queue opened.')\">Open Recovery Queue<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= OBSERVABILITY & AUDIT CENTER ================= -->\r\n<section id=\"observabilityPage\" class=\"hidden\">\r\n<div class=\"obs-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Observability & Audit<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Observability & Audit Center<\/h1><div class=\"subtitle\">Monitor the copytrade pipeline, investigate incidents, and maintain an immutable operational trail from signal intake to broker reconciliation.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"obs-layout\">\r\n<aside class=\"obs-nav\">\r\n<a class=\"active\" data-obs-tab=\"overview\" onclick=\"obsTab('overview')\">Overview<\/a>\r\n<a data-obs-tab=\"pipeline\" onclick=\"obsTab('pipeline')\">Pipeline Health<\/a>\r\n<a data-obs-tab=\"events\" onclick=\"obsTab('events')\">Event Log<\/a>\r\n<a data-obs-tab=\"incidents\" onclick=\"obsTab('incidents')\">Incidents<\/a>\r\n<a data-obs-tab=\"audit\" onclick=\"obsTab('audit')\">Audit Trail<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"obsOverview\" class=\"obs-section active\">\r\n<div class=\"obs-card\"><h2>Observability Overview<\/h2><div class=\"obs-desc\">A cross-layer operational view of MQLPro. Metrics here describe system state and processing health, not trading performance.<\/div>\r\n<div class=\"obs-grid\">\r\n<div class=\"obs-stat\"><span>Pipeline Events \/ min<\/span><b>486<\/b><\/div>\r\n<div class=\"obs-stat\"><span>Successful Actions<\/span><b>99.72%<\/b><\/div>\r\n<div class=\"obs-stat\"><span>Open Incidents<\/span><b>3<\/b><\/div>\r\n<div class=\"obs-stat\"><span>Audit Events Today<\/span><b>18,742<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"obs-card\"><h3>End-to-End Health<\/h3>\r\n<div class=\"obs-row\"><div><div class=\"obs-main\">Signal Intake<\/div><div class=\"obs-meta\">Webhook validation, authentication and deduplication<\/div><\/div><div>82 events\/min<\/div><div>Latency 21 ms<\/div><span class=\"obs-badge ok\">HEALTHY<\/span><\/div>\r\n<div class=\"obs-row\"><div><div class=\"obs-main\">Copy Orchestrator<\/div><div class=\"obs-meta\">Eligibility, allocation and request lifecycle<\/div><\/div><div>164 req\/min<\/div><div>Latency 38 ms<\/div><span class=\"obs-badge ok\">HEALTHY<\/span><\/div>\r\n<div class=\"obs-row\"><div><div class=\"obs-main\">Broker Connectors<\/div><div class=\"obs-meta\">18 adapters \/ 247 connected accounts<\/div><\/div><div>217 req\/min<\/div><div>Latency 91 ms<\/div><span class=\"obs-badge warn\">ATTENTION<\/span><\/div>\r\n<div class=\"obs-row\"><div><div class=\"obs-main\">Account Reconciliation<\/div><div class=\"obs-meta\">Position and order state comparison<\/div><\/div><div>1,284 positions<\/div><div>8 exceptions<\/div><span class=\"obs-badge warn\">ATTENTION<\/span><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"obsPipeline\" class=\"obs-section\">\r\n<div class=\"obs-card\"><h2>Pipeline Health<\/h2><div class=\"obs-desc\">Monitor processing stages independently so a failure in one layer does not become an invisible failure across the whole system.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Stage<\/th><th>Throughput<\/th><th>Latency<\/th><th>Error Rate<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Signal Intake<\/td><td>82\/min<\/td><td>21 ms<\/td><td>0.08%<\/td><td><span class=\"obs-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Signal Engine<\/td><td>82\/min<\/td><td>14 ms<\/td><td>0.02%<\/td><td><span class=\"obs-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Risk Engine<\/td><td>79\/min<\/td><td>18 ms<\/td><td>0.11%<\/td><td><span class=\"obs-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Execution Queue<\/td><td>164\/min<\/td><td>7 ms<\/td><td>0.03%<\/td><td><span class=\"obs-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Broker Connector<\/td><td>157\/min<\/td><td>91 ms<\/td><td>0.42%<\/td><td><span class=\"obs-badge warn\">WATCH<\/span><\/td><\/tr>\r\n<tr><td>Reconciliation<\/td><td>1,284 snapshots<\/td><td>4 sec<\/td><td>0.62%<\/td><td><span class=\"obs-badge warn\">WATCH<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"obsEvents\" class=\"obs-section\">\r\n<div class=\"obs-card\"><h2>Event Log<\/h2><div class=\"obs-desc\">Operational events are correlated by event ID, request ID, account ID and connector ID.<\/div>\r\n<div class=\"obs-log\">2026-09-16 14:32:14  INFO  evt_8F21A  COPY-8F21-001  reconciliation.match\r\n2026-09-16 14:32:13  INFO  evt_8F21A  COPY-8F21-002  broker.execution_ack\r\n2026-09-16 14:32:12  INFO  evt_8F21A  COPY-8F21-002  connector.submit\r\n2026-09-16 14:32:11  INFO  evt_8F21A  COPY-8F21-001  execution.queued\r\n2026-09-16 14:32:10  INFO  evt_8F21A  \u2014             risk.approved\r\n2026-09-16 14:32:09  INFO  evt_8F21A  \u2014             signal.normalized\r\n2026-09-16 14:32:08  INFO  evt_8F21A  \u2014             intake.accepted\r\n2026-09-16 14:31:49  WARN  evt_8F219  COPY-8F21-003  broker.result.timeout\r\n2026-09-16 14:31:48  INFO  evt_8F219  COPY-8F21-003  retry.scheduled<\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype event export started.')\">Export Events<\/button><button class=\"btn\" onclick=\"alert('Prototype trace viewer opened.')\">Trace Event<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"obsIncidents\" class=\"obs-section\">\r\n<div class=\"obs-card\"><h2>Incident Center<\/h2><div class=\"obs-desc\">Incidents group related failures so operators investigate the root cause rather than treating every retry as a separate problem.<\/div>\r\n<div class=\"obs-row\"><div><div class=\"obs-main\">INC-1042 \u00b7 API-D authentication renewal<\/div><div class=\"obs-meta\">Connector: Broker API D \u00b7 first detected 13:57<\/div><\/div><div>17 min<\/div><div>3 accounts<\/div><span class=\"obs-badge warn\">OPEN<\/span><\/div>\r\n<div class=\"obs-row\"><div><div class=\"obs-main\">INC-1041 \u00b7 Position drift<\/div><div class=\"obs-meta\">Follower C \u00b7 EURUSD unexpected open position<\/div><\/div><div>18 min<\/div><div>1 account<\/div><span class=\"obs-badge fail\">OPEN<\/span><\/div>\r\n<div class=\"obs-row\"><div><div class=\"obs-main\">INC-1040 \u00b7 Broker timeout burst<\/div><div class=\"obs-meta\">Connector C \u00b7 7 requests affected<\/div><\/div><div>22 min<\/div><div>7 requests<\/div><span class=\"obs-badge info\">INVESTIGATING<\/span><\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype incident detail opened.')\">Open Incident<\/button><button class=\"btn\" onclick=\"alert('Prototype incident acknowledgement recorded.')\">Acknowledge<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"obsAudit\" class=\"obs-section\">\r\n<div class=\"obs-card\"><h2>Audit Trail<\/h2><div class=\"obs-desc\">Audit records should answer who or what performed an action, what changed, when it happened, and which object was affected.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Time<\/th><th>Actor<\/th><th>Object<\/th><th>Action<\/th><th>Result<\/th><\/tr><\/thead><tbody>\r\n<tr><td>14:32:14<\/td><td>system\/reconciler<\/td><td>COPY-8F21-001<\/td><td>RECONCILE<\/td><td><span class=\"obs-badge ok\">MATCH<\/span><\/td><\/tr>\r\n<tr><td>14:32:12<\/td><td>connector\/mt5-a<\/td><td>COPY-8F21-001<\/td><td>EXECUTE<\/td><td><span class=\"obs-badge ok\">ACK<\/span><\/td><\/tr>\r\n<tr><td>14:32:10<\/td><td>risk-engine<\/td><td>evt_8F21A<\/td><td>APPROVE<\/td><td><span class=\"obs-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>14:32:08<\/td><td>intake-gateway<\/td><td>evt_8F21A<\/td><td>ACCEPT<\/td><td><span class=\"obs-badge ok\">VALID<\/span><\/td><\/tr>\r\n<tr><td>14:28:57<\/td><td>system\/sync<\/td><td>acct_1320<\/td><td>SNAPSHOT<\/td><td><span class=\"obs-badge warn\">STALE<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"obs-timeline\">\r\n<div class=\"obs-event\"><b>14:32:08 \u00b7 Signal accepted<\/b><span>Gateway assigned correlation ID evt_8F21A.<\/span><\/div>\r\n<div class=\"obs-event\"><b>14:32:10 \u00b7 Risk approved<\/b><span>Policy evaluation produced an approved copy intent.<\/span><\/div>\r\n<div class=\"obs-event\"><b>14:32:12 \u00b7 Broker acknowledged<\/b><span>Connector returned a broker reference.<\/span><\/div>\r\n<div class=\"obs-event\"><b>14:32:14 \u00b7 Reconciled<\/b><span>Observed broker state matched intended state.<\/span><\/div>\r\n<\/div>\r\n<div class=\"obs-note\"><b>Audit rule:<\/b> audit history should be append-only in production. Administrative corrections should create a new audit event instead of silently modifying the historical record.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= SECURITY & ACCESS CONTROL ================= -->\r\n<section id=\"securityPage\" class=\"hidden\">\r\n<div class=\"sec-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Security & Access Control<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Security & Access Control<\/h1><div class=\"subtitle\">Control identities, permissions, sessions and sensitive operational actions across the MQLPro platform.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"sec-layout\">\r\n<aside class=\"sec-nav\">\r\n<a class=\"active\" data-sec-tab=\"overview\" onclick=\"secTab('overview')\">Overview<\/a>\r\n<a data-sec-tab=\"roles\" onclick=\"secTab('roles')\">Roles & Permissions<\/a>\r\n<a data-sec-tab=\"sessions\" onclick=\"secTab('sessions')\">Sessions<\/a>\r\n<a data-sec-tab=\"api\" onclick=\"secTab('api')\">API Access<\/a>\r\n<a data-sec-tab=\"actions\" onclick=\"secTab('actions')\">Sensitive Actions<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"secOverview\" class=\"sec-section active\">\r\n<div class=\"sec-card\"><h2>Security Overview<\/h2><div class=\"sec-desc\">Security boundaries are separated from trading logic. Authentication establishes identity; authorization determines which operations that identity may perform.<\/div>\r\n<div class=\"sec-grid\">\r\n<div class=\"sec-stat\"><span>Active Users<\/span><b>1,284<\/b><\/div>\r\n<div class=\"sec-stat\"><span>Active Sessions<\/span><b>417<\/b><\/div>\r\n<div class=\"sec-stat\"><span>API Credentials<\/span><b>63<\/b><\/div>\r\n<div class=\"sec-stat\"><span>Open Security Alerts<\/span><b>2<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"sec-card\"><h3>Security Layers<\/h3>\r\n<div class=\"sec-row\"><div><div class=\"sec-main\">Identity & Authentication<\/div><div class=\"sec-meta\">Login, session validation and multi-factor authentication policy<\/div><\/div><div>1,284 users<\/div><div>0.12% failures<\/div><span class=\"sec-badge ok\">HEALTHY<\/span><\/div>\r\n<div class=\"sec-row\"><div><div class=\"sec-main\">Authorization<\/div><div class=\"sec-meta\">Role and permission checks for dashboard and API actions<\/div><\/div><div>42 policies<\/div><div>100% enforced<\/div><span class=\"sec-badge ok\">ACTIVE<\/span><\/div>\r\n<div class=\"sec-row\"><div><div class=\"sec-main\">Credential Security<\/div><div class=\"sec-meta\">Broker secrets and API credentials kept outside frontend state<\/div><\/div><div>63 credentials<\/div><div>2 renewals<\/div><span class=\"sec-badge warn\">REVIEW<\/span><\/div>\r\n<div class=\"sec-row\"><div><div class=\"sec-main\">Privileged Actions<\/div><div class=\"sec-meta\">Reset, disable, rotate, reconnect and recovery operations<\/div><\/div><div>18 today<\/div><div>100% audited<\/div><span class=\"sec-badge ok\">AUDITED<\/span><\/div>\r\n<\/div>\r\n<div class=\"sec-note\"><b>Production rule:<\/b> the frontend is not a security boundary. Every privileged operation must be authorized again by the backend, even if the UI hides the corresponding button.<\/div>\r\n<\/div>\r\n\r\n<div id=\"secRoles\" class=\"sec-section\">\r\n<div class=\"sec-card\"><h2>Roles & Permissions<\/h2><div class=\"sec-desc\">Use least privilege: an identity receives only the permissions required for its operational responsibilities.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Role<\/th><th>Users<\/th><th>Core Permissions<\/th><th>Privileged Actions<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Platform Admin<\/td><td>4<\/td><td>All operational views<\/td><td>Connector, access, recovery<\/td><td><span class=\"sec-badge info\">PRIVILEGED<\/span><\/td><\/tr>\r\n<tr><td>Risk Operator<\/td><td>8<\/td><td>Risk policies, exceptions<\/td><td>Approve policy changes<\/td><td><span class=\"sec-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>Support<\/td><td>17<\/td><td>User\/account diagnostics<\/td><td>None<\/td><td><span class=\"sec-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>Signal Provider<\/td><td>63<\/td><td>Own signal management<\/td><td>Own signal only<\/td><td><span class=\"sec-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>Follower<\/td><td>1,192<\/td><td>Own account\/subscriptions<\/td><td>None<\/td><td><span class=\"sec-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"sec-perm\">platform.connector.read\r\nplatform.connector.manage\r\naccount.reconcile.read\r\naccount.reconcile.recover\r\nrisk.policy.read\r\nrisk.policy.manage\r\nsecurity.session.revoke\r\nsecurity.credential.rotate<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"secSessions\" class=\"sec-section\">\r\n<div class=\"sec-card\"><h2>Session Security<\/h2><div class=\"sec-desc\">Sessions should be short-lived where appropriate, revocable server-side and bound to an authenticated identity.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Session<\/th><th>Role<\/th><th>Last Activity<\/th><th>Device<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>sess_7A91<\/td><td>Platform Admin<\/td><td>14:32:18<\/td><td>Chrome \/ Windows<\/td><td><span class=\"sec-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>sess_8B22<\/td><td>Risk Operator<\/td><td>14:31:49<\/td><td>Chrome \/ macOS<\/td><td><span class=\"sec-badge ok\">ACTIVE<\/span><\/td><\/tr>\r\n<tr><td>sess_19F2<\/td><td>Support<\/td><td>12:08:21<\/td><td>Firefox \/ Linux<\/td><td><span class=\"sec-badge warn\">IDLE<\/span><\/td><\/tr>\r\n<tr><td>sess_0A17<\/td><td>Unknown<\/td><td>09:17:02<\/td><td>Unrecognized device<\/td><td><span class=\"sec-badge fail\">REVOKED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype session review opened.')\">Review Sessions<\/button><button class=\"btn\" onclick=\"alert('Prototype session revocation requested.')\">Revoke Selected<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"secApi\" class=\"sec-section\">\r\n<div class=\"sec-card\"><h2>API Access<\/h2><div class=\"sec-desc\">API credentials should be scoped, rotated and revocable. Secret material is intentionally never rendered here.<\/div>\r\n<div class=\"sec-row\"><div><div class=\"sec-main\">connector-api-prod<\/div><div class=\"sec-meta\">Broker connector service \u00b7 execution scope<\/div><\/div><div>Last used 14:32<\/div><div>Expires 2026-11-15<\/div><span class=\"sec-badge ok\">VALID<\/span><\/div>\r\n<div class=\"sec-row\"><div><div class=\"sec-main\">reconciler-prod<\/div><div class=\"sec-meta\">Account snapshots \u00b7 read + reconciliation scope<\/div><\/div><div>Last used 14:32<\/div><div>Expires 2027-01-10<\/div><span class=\"sec-badge ok\">VALID<\/span><\/div>\r\n<div class=\"sec-row\"><div><div class=\"sec-main\">legacy-import<\/div><div class=\"sec-meta\">Historical migration \u00b7 no live execution scope<\/div><\/div><div>Last used 2026-08-12<\/div><div>Expired<\/div><span class=\"sec-badge warn\">DISABLE<\/span><\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype API credential creation opened.')\">Create Credential<\/button><button class=\"btn\" onclick=\"alert('Prototype credential rotation opened.')\">Rotate<\/button><button class=\"btn\" onclick=\"alert('Prototype credential revocation opened.')\">Revoke<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"secActions\" class=\"sec-section\">\r\n<div class=\"sec-card\"><h2>Sensitive Actions<\/h2><div class=\"sec-desc\">High-impact actions should require explicit authorization, server-side policy checks and an audit record.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Action<\/th><th>Required Permission<\/th><th>Extra Control<\/th><th>Audit<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Rotate broker credential<\/td><td>security.credential.rotate<\/td><td>Re-authentication<\/td><td>Required<\/td><td><span class=\"sec-badge ok\">ENFORCED<\/span><\/td><\/tr>\r\n<tr><td>Reconnect connector<\/td><td>platform.connector.manage<\/td><td>Confirmation<\/td><td>Required<\/td><td><span class=\"sec-badge ok\">ENFORCED<\/span><\/td><\/tr>\r\n<tr><td>Manual reconciliation recovery<\/td><td>account.reconcile.recover<\/td><td>Reason + confirmation<\/td><td>Required<\/td><td><span class=\"sec-badge ok\">ENFORCED<\/span><\/td><\/tr>\r\n<tr><td>Change risk policy<\/td><td>risk.policy.manage<\/td><td>Admin approval<\/td><td>Required<\/td><td><span class=\"sec-badge ok\">ENFORCED<\/span><\/td><\/tr>\r\n<tr><td>Revoke session<\/td><td>security.session.revoke<\/td><td>None<\/td><td>Required<\/td><td><span class=\"sec-badge ok\">ENFORCED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"sec-note\"><b>Defense in depth:<\/b> hiding a control in the UI does not protect the API. Authorization must be enforced at the service boundary for every request.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= PRODUCTION READINESS & DEPLOYMENT CONTROL ================= -->\r\n<section id=\"productionPage\" class=\"hidden\">\r\n<div class=\"prod-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Production Readiness<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Production Readiness & Deployment<\/h1><div class=\"subtitle\">Validate the platform before production deployment with explicit release gates, dependency checks, rollback readiness and operational sign-off.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"prod-layout\">\r\n<aside class=\"prod-nav\">\r\n<a class=\"active\" data-prod-tab=\"overview\" onclick=\"prodTab('overview')\">Overview<\/a>\r\n<a data-prod-tab=\"checks\" onclick=\"prodTab('checks')\">Readiness Checks<\/a>\r\n<a data-prod-tab=\"release\" onclick=\"prodTab('release')\">Release Control<\/a>\r\n<a data-prod-tab=\"rollback\" onclick=\"prodTab('rollback')\">Rollback<\/a>\r\n<a data-prod-tab=\"signoff\" onclick=\"prodTab('signoff')\">Sign-off<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"prodOverview\" class=\"prod-section active\">\r\n<div class=\"prod-card\"><h2>Production Readiness Overview<\/h2><div class=\"prod-desc\">This control layer separates \u201cthe UI works\u201d from \u201cthe system is safe to operate in production.\u201d Every critical dependency must have an explicit state.<\/div>\r\n<div class=\"prod-grid\">\r\n<div class=\"prod-stat\"><span>Readiness Checks<\/span><b>28 \/ 30<\/b><\/div>\r\n<div class=\"prod-stat\"><span>Critical Blockers<\/span><b>0<\/b><\/div>\r\n<div class=\"prod-stat\"><span>Warnings<\/span><b>2<\/b><\/div>\r\n<div class=\"prod-stat\"><span>Rollback Ready<\/span><b>YES<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"prod-card\"><h3>Release Gates<\/h3>\r\n<div class=\"prod-row\"><div><div class=\"prod-main\">Application & Routing<\/div><div class=\"prod-meta\">All dashboard routes resolve and protected pages remain access-controlled.<\/div><\/div><div>100%<\/div><div>0 blockers<\/div><span class=\"prod-badge ok\">PASS<\/span><\/div>\r\n<div class=\"prod-row\"><div><div class=\"prod-main\">Trading Pipeline<\/div><div class=\"prod-meta\">Signal \u2192 risk \u2192 queue \u2192 connector \u2192 reconciliation path is defined.<\/div><\/div><div>100%<\/div><div>0 blockers<\/div><span class=\"prod-badge ok\">PASS<\/span><\/div>\r\n<div class=\"prod-row\"><div><div class=\"prod-main\">Security Controls<\/div><div class=\"prod-meta\">Authentication, authorization, credential and audit boundaries documented.<\/div><\/div><div>93%<\/div><div>2 warnings<\/div><span class=\"prod-badge warn\">REVIEW<\/span><\/div>\r\n<div class=\"prod-row\"><div><div class=\"prod-main\">Operational Recovery<\/div><div class=\"prod-meta\">Incident, reconciliation and rollback procedures are represented.<\/div><\/div><div>92%<\/div><div>2 warnings<\/div><span class=\"prod-badge warn\">REVIEW<\/span><\/div>\r\n<\/div>\r\n<div class=\"prod-note\"><b>Important:<\/b> a passing frontend prototype is not evidence that live trading is production-safe. Real broker credentials, backend authorization, durable storage, monitoring and tested recovery procedures must exist outside this HTML prototype.<\/div>\r\n<\/div>\r\n\r\n<div id=\"prodChecks\" class=\"prod-section\">\r\n<div class=\"prod-card\"><h2>Readiness Checks<\/h2><div class=\"prod-desc\">A production release should fail closed when a critical dependency is unavailable or an essential safety control has not been verified.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Check<\/th><th>Area<\/th><th>Evidence<\/th><th>Gate<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Frontend route integrity<\/td><td>Application<\/td><td>Dashboard navigation<\/td><td>Required<\/td><td><span class=\"prod-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Authentication & session policy<\/td><td>Security<\/td><td>Security control definition<\/td><td>Required<\/td><td><span class=\"prod-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Server-side authorization<\/td><td>Security<\/td><td>Permission model<\/td><td>Critical<\/td><td><span class=\"prod-badge warn\">VERIFY BACKEND<\/span><\/td><\/tr>\r\n<tr><td>Credential secret storage<\/td><td>Broker<\/td><td>Secret manager integration<\/td><td>Critical<\/td><td><span class=\"prod-badge warn\">VERIFY<\/span><\/td><\/tr>\r\n<tr><td>Idempotent execution<\/td><td>Execution<\/td><td>Request ID \/ deduplication<\/td><td>Critical<\/td><td><span class=\"prod-badge ok\">DEFINED<\/span><\/td><\/tr>\r\n<tr><td>Broker reconciliation<\/td><td>Operations<\/td><td>Expected vs observed state<\/td><td>Critical<\/td><td><span class=\"prod-badge ok\">DEFINED<\/span><\/td><\/tr>\r\n<tr><td>Backup & restore test<\/td><td>Infrastructure<\/td><td>Restore evidence<\/td><td>Required<\/td><td><span class=\"prod-badge info\">PENDING<\/span><\/td><\/tr>\r\n<tr><td>Incident response test<\/td><td>Operations<\/td><td>Game-day record<\/td><td>Required<\/td><td><span class=\"prod-badge info\">PENDING<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"prodRelease\" class=\"prod-section\">\r\n<div class=\"prod-card\"><h2>Release Control<\/h2><div class=\"prod-desc\">Production deployment should be versioned, traceable and reversible. No direct \u201cdeploy now\u201d action is implied by this prototype.<\/div>\r\n<div class=\"prod-row\"><div><div class=\"prod-main\">Current Release \u00b7 mqlpro-web 0.29.0<\/div><div class=\"prod-meta\">Baseline: STEP 29 \u00b7 Security & Access Control<\/div><\/div><div>2026-09-16<\/div><div>Build verified<\/div><span class=\"prod-badge ok\">CURRENT<\/span><\/div>\r\n<div class=\"prod-row\"><div><div class=\"prod-main\">Candidate Release \u00b7 mqlpro-web 0.30.0<\/div><div class=\"prod-meta\">Includes Production Readiness & Deployment control layer<\/div><\/div><div>Pending<\/div><div>Pre-production<\/div><span class=\"prod-badge info\">CANDIDATE<\/span><\/div>\r\n<div class=\"prod-row\"><div><div class=\"prod-main\">Release Freeze<\/div><div class=\"prod-meta\">Freeze live execution changes during an active incident unless emergency procedure is invoked.<\/div><\/div><div>Policy<\/div><div>Incident linked<\/div><span class=\"prod-badge ok\">ENABLED<\/span><\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype pre-production validation started.')\">Run Preflight<\/button><button class=\"btn\" onclick=\"alert('Prototype release review opened.')\">Review Release<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"prodRollback\" class=\"prod-section\">\r\n<div class=\"prod-card\"><h2>Rollback Readiness<\/h2><div class=\"prod-desc\">Rollback is a controlled restoration to a known-good application version. It must not be confused with reversing a financial trade.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Control<\/th><th>Current State<\/th><th>Required Evidence<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Previous known-good build<\/td><td>0.29.0<\/td><td>Immutable artifact<\/td><td><span class=\"prod-badge ok\">READY<\/span><\/td><\/tr>\r\n<tr><td>Database migration compatibility<\/td><td>Backward compatible<\/td><td>Migration test<\/td><td><span class=\"prod-badge warn\">VERIFY<\/span><\/td><\/tr>\r\n<tr><td>Configuration snapshot<\/td><td>Versioned<\/td><td>Restore test<\/td><td><span class=\"prod-badge ok\">READY<\/span><\/td><\/tr>\r\n<tr><td>Connector compatibility<\/td><td>Tracked<\/td><td>Adapter version matrix<\/td><td><span class=\"prod-badge ok\">READY<\/span><\/td><\/tr>\r\n<tr><td>Operator procedure<\/td><td>Documented<\/td><td>Game-day rehearsal<\/td><td><span class=\"prod-badge info\">PENDING<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"prod-note\"><b>Separation of concerns:<\/b> application rollback restores software state. It does not automatically undo broker-side executions or close positions. Those are separate operational workflows requiring reconciliation.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"prodSignoff\" class=\"prod-section\">\r\n<div class=\"prod-card\"><h2>Production Sign-off<\/h2><div class=\"prod-desc\">Final release approval should be explicit and attributable. The prototype records the structure of the sign-off, not a real production authorization.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Owner<\/th><th>Area<\/th><th>Evidence<\/th><th>Decision<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Engineering<\/td><td>Application<\/td><td>Build & route checks<\/td><td>Approve<\/td><td><span class=\"prod-badge ok\">RECORDED<\/span><\/td><\/tr>\r\n<tr><td>Security<\/td><td>Access & secrets<\/td><td>Backend verification<\/td><td>Pending<\/td><td><span class=\"prod-badge warn\">PENDING<\/span><\/td><\/tr>\r\n<tr><td>Operations<\/td><td>Recovery<\/td><td>Incident rehearsal<\/td><td>Pending<\/td><td><span class=\"prod-badge info\">PENDING<\/span><\/td><\/tr>\r\n<tr><td>Trading Operations<\/td><td>Execution<\/td><td>Connector & reconciliation test<\/td><td>Pending<\/td><td><span class=\"prod-badge info\">PENDING<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype sign-off checklist opened.')\">Open Checklist<\/button><button class=\"btn\" onclick=\"alert('Prototype evidence review opened.')\">Review Evidence<\/button><\/div>\r\n<div class=\"prod-note\"><b>Release gate:<\/b> all critical backend, credential, recovery and broker-integration checks must be independently verified before any real-money deployment.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= INFRASTRUCTURE & SERVICE HEALTH ================= -->\r\n<section id=\"infrastructurePage\" class=\"hidden\">\r\n<div class=\"infra-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Infrastructure & Service Health<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Infrastructure & Service Health<\/h1><div class=\"subtitle\">Monitor the runtime dependencies that keep the MQLPro trading pipeline available, responsive and recoverable.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"infra-layout\">\r\n<aside class=\"infra-nav\">\r\n<a class=\"active\" data-infra-tab=\"overview\" onclick=\"infraTab('overview')\">Overview<\/a>\r\n<a data-infra-tab=\"services\" onclick=\"infraTab('services')\">Services<\/a>\r\n<a data-infra-tab=\"database\" onclick=\"infraTab('database')\">Database<\/a>\r\n<a data-infra-tab=\"queues\" onclick=\"infraTab('queues')\">Queues<\/a>\r\n<a data-infra-tab=\"recovery\" onclick=\"infraTab('recovery')\">Recovery<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"infraOverview\" class=\"infra-section active\">\r\n<div class=\"infra-card\"><h2>Infrastructure Overview<\/h2><div class=\"infra-desc\">Infrastructure health is separate from trading logic. A healthy service does not imply a successful trade; it means the dependency is available to perform its defined role.<\/div>\r\n<div class=\"infra-grid\">\r\n<div class=\"infra-stat\"><span>Services Healthy<\/span><b>14 \/ 15<\/b><\/div>\r\n<div class=\"infra-stat\"><span>API Availability<\/span><b>99.98%<\/b><\/div>\r\n<div class=\"infra-stat\"><span>Queue Depth<\/span><b>12<\/b><\/div>\r\n<div class=\"infra-stat\"><span>Recovery Readiness<\/span><b>94%<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"infra-card\"><h3>Critical Dependencies<\/h3>\r\n<div class=\"infra-row\"><div><div class=\"infra-main\">API Gateway<\/div><div class=\"infra-meta\">Authentication, routing and inbound service boundary<\/div><\/div><div>12 ms<\/div><div>99.99%<\/div><span class=\"infra-badge ok\">HEALTHY<\/span><\/div>\r\n<div class=\"infra-row\"><div><div class=\"infra-main\">Application Services<\/div><div class=\"infra-meta\">Signal, risk, orchestration and account services<\/div><\/div><div>28 ms<\/div><div>99.98%<\/div><span class=\"infra-badge ok\">HEALTHY<\/span><\/div>\r\n<div class=\"infra-row\"><div><div class=\"infra-main\">Message Queue<\/div><div class=\"infra-meta\">Durable execution and event processing<\/div><\/div><div>12 pending<\/div><div>0 stuck<\/div><span class=\"infra-badge ok\">HEALTHY<\/span><\/div>\r\n<div class=\"infra-row\"><div><div class=\"infra-main\">Database<\/div><div class=\"infra-meta\">Users, subscriptions, ledger, configuration and audit metadata<\/div><\/div><div>18 ms<\/div><div>99.99%<\/div><span class=\"infra-badge ok\">HEALTHY<\/span><\/div>\r\n<div class=\"infra-row\"><div><div class=\"infra-main\">Secrets \/ Configuration<\/div><div class=\"infra-meta\">Runtime credentials and environment configuration<\/div><\/div><div>Rotation due<\/div><div>2 items<\/div><span class=\"infra-badge warn\">REVIEW<\/span><\/div>\r\n<\/div>\r\n<div class=\"infra-note\"><b>Operational boundary:<\/b> infrastructure monitoring detects dependency failures. It should not silently retry financial actions without the execution policy and idempotency controls defined by the trading pipeline.<\/div>\r\n<\/div>\r\n\r\n<div id=\"infraServices\" class=\"infra-section\">\r\n<div class=\"infra-card\"><h2>Service Health<\/h2><div class=\"infra-desc\">Each service has an independent health state and dependency relationship.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Service<\/th><th>Instance<\/th><th>Latency<\/th><th>Error Rate<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Signal Intake<\/td><td>3 \/ 3<\/td><td>21 ms<\/td><td>0.08%<\/td><td><span class=\"infra-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Signal Engine<\/td><td>3 \/ 3<\/td><td>14 ms<\/td><td>0.02%<\/td><td><span class=\"infra-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Risk Engine<\/td><td>3 \/ 3<\/td><td>18 ms<\/td><td>0.11%<\/td><td><span class=\"infra-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Copy Orchestrator<\/td><td>4 \/ 4<\/td><td>38 ms<\/td><td>0.03%<\/td><td><span class=\"infra-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Connector Runtime<\/td><td>12 \/ 13<\/td><td>91 ms<\/td><td>0.42%<\/td><td><span class=\"infra-badge warn\">DEGRADED<\/span><\/td><\/tr>\r\n<tr><td>Reconciliation<\/td><td>3 \/ 3<\/td><td>4 sec<\/td><td>0.62%<\/td><td><span class=\"infra-badge warn\">WATCH<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"infraDatabase\" class=\"infra-section\">\r\n<div class=\"infra-card\"><h2>Database Health<\/h2><div class=\"infra-desc\">Database state supports operational records, configuration, subscriptions and audit metadata. Financial execution state should remain consistent with the broker reconciliation model.<\/div>\r\n<div class=\"infra-row\"><div><div class=\"infra-main\">Primary Database<\/div><div class=\"infra-meta\">Read\/write workload \u00b7 application state<\/div><\/div><div>18 ms<\/div><div>Healthy<\/div><span class=\"infra-badge ok\">ONLINE<\/span><\/div>\r\n<div class=\"infra-row\"><div><div class=\"infra-main\">Read Replica<\/div><div class=\"infra-meta\">Read workload \u00b7 reporting and dashboard queries<\/div><\/div><div>24 ms<\/div><div>Lag 0.4 sec<\/div><span class=\"infra-badge ok\">ONLINE<\/span><\/div>\r\n<div class=\"infra-row\"><div><div class=\"infra-main\">Backup Snapshot<\/div><div class=\"infra-meta\">Latest verified snapshot<\/div><\/div><div>02:00 UTC<\/div><div>Age 12h<\/div><span class=\"infra-badge ok\">AVAILABLE<\/span><\/div>\r\n<div class=\"infra-row\"><div><div class=\"infra-main\">Restore Test<\/div><div class=\"infra-meta\">Last complete recovery rehearsal<\/div><\/div><div>2026-09-02<\/div><div>14 min<\/div><span class=\"infra-badge warn\">RETEST<\/span><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"infraQueues\" class=\"infra-section\">\r\n<div class=\"infra-card\"><h2>Queue Health<\/h2><div class=\"infra-desc\">Queues isolate asynchronous work and provide durable request state. Every financial execution message should have an idempotency key or equivalent deduplication mechanism.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Queue<\/th><th>Depth<\/th><th>Oldest<\/th><th>Retry<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>signal-events<\/td><td>0<\/td><td>\u2014<\/td><td>0<\/td><td><span class=\"infra-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>execution-requests<\/td><td>7<\/td><td>1.8 sec<\/td><td>1<\/td><td><span class=\"infra-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>broker-results<\/td><td>3<\/td><td>0.9 sec<\/td><td>0<\/td><td><span class=\"infra-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>reconciliation<\/td><td>2<\/td><td>2.1 sec<\/td><td>1<\/td><td><span class=\"infra-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>dead-letter<\/td><td>0<\/td><td>\u2014<\/td><td>0<\/td><td><span class=\"infra-badge ok\">EMPTY<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"infraRecovery\" class=\"infra-section\">\r\n<div class=\"infra-card\"><h2>Recovery Readiness<\/h2><div class=\"infra-desc\">Recovery controls restore service availability while preserving the integrity of execution and reconciliation records.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Control<\/th><th>Last Test<\/th><th>Target<\/th><th>Evidence<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Service restart<\/td><td>2026-09-15<\/td><td>&lt; 2 min<\/td><td>Runbook #SR-12<\/td><td><span class=\"infra-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Database restore<\/td><td>2026-09-02<\/td><td>&lt; 30 min<\/td><td>Restore #DB-44<\/td><td><span class=\"infra-badge warn\">RETEST<\/span><\/td><\/tr>\r\n<tr><td>Queue replay<\/td><td>2026-09-10<\/td><td>No duplicates<\/td><td>Replay #Q-19<\/td><td><span class=\"infra-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Connector failover<\/td><td>2026-09-11<\/td><td>Controlled<\/td><td>Failover #CX-07<\/td><td><span class=\"infra-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Audit continuity<\/td><td>2026-09-12<\/td><td>No gaps<\/td><td>Audit #AU-31<\/td><td><span class=\"infra-badge ok\">PASS<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype recovery drill opened.')\">Run Recovery Drill<\/button><button class=\"btn\" onclick=\"alert('Prototype dependency report exported.')\">Export Report<\/button><\/div>\r\n<div class=\"infra-note\"><b>Recovery distinction:<\/b> restoring infrastructure does not authorize new trades, cancel broker orders, or close positions. After recovery, reconciliation must establish the actual broker state before normal execution resumes.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= DISASTER RECOVERY & BUSINESS CONTINUITY ================= -->\r\n<section id=\"disasterRecoveryPage\" class=\"hidden\">\r\n<div class=\"dr-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Disaster Recovery & Business Continuity<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Disaster Recovery & Business Continuity<\/h1><div class=\"subtitle\">Define how MQLPro continues operating, contains failures and restores service without losing execution or audit integrity.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"dr-layout\">\r\n<aside class=\"dr-nav\">\r\n<a class=\"active\" data-dr-tab=\"overview\" onclick=\"drTab('overview')\">Overview<\/a>\r\n<a data-dr-tab=\"rto\" onclick=\"drTab('rto')\">RTO \/ RPO<\/a>\r\n<a data-dr-tab=\"scenarios\" onclick=\"drTab('scenarios')\">Scenarios<\/a>\r\n<a data-dr-tab=\"continuity\" onclick=\"drTab('continuity')\">Continuity<\/a>\r\n<a data-dr-tab=\"drills\" onclick=\"drTab('drills')\">Recovery Drills<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"drOverview\" class=\"dr-section active\">\r\n<div class=\"dr-card\"><h2>Recovery Overview<\/h2><div class=\"dr-desc\">Disaster recovery is broader than restarting servers. The objective is to restore critical services while preserving durable execution state, account reconciliation and audit continuity.<\/div>\r\n<div class=\"dr-grid\">\r\n<div class=\"dr-stat\"><span>Critical Services<\/span><b>15<\/b><\/div>\r\n<div class=\"dr-stat\"><span>Recovery Plans<\/span><b>12 \/ 12<\/b><\/div>\r\n<div class=\"dr-stat\"><span>Last Full Drill<\/span><b>2026-09-02<\/b><\/div>\r\n<div class=\"dr-stat\"><span>Continuity Readiness<\/span><b>94%<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"dr-card\"><h3>Recovery Domains<\/h3>\r\n<div class=\"dr-row\"><div><div class=\"dr-main\">Application Services<\/div><div class=\"dr-meta\">Restore application instances, routing and configuration.<\/div><\/div><div>Target &lt; 10 min<\/div><div>Last 6 min<\/div><span class=\"dr-badge ok\">READY<\/span><\/div>\r\n<div class=\"dr-row\"><div><div class=\"dr-main\">Data Layer<\/div><div class=\"dr-meta\">Restore durable data and validate consistency before reopening writes.<\/div><\/div><div>Target &lt; 30 min<\/div><div>Last 14 min<\/div><span class=\"dr-badge ok\">READY<\/span><\/div>\r\n<div class=\"dr-row\"><div><div class=\"dr-main\">Trading Pipeline<\/div><div class=\"dr-meta\">Rebuild queues and processing state without duplicating execution requests.<\/div><\/div><div>Target &lt; 15 min<\/div><div>Last 11 min<\/div><span class=\"dr-badge ok\">READY<\/span><\/div>\r\n<div class=\"dr-row\"><div><div class=\"dr-main\">Broker Connectivity<\/div><div class=\"dr-meta\">Restore connectors, then compare broker state with internal state.<\/div><\/div><div>Target &lt; 20 min<\/div><div>Last 17 min<\/div><span class=\"dr-badge warn\">REVIEW<\/span><\/div>\r\n<\/div>\r\n<div class=\"dr-note\"><b>Core rule:<\/b> after a disaster, MQLPro should recover into a controlled state. New execution should remain paused until identity, queues, connector health and broker reconciliation have been verified.<\/div>\r\n<\/div>\r\n\r\n<div id=\"drRto\" class=\"dr-section\">\r\n<div class=\"dr-card\"><h2>RTO \/ RPO<\/h2><div class=\"dr-desc\">Recovery Time Objective (RTO) describes the target time to restore a service. Recovery Point Objective (RPO) describes the maximum acceptable amount of data loss for the defined workload.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Component<\/th><th>RTO Target<\/th><th>RPO Target<\/th><th>Current Evidence<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>API \/ Dashboard<\/td><td>&lt; 10 min<\/td><td>&lt; 5 min<\/td><td>Restore test 6 min<\/td><td><span class=\"dr-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Operational Database<\/td><td>&lt; 30 min<\/td><td>&lt; 15 min<\/td><td>Restore test 14 min<\/td><td><span class=\"dr-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Execution Queue<\/td><td>&lt; 15 min<\/td><td>0 lost requests<\/td><td>Replay test<\/td><td><span class=\"dr-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Audit Records<\/td><td>&lt; 30 min<\/td><td>0 gaps<\/td><td>Continuity test<\/td><td><span class=\"dr-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Broker State<\/td><td>&lt; 20 min<\/td><td>Reconcile before resume<\/td><td>Connector test<\/td><td><span class=\"dr-badge warn\">REVIEW<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"dr-note\"><b>Do not equate RPO with \u201cnumber of trades lost.\u201d<\/b> For financial execution, the system must reconcile actual broker state rather than assume an internal event log is the authoritative source of open positions.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"drScenarios\" class=\"dr-section\">\r\n<div class=\"dr-card\"><h2>Failure Scenarios<\/h2><div class=\"dr-desc\">Each scenario has a containment action, recovery path and explicit condition for resuming normal execution.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Scenario<\/th><th>Immediate Response<\/th><th>Recovery<\/th><th>Resume Condition<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Application outage<\/td><td>Fail traffic \/ preserve state<\/td><td>Restore instances<\/td><td>Health checks pass<\/td><td><span class=\"dr-badge ok\">DEFINED<\/span><\/td><\/tr>\r\n<tr><td>Database failure<\/td><td>Stop writes<\/td><td>Restore snapshot \/ replica<\/td><td>Consistency verified<\/td><td><span class=\"dr-badge ok\">DEFINED<\/span><\/td><\/tr>\r\n<tr><td>Queue failure<\/td><td>Pause execution consumers<\/td><td>Recover durable queue<\/td><td>Deduplication verified<\/td><td><span class=\"dr-badge ok\">DEFINED<\/span><\/td><\/tr>\r\n<tr><td>Connector outage<\/td><td>Pause affected execution path<\/td><td>Reconnect \/ fail over<\/td><td>Broker state reconciled<\/td><td><span class=\"dr-badge ok\">DEFINED<\/span><\/td><\/tr>\r\n<tr><td>Credential compromise<\/td><td>Revoke credential<\/td><td>Rotate and re-authenticate<\/td><td>Access audit complete<\/td><td><span class=\"dr-badge ok\">DEFINED<\/span><\/td><\/tr>\r\n<tr><td>Regional infrastructure loss<\/td><td>Activate recovery environment<\/td><td>Restore critical services<\/td><td>Full readiness gate<\/td><td><span class=\"dr-badge warn\">REHEARSE<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"drContinuity\" class=\"dr-section\">\r\n<div class=\"dr-card\"><h2>Business Continuity<\/h2><div class=\"dr-desc\">Continuity defines which functions remain available during degraded operation and which functions are deliberately suspended.<\/div>\r\n<div class=\"dr-row\"><div><div class=\"dr-main\">Read-only Dashboard<\/div><div class=\"dr-meta\">Users can inspect known internal state while writes are restricted.<\/div><\/div><div>Priority P1<\/div><div>Degraded mode<\/div><span class=\"dr-badge ok\">AVAILABLE<\/span><\/div>\r\n<div class=\"dr-row\"><div><div class=\"dr-main\">Signal Intake<\/div><div class=\"dr-meta\">Can accept events only when durable storage and downstream controls are healthy.<\/div><\/div><div>Priority P1<\/div><div>Conditional<\/div><span class=\"dr-badge warn\">GATED<\/span><\/div>\r\n<div class=\"dr-row\"><div><div class=\"dr-main\">New Trade Execution<\/div><div class=\"dr-meta\">Must remain paused when broker state or execution idempotency cannot be verified.<\/div><\/div><div>Priority P0<\/div><div>Fail-closed<\/div><span class=\"dr-badge info\">CONTROLLED<\/span><\/div>\r\n<div class=\"dr-row\"><div><div class=\"dr-main\">Reconciliation<\/div><div class=\"dr-meta\">Used to establish actual broker state after a connectivity or data incident.<\/div><\/div><div>Priority P0<\/div><div>Recovery path<\/div><span class=\"dr-badge ok\">REQUIRED<\/span><\/div>\r\n<div class=\"dr-row\"><div><div class=\"dr-main\">Audit Trail<\/div><div class=\"dr-meta\">Must remain durable across recovery and preserve operational traceability.<\/div><\/div><div>Priority P0<\/div><div>Continuous<\/div><span class=\"dr-badge ok\">REQUIRED<\/span><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"drDrills\" class=\"dr-section\">\r\n<div class=\"dr-card\"><h2>Recovery Drills<\/h2><div class=\"dr-desc\">Recovery procedures are only meaningful when rehearsed. Drill results should capture duration, evidence, failures and corrective actions.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Drill<\/th><th>Date<\/th><th>Duration<\/th><th>Result<\/th><th>Follow-up<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Database Restore<\/td><td>2026-09-02<\/td><td>14 min<\/td><td>Successful<\/td><td>Retest quarterly<\/td><\/tr>\r\n<tr><td>Queue Replay<\/td><td>2026-09-10<\/td><td>11 min<\/td><td>Successful<\/td><td>Keep dedupe test<\/td><\/tr>\r\n<tr><td>Connector Failover<\/td><td>2026-09-11<\/td><td>17 min<\/td><td>Successful<\/td><td>Test regional failover<\/td><\/tr>\r\n<tr><td>Audit Continuity<\/td><td>2026-09-12<\/td><td>8 min<\/td><td>Successful<\/td><td>Verify retention<\/td><\/tr>\r\n<tr><td>Regional Recovery<\/td><td>Pending<\/td><td>\u2014<\/td><td>Not tested<\/td><td>Schedule rehearsal<\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype recovery drill scheduler opened.')\">Schedule Drill<\/button><button class=\"btn\" onclick=\"alert('Prototype recovery evidence view opened.')\">View Evidence<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= INCIDENT MANAGEMENT & OPERATIONAL RESPONSE ================= -->\r\n<section id=\"incidentManagementPage\" class=\"hidden\">\r\n<div class=\"inc-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Incident Management<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Incident Management<\/h1><div class=\"subtitle\">Coordinate detection, containment, investigation, recovery and post-incident review without confusing service recovery with trading-state recovery.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"inc-layout\">\r\n<aside class=\"inc-nav\">\r\n<a class=\"active\" data-inc-tab=\"overview\" onclick=\"incTab('overview')\">Overview<\/a>\r\n<a data-inc-tab=\"active\" onclick=\"incTab('active')\">Active Incidents<\/a>\r\n<a data-inc-tab=\"runbooks\" onclick=\"incTab('runbooks')\">Runbooks<\/a>\r\n<a data-inc-tab=\"timeline\" onclick=\"incTab('timeline')\">Incident Timeline<\/a>\r\n<a data-inc-tab=\"postmortem\" onclick=\"incTab('postmortem')\">Post-Incident<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"incOverview\" class=\"inc-section active\">\r\n<div class=\"inc-card\"><h2>Operational Incident Overview<\/h2><div class=\"inc-desc\">An incident is an operational event that can affect availability, data integrity, security or trading execution. Severity determines the response path, not the blame assigned to an individual.<\/div>\r\n<div class=\"inc-grid\">\r\n<div class=\"inc-stat\"><span>Open Incidents<\/span><b>1<\/b><\/div>\r\n<div class=\"inc-stat\"><span>Critical<\/span><b>0<\/b><\/div>\r\n<div class=\"inc-stat\"><span>Last Major Incident<\/span><b>18 days ago<\/b><\/div>\r\n<div class=\"inc-stat\"><span>Runbooks Ready<\/span><b>18 \/ 18<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"inc-card\"><h3>Operational Domains<\/h3>\r\n<div class=\"inc-row\"><div><div class=\"inc-main\">Application Availability<\/div><div class=\"inc-meta\">Routing, frontend and backend service availability.<\/div><\/div><div>Severity S2<\/div><div>On-call<\/div><span class=\"inc-badge ok\">MONITORED<\/span><\/div>\r\n<div class=\"inc-row\"><div><div class=\"inc-main\">Data Integrity<\/div><div class=\"inc-meta\">Unexpected divergence, missing records or inconsistent state.<\/div><\/div><div>Severity S1<\/div><div>Immediate<\/div><span class=\"inc-badge ok\">MONITORED<\/span><\/div>\r\n<div class=\"inc-row\"><div><div class=\"inc-main\">Trading Execution<\/div><div class=\"inc-meta\">Unexpected order state, connector outage or execution mismatch.<\/div><\/div><div>Severity S0<\/div><div>Immediate<\/div><span class=\"inc-badge warn\">HIGH PRIORITY<\/span><\/div>\r\n<div class=\"inc-row\"><div><div class=\"inc-main\">Security<\/div><div class=\"inc-meta\">Credential compromise, unauthorized access or suspicious activity.<\/div><\/div><div>Severity S0<\/div><div>Immediate<\/div><span class=\"inc-badge warn\">HIGH PRIORITY<\/span><\/div>\r\n<\/div>\r\n<div class=\"inc-note\"><b>Fail-safe principle:<\/b> if an incident can make the system's internal execution state unreliable, affected trading actions should be paused until the broker state and internal state can be reconciled.<\/div>\r\n<\/div>\r\n\r\n<div id=\"incActive\" class=\"inc-section\">\r\n<div class=\"inc-card\"><h2>Active Incidents<\/h2><div class=\"inc-desc\">Current operational events and their containment state.<\/div>\r\n<div class=\"inc-row\"><div><div class=\"inc-main\">INC-2026-014 \u00b7 Connector latency degradation<\/div><div class=\"inc-meta\">Affected scope: one connector runtime \u00b7 Detection: automated latency alert \u00b7 No confirmed duplicate execution.<\/div><\/div><div>SEV-2<\/div><div>Investigating<\/div><span class=\"inc-badge warn\">OPEN<\/span><\/div>\r\n<div class=\"inc-row\"><div><div class=\"inc-main\">No other active critical incidents<\/div><div class=\"inc-meta\">Security, database and queue health currently within defined thresholds.<\/div><\/div><div>\u2014<\/div><div>\u2014<\/div><span class=\"inc-badge ok\">CLEAR<\/span><\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype incident containment workflow opened.')\">Open Incident<\/button><button class=\"btn\" onclick=\"alert('Prototype incident escalation workflow opened.')\">Escalate<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"incRunbooks\" class=\"inc-section\">\r\n<div class=\"inc-card\"><h2>Operational Runbooks<\/h2><div class=\"inc-desc\">Runbooks provide repeatable response steps. Production procedures should live in version-controlled operational documentation and require appropriate authorization.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Runbook<\/th><th>Trigger<\/th><th>Primary Action<\/th><th>Resume Gate<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>RB-01 Application Outage<\/td><td>5xx \/ availability<\/td><td>Failover \/ restart<\/td><td>Health checks<\/td><td><span class=\"inc-badge ok\">READY<\/span><\/td><\/tr>\r\n<tr><td>RB-02 Database Recovery<\/td><td>DB unavailable<\/td><td>Protect writes \/ restore<\/td><td>Consistency check<\/td><td><span class=\"inc-badge ok\">READY<\/span><\/td><\/tr>\r\n<tr><td>RB-03 Queue Recovery<\/td><td>Queue stalled<\/td><td>Pause consumers \/ recover<\/td><td>Deduplication check<\/td><td><span class=\"inc-badge ok\">READY<\/span><\/td><\/tr>\r\n<tr><td>RB-04 Connector Failure<\/td><td>Broker link loss<\/td><td>Pause affected path<\/td><td>Broker reconciliation<\/td><td><span class=\"inc-badge ok\">READY<\/span><\/td><\/tr>\r\n<tr><td>RB-05 Security Incident<\/td><td>Credential anomaly<\/td><td>Revoke \/ contain<\/td><td>Access review<\/td><td><span class=\"inc-badge ok\">READY<\/span><\/td><\/tr>\r\n<tr><td>RB-06 Data Divergence<\/td><td>State mismatch<\/td><td>Freeze affected actions<\/td><td>Reconciliation complete<\/td><td><span class=\"inc-badge warn\">REVIEW<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"incTimeline\" class=\"inc-section\">\r\n<div class=\"inc-card\"><h2>Incident Timeline<\/h2><div class=\"inc-desc\">Timeline entries establish what happened and when. They should be append-only and attributable in a production audit system.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Time<\/th><th>Event<\/th><th>Actor<\/th><th>Evidence<\/th><th>State<\/th><\/tr><\/thead><tbody>\r\n<tr><td>22:14:02<\/td><td>Latency threshold exceeded<\/td><td>Monitoring<\/td><td>ALERT-9182<\/td><td><span class=\"inc-badge info\">DETECTED<\/span><\/td><\/tr>\r\n<tr><td>22:14:18<\/td><td>Connector path marked degraded<\/td><td>Automation<\/td><td>HEALTH-447<\/td><td><span class=\"inc-badge warn\">CONTAINED<\/span><\/td><\/tr>\r\n<tr><td>22:15:01<\/td><td>Affected execution path paused<\/td><td>Policy<\/td><td>POL-EXEC-04<\/td><td><span class=\"inc-badge ok\">SAFE<\/span><\/td><\/tr>\r\n<tr><td>22:17:42<\/td><td>Connector diagnostics started<\/td><td>Operator<\/td><td>RUN-2231<\/td><td><span class=\"inc-badge info\">INVESTIGATING<\/span><\/td><\/tr>\r\n<tr><td>Pending<\/td><td>Broker reconciliation<\/td><td>Operations<\/td><td>\u2014<\/td><td><span class=\"inc-badge warn\">PENDING<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"incPostmortem\" class=\"inc-section\">\r\n<div class=\"inc-card\"><h2>Post-Incident Review<\/h2><div class=\"inc-desc\">The review focuses on system conditions, detection quality, recovery time and preventive controls. The objective is learning and risk reduction.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Review Item<\/th><th>Evidence<\/th><th>Owner<\/th><th>State<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Root cause \/ contributing factors<\/td><td>Logs + metrics + change history<\/td><td>Engineering<\/td><td><span class=\"inc-badge info\">REQUIRED<\/span><\/td><\/tr>\r\n<tr><td>Customer \/ account impact<\/td><td>Scope and affected accounts<\/td><td>Operations<\/td><td><span class=\"inc-badge info\">REQUIRED<\/span><\/td><\/tr>\r\n<tr><td>Trading-state impact<\/td><td>Broker vs internal reconciliation<\/td><td>Trading Ops<\/td><td><span class=\"inc-badge warn\">REQUIRED<\/span><\/td><\/tr>\r\n<tr><td>Detection \/ response quality<\/td><td>Alert and incident timeline<\/td><td>SRE<\/td><td><span class=\"inc-badge info\">REQUIRED<\/span><\/td><\/tr>\r\n<tr><td>Corrective actions<\/td><td>Tracked remediation tasks<\/td><td>Owner assigned<\/td><td><span class=\"inc-badge info\">REQUIRED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype post-incident review opened.')\">Create Review<\/button><button class=\"btn\" onclick=\"alert('Prototype corrective-action tracker opened.')\">Track Actions<\/button><\/div>\r\n<div class=\"inc-note\"><b>Important:<\/b> an incident review should not declare an incident \u201cresolved\u201d merely because the application is online. Resolution includes confirming that affected financial execution state is understood and reconciled.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= MONITORING, ALERTING & SLO CONTROL ================= -->\r\n<section id=\"monitoringPage\" class=\"hidden\">\r\n<div class=\"mon-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Monitoring & SLO<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Monitoring, Alerting & SLO<\/h1><div class=\"subtitle\">Turn system telemetry into operational signals with defined thresholds, service objectives and actionable alerts.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"mon-layout\">\r\n<aside class=\"mon-nav\">\r\n<a class=\"active\" data-mon-tab=\"overview\" onclick=\"monTab('overview')\">Overview<\/a>\r\n<a data-mon-tab=\"metrics\" onclick=\"monTab('metrics')\">Metrics<\/a>\r\n<a data-mon-tab=\"alerts\" onclick=\"monTab('alerts')\">Alerts<\/a>\r\n<a data-mon-tab=\"slo\" onclick=\"monTab('slo')\">SLO \/ Error Budget<\/a>\r\n<a data-mon-tab=\"telemetry\" onclick=\"monTab('telemetry')\">Telemetry<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"monOverview\" class=\"mon-section active\">\r\n<div class=\"mon-card\"><h2>Monitoring Overview<\/h2><div class=\"mon-desc\">Monitoring provides evidence about system behavior. It does not replace authorization, execution controls or broker reconciliation.<\/div>\r\n<div class=\"mon-grid\">\r\n<div class=\"mon-stat\"><span>Services Monitored<\/span><b>15 \/ 15<\/b><\/div>\r\n<div class=\"mon-stat\"><span>Active Alerts<\/span><b>2<\/b><\/div>\r\n<div class=\"mon-stat\"><span>SLOs Within Target<\/span><b>7 \/ 8<\/b><\/div>\r\n<div class=\"mon-stat\"><span>Telemetry Ingest<\/span><b>99.97%<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"mon-card\"><h3>Key Signals<\/h3>\r\n<div class=\"mon-row\"><div><div class=\"mon-main\">API Availability<\/div><div class=\"mon-meta\">Successful requests across public and authenticated endpoints.<\/div><\/div><div>99.99%<\/div><div>Target 99.90%<\/div><span class=\"mon-badge ok\">HEALTHY<\/span><\/div>\r\n<div class=\"mon-row\"><div><div class=\"mon-main\">Execution Queue Age<\/div><div class=\"mon-meta\">Age of the oldest pending execution request.<\/div><\/div><div>1.8 sec<\/div><div>Alert &gt; 10 sec<\/div><span class=\"mon-badge ok\">NORMAL<\/span><\/div>\r\n<div class=\"mon-row\"><div><div class=\"mon-main\">Connector Latency<\/div><div class=\"mon-meta\">Round-trip latency for broker connector operations.<\/div><\/div><div>91 ms<\/div><div>Alert &gt; 75 ms<\/div><span class=\"mon-badge warn\">ALERT<\/span><\/div>\r\n<div class=\"mon-row\"><div><div class=\"mon-main\">Reconciliation Lag<\/div><div class=\"mon-meta\">Time between broker observation and internal reconciliation.<\/div><\/div><div>4 sec<\/div><div>Target &lt; 10 sec<\/div><span class=\"mon-badge ok\">NORMAL<\/span><\/div>\r\n<\/div>\r\n<div class=\"mon-note\"><b>Alerting principle:<\/b> an alert should correspond to an actionable condition. High-volume informational events should not be treated as incidents merely because they are visible.<\/div>\r\n<\/div>\r\n\r\n<div id=\"monMetrics\" class=\"mon-section\">\r\n<div class=\"mon-card\"><h2>System Metrics<\/h2><div class=\"mon-desc\">Core metrics used to detect degradation across the application and trading pipeline.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Metric<\/th><th>Current<\/th><th>Target<\/th><th>Window<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>HTTP 5xx rate<\/td><td>0.08%<\/td><td>&lt; 0.50%<\/td><td>5 min<\/td><td><span class=\"mon-badge ok\">NORMAL<\/span><\/td><\/tr>\r\n<tr><td>API p95 latency<\/td><td>142 ms<\/td><td>&lt; 300 ms<\/td><td>5 min<\/td><td><span class=\"mon-badge ok\">NORMAL<\/span><\/td><\/tr>\r\n<tr><td>Queue depth<\/td><td>12<\/td><td>&lt; 100<\/td><td>1 min<\/td><td><span class=\"mon-badge ok\">NORMAL<\/span><\/td><\/tr>\r\n<tr><td>Connector latency<\/td><td>91 ms<\/td><td>&lt; 75 ms<\/td><td>5 min<\/td><td><span class=\"mon-badge warn\">DEGRADED<\/span><\/td><\/tr>\r\n<tr><td>Database connections<\/td><td>42 \/ 200<\/td><td>&lt; 160<\/td><td>1 min<\/td><td><span class=\"mon-badge ok\">NORMAL<\/span><\/td><\/tr>\r\n<tr><td>Reconciliation lag<\/td><td>4 sec<\/td><td>&lt; 10 sec<\/td><td>5 min<\/td><td><span class=\"mon-badge ok\">NORMAL<\/span><\/td><\/tr>\r\n<tr><td>Audit ingest delay<\/td><td>0.7 sec<\/td><td>&lt; 5 sec<\/td><td>5 min<\/td><td><span class=\"mon-badge ok\">NORMAL<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"monAlerts\" class=\"mon-section\">\r\n<div class=\"mon-card\"><h2>Alert Rules<\/h2><div class=\"mon-desc\">Alerts are evaluated against thresholds and routed to the appropriate operational owner.<\/div>\r\n<div class=\"mon-row\"><div><div class=\"mon-main\">AL-001 \u00b7 Connector latency<\/div><div class=\"mon-meta\">Trigger when p95 connector latency exceeds 75 ms for 5 minutes.<\/div><\/div><div>SEV-2<\/div><div>Trading Ops<\/div><span class=\"mon-badge warn\">ACTIVE<\/span><\/div>\r\n<div class=\"mon-row\"><div><div class=\"mon-main\">AL-002 \u00b7 Queue backlog<\/div><div class=\"mon-meta\">Trigger when execution queue exceeds 100 pending requests for 2 minutes.<\/div><\/div><div>SEV-1<\/div><div>Engineering<\/div><span class=\"mon-badge ok\">ARMED<\/span><\/div>\r\n<div class=\"mon-row\"><div><div class=\"mon-main\">AL-003 \u00b7 Reconciliation divergence<\/div><div class=\"mon-meta\">Trigger when broker and internal state remain inconsistent beyond defined tolerance.<\/div><\/div><div>SEV-0<\/div><div>Trading Ops<\/div><span class=\"mon-badge ok\">ARMED<\/span><\/div>\r\n<div class=\"mon-row\"><div><div class=\"mon-main\">AL-004 \u00b7 Authentication anomaly<\/div><div class=\"mon-meta\">Trigger on unusual login or credential activity according to security policy.<\/div><\/div><div>SEV-0<\/div><div>Security<\/div><span class=\"mon-badge ok\">ARMED<\/span><\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype alert rule editor opened.')\">Create Rule<\/button><button class=\"btn\" onclick=\"alert('Prototype alert routing editor opened.')\">Routing<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"monSlo\" class=\"mon-section\">\r\n<div class=\"mon-card\"><h2>SLO \/ Error Budget<\/h2><div class=\"mon-desc\">Service Level Objectives define reliability targets over a measurement period. Error budget represents the allowed unreliability before reliability work takes priority.<\/div>\r\n<div class=\"mon-row\"><div><div class=\"mon-main\">API Availability<\/div><div class=\"mon-meta\">Monthly objective: 99.90%<\/div><div class=\"mon-meter\"><span style=\"width:92%\"><\/span><\/div><\/div><div>99.99%<\/div><div>Budget 92%<\/div><span class=\"mon-badge ok\">WITHIN SLO<\/span><\/div>\r\n<div class=\"mon-row\"><div><div class=\"mon-main\">Execution Queue Processing<\/div><div class=\"mon-meta\">Requests processed within defined latency objective.<\/div><div class=\"mon-meter\"><span style=\"width:88%\"><\/span><\/div><\/div><div>99.96%<\/div><div>Budget 88%<\/div><span class=\"mon-badge ok\">WITHIN SLO<\/span><\/div>\r\n<div class=\"mon-row\"><div><div class=\"mon-main\">Reconciliation Freshness<\/div><div class=\"mon-meta\">Broker state observed and reconciled within target window.<\/div><div class=\"mon-meter\"><span style=\"width:74%\"><\/span><\/div><\/div><div>99.71%<\/div><div>Budget 74%<\/div><span class=\"mon-badge warn\">WATCH<\/span><\/div>\r\n<div class=\"mon-row\"><div><div class=\"mon-main\">Connector Availability<\/div><div class=\"mon-meta\">Connector service available for its defined operational window.<\/div><div class=\"mon-meter\"><span style=\"width:61%\"><\/span><\/div><\/div><div>99.42%<\/div><div>Budget 61%<\/div><span class=\"mon-badge warn\">WATCH<\/span><\/div>\r\n<div class=\"mon-note\"><b>Governance:<\/b> an exhausted error budget should trigger reliability review. It should not be used as an automatic instruction to increase trading activity or take financial risk.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"monTelemetry\" class=\"mon-section\">\r\n<div class=\"mon-card\"><h2>Telemetry Pipeline<\/h2><div class=\"mon-desc\">Telemetry should preserve enough context to investigate failures while respecting access controls and sensitive-data policies.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Source<\/th><th>Type<\/th><th>Retention<\/th><th>Ingest<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Application Services<\/td><td>Logs \/ Metrics<\/td><td>30 days<\/td><td>99.99%<\/td><td><span class=\"mon-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Execution Pipeline<\/td><td>Events \/ Metrics<\/td><td>90 days<\/td><td>99.98%<\/td><td><span class=\"mon-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Broker Connectors<\/td><td>Logs \/ State<\/td><td>90 days<\/td><td>99.95%<\/td><td><span class=\"mon-badge warn\">WATCH<\/span><\/td><\/tr>\r\n<tr><td>Security Events<\/td><td>Audit \/ Alerts<\/td><td>365 days<\/td><td>99.99%<\/td><td><span class=\"mon-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<tr><td>Infrastructure<\/td><td>Metrics<\/td><td>30 days<\/td><td>99.97%<\/td><td><span class=\"mon-badge ok\">HEALTHY<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"mon-note\"><b>Privacy boundary:<\/b> telemetry should avoid unnecessary secrets or credentials. Production logs must use redaction and access controls appropriate to the data they contain.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= AUDIT, COMPLIANCE & GOVERNANCE CONTROL ================= -->\r\n<section id=\"governancePage\" class=\"hidden\">\r\n<div class=\"gov-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Audit, Compliance & Governance<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Audit, Compliance & Governance<\/h1><div class=\"subtitle\">Establish traceability, controlled access, change accountability and operational evidence across the MQLPro platform.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"gov-layout\">\r\n<aside class=\"gov-nav\">\r\n<a class=\"active\" data-gov-tab=\"overview\" onclick=\"govTab('overview')\">Overview<\/a>\r\n<a data-gov-tab=\"audit\" onclick=\"govTab('audit')\">Audit Trail<\/a>\r\n<a data-gov-tab=\"access\" onclick=\"govTab('access')\">Access Governance<\/a>\r\n<a data-gov-tab=\"changes\" onclick=\"govTab('changes')\">Change Control<\/a>\r\n<a data-gov-tab=\"policies\" onclick=\"govTab('policies')\">Policies<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"govOverview\" class=\"gov-section active\">\r\n<div class=\"gov-card\"><h2>Governance Overview<\/h2><div class=\"gov-desc\">Governance connects operational controls with evidence. Every sensitive action should have an accountable actor, a defined authorization path and an auditable record.<\/div>\r\n<div class=\"gov-grid\">\r\n<div class=\"gov-stat\"><span>Audit Coverage<\/span><b>99.98%<\/b><\/div>\r\n<div class=\"gov-stat\"><span>Privileged Users<\/span><b>8<\/b><\/div>\r\n<div class=\"gov-stat\"><span>Policy Controls<\/span><b>24 \/ 24<\/b><\/div>\r\n<div class=\"gov-stat\"><span>Open Findings<\/span><b>2<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"gov-card\"><h3>Governance Domains<\/h3>\r\n<div class=\"gov-row\"><div><div class=\"gov-main\">Audit Trail Integrity<\/div><div class=\"gov-meta\">Append-only operational evidence for authentication, configuration and execution events.<\/div><\/div><div>Coverage 99.98%<\/div><div>Continuous<\/div><span class=\"gov-badge ok\">HEALTHY<\/span><\/div>\r\n<div class=\"gov-row\"><div><div class=\"gov-main\">Access Governance<\/div><div class=\"gov-meta\">Role-based access, privileged actions and periodic access review.<\/div><\/div><div>8 privileged<\/div><div>Monthly review<\/div><span class=\"gov-badge ok\">CONTROLLED<\/span><\/div>\r\n<div class=\"gov-row\"><div><div class=\"gov-main\">Change Management<\/div><div class=\"gov-meta\">Production changes require traceability, approval and rollback evidence.<\/div><\/div><div>18 changes<\/div><div>30-day window<\/div><span class=\"gov-badge ok\">CONTROLLED<\/span><\/div>\r\n<div class=\"gov-row\"><div><div class=\"gov-main\">Compliance Findings<\/div><div class=\"gov-meta\">Open findings require owner, due date, evidence and closure verification.<\/div><\/div><div>2 open<\/div><div>Review weekly<\/div><span class=\"gov-badge warn\">REVIEW<\/span><\/div>\r\n<\/div>\r\n<div class=\"gov-note\"><b>Governance principle:<\/b> a dashboard indicator is not evidence by itself. Production controls should retain durable records that can be independently reviewed.<\/div>\r\n<\/div>\r\n\r\n<div id=\"govAudit\" class=\"gov-section\">\r\n<div class=\"gov-card\"><h2>Audit Trail<\/h2><div class=\"gov-desc\">Audit records should answer who acted, what changed, when it happened, what authorization applied and what outcome resulted.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Event<\/th><th>Actor<\/th><th>Authorization<\/th><th>Timestamp<\/th><th>Result<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Production configuration change<\/td><td>admin-02<\/td><td>CHG-2041<\/td><td>2026-09-16 18:42<\/td><td><span class=\"gov-badge ok\">SUCCESS<\/span><\/td><\/tr>\r\n<tr><td>Connector credential rotation<\/td><td>ops-01<\/td><td>SEC-882<\/td><td>2026-09-16 17:11<\/td><td><span class=\"gov-badge ok\">SUCCESS<\/span><\/td><\/tr>\r\n<tr><td>Execution policy update<\/td><td>trading-ops<\/td><td>POL-119<\/td><td>2026-09-16 15:33<\/td><td><span class=\"gov-badge ok\">SUCCESS<\/span><\/td><\/tr>\r\n<tr><td>Privileged login<\/td><td>admin-04<\/td><td>MFA + role<\/td><td>2026-09-16 13:08<\/td><td><span class=\"gov-badge info\">RECORDED<\/span><\/td><\/tr>\r\n<tr><td>Failed authorization<\/td><td>user-173<\/td><td>Denied by policy<\/td><td>2026-09-16 11:49<\/td><td><span class=\"gov-badge warn\">DENIED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype audit export opened.')\">Export Evidence<\/button><button class=\"btn\" onclick=\"alert('Prototype audit search opened.')\">Search Audit<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"govAccess\" class=\"gov-section\">\r\n<div class=\"gov-card\"><h2>Access Governance<\/h2><div class=\"gov-desc\">Access should follow least privilege, separation of duties and periodic review. High-impact operations should require explicit authorization.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Role<\/th><th>Users<\/th><th>Privileged Actions<\/th><th>Review<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Platform Admin<\/td><td>2<\/td><td>Configuration \/ user access<\/td><td>Monthly<\/td><td><span class=\"gov-badge ok\">REVIEWED<\/span><\/td><\/tr>\r\n<tr><td>Trading Operations<\/td><td>3<\/td><td>Execution controls \/ reconciliation<\/td><td>Monthly<\/td><td><span class=\"gov-badge ok\">REVIEWED<\/span><\/td><\/tr>\r\n<tr><td>Security<\/td><td>2<\/td><td>Credentials \/ security controls<\/td><td>Monthly<\/td><td><span class=\"gov-badge ok\">REVIEWED<\/span><\/td><\/tr>\r\n<tr><td>Read-only Analyst<\/td><td>11<\/td><td>None<\/td><td>Quarterly<\/td><td><span class=\"gov-badge ok\">REVIEWED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"gov-note\"><b>Separation of duties:<\/b> where practical, the person requesting a high-impact production change should not be the sole person approving and validating that same change.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"govChanges\" class=\"gov-section\">\r\n<div class=\"gov-card\"><h2>Change Control<\/h2><div class=\"gov-desc\">Changes affecting execution, risk, connectivity or security should be attributable and reversible. Emergency changes require retrospective review.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Change<\/th><th>Owner<\/th><th>Approval<\/th><th>Rollback<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>API release v2.8.4<\/td><td>Engineering<\/td><td>CHG-2044<\/td><td>Verified<\/td><td><span class=\"gov-badge ok\">COMPLETE<\/span><\/td><\/tr>\r\n<tr><td>Connector runtime patch<\/td><td>Platform<\/td><td>CHG-2043<\/td><td>Verified<\/td><td><span class=\"gov-badge ok\">COMPLETE<\/span><\/td><\/tr>\r\n<tr><td>Risk policy threshold update<\/td><td>Trading Ops<\/td><td>CHG-2042<\/td><td>Pending test<\/td><td><span class=\"gov-badge warn\">REVIEW<\/span><\/td><\/tr>\r\n<tr><td>Database maintenance<\/td><td>SRE<\/td><td>CHG-2040<\/td><td>Verified<\/td><td><span class=\"gov-badge ok\">COMPLETE<\/span><\/td><\/tr>\r\n<tr><td>Emergency connector mitigation<\/td><td>Operations<\/td><td>Emergency<\/td><td>Post-review pending<\/td><td><span class=\"gov-badge warn\">FOLLOW-UP<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"govPolicies\" class=\"gov-section\">\r\n<div class=\"gov-card\"><h2>Policy Controls<\/h2><div class=\"gov-desc\">Policies define the boundaries within which the platform may operate. Technical enforcement should be paired with periodic review.<\/div>\r\n<div class=\"gov-row\"><div><div class=\"gov-main\">Authentication & Session Policy<\/div><div class=\"gov-meta\">MFA, session expiry and privileged login controls.<\/div><\/div><div>POL-AUTH-01<\/div><div>Monthly<\/div><span class=\"gov-badge ok\">ACTIVE<\/span><\/div>\r\n<div class=\"gov-row\"><div><div class=\"gov-main\">Execution Authorization Policy<\/div><div class=\"gov-meta\">Defines which actors and services may submit or control execution actions.<\/div><\/div><div>POL-EXEC-04<\/div><div>Monthly<\/div><span class=\"gov-badge ok\">ACTIVE<\/span><\/div>\r\n<div class=\"gov-row\"><div><div class=\"gov-main\">Data Retention Policy<\/div><div class=\"gov-meta\">Defines retention and access requirements for audit and operational records.<\/div><\/div><div>POL-DATA-02<\/div><div>Quarterly<\/div><span class=\"gov-badge ok\">ACTIVE<\/span><\/div>\r\n<div class=\"gov-row\"><div><div class=\"gov-main\">Incident Response Policy<\/div><div class=\"gov-meta\">Defines severity, escalation, containment and post-incident review requirements.<\/div><\/div><div>POL-INC-03<\/div><div>Quarterly<\/div><span class=\"gov-badge ok\">ACTIVE<\/span><\/div>\r\n<div class=\"gov-row\"><div><div class=\"gov-main\">Change Management Policy<\/div><div class=\"gov-meta\">Defines approval, testing, deployment and rollback requirements.<\/div><\/div><div>POL-CHG-05<\/div><div>Quarterly<\/div><span class=\"gov-badge ok\">ACTIVE<\/span><\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= DATA GOVERNANCE & RETENTION CONTROL ================= -->\r\n<section id=\"dataGovernancePage\" class=\"hidden\">\r\n<div class=\"data-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Data Governance<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Data Governance & Retention<\/h1><div class=\"subtitle\">Define how MQLPro classifies, stores, protects, retains, exports and disposes of platform data across its lifecycle.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"data-layout\">\r\n<aside class=\"data-nav\">\r\n<a class=\"active\" data-data-tab=\"overview\" onclick=\"dataTab('overview')\">Overview<\/a>\r\n<a data-data-tab=\"classification\" onclick=\"dataTab('classification')\">Classification<\/a>\r\n<a data-data-tab=\"lifecycle\" onclick=\"dataTab('lifecycle')\">Data Lifecycle<\/a>\r\n<a data-data-tab=\"retention\" onclick=\"dataTab('retention')\">Retention<\/a>\r\n<a data-data-tab=\"access\" onclick=\"dataTab('access')\">Data Access<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"dataOverview\" class=\"data-section active\">\r\n<div class=\"data-card\"><h2>Data Governance Overview<\/h2><div class=\"data-desc\">Data governance establishes ownership, classification, retention and access rules so operational data remains useful, traceable and appropriately protected throughout its lifecycle.<\/div>\r\n<div class=\"data-grid\">\r\n<div class=\"data-stat\"><span>Data Domains<\/span><b>9<\/b><\/div>\r\n<div class=\"data-stat\"><span>Retention Policies<\/span><b>9 \/ 9<\/b><\/div>\r\n<div class=\"data-stat\"><span>Classified Assets<\/span><b>100%<\/b><\/div>\r\n<div class=\"data-stat\"><span>Open Data Findings<\/span><b>1<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"data-card\"><h3>Primary Data Domains<\/h3>\r\n<div class=\"data-row\"><div><div class=\"data-main\">Identity & Account Data<\/div><div class=\"data-meta\">User identity, authentication and account-management records.<\/div><\/div><div>Restricted<\/div><div>Owner: IAM<\/div><span class=\"data-badge ok\">CONTROLLED<\/span><\/div>\r\n<div class=\"data-row\"><div><div class=\"data-main\">Signal & Strategy Data<\/div><div class=\"data-meta\">Signal metadata, strategy configuration and marketplace information.<\/div><\/div><div>Confidential<\/div><div>Owner: Product<\/div><span class=\"data-badge ok\">CONTROLLED<\/span><\/div>\r\n<div class=\"data-row\"><div><div class=\"data-main\">Trading & Execution Data<\/div><div class=\"data-meta\">Execution events, order state, reconciliation records and connector state.<\/div><\/div><div>Restricted<\/div><div>Owner: Trading Ops<\/div><span class=\"data-badge ok\">CONTROLLED<\/span><\/div>\r\n<div class=\"data-row\"><div><div class=\"data-main\">Audit & Security Data<\/div><div class=\"data-meta\">Authentication, authorization, configuration and security-event records.<\/div><\/div><div>Restricted<\/div><div>Owner: Security<\/div><span class=\"data-badge ok\">CONTROLLED<\/span><\/div>\r\n<\/div>\r\n<div class=\"data-note\"><b>Data governance principle:<\/b> retention is not the same as indefinite storage. Each data class should have a documented purpose, owner, retention period and disposal or archival rule.<\/div>\r\n<\/div>\r\n\r\n<div id=\"dataClassification\" class=\"data-section\">\r\n<div class=\"data-card\"><h2>Data Classification<\/h2><div class=\"data-desc\">Classification determines the controls required for storage, access, export and disposal. Labels should be applied consistently across databases, files, logs and backups.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Class<\/th><th>Examples<\/th><th>Access<\/th><th>Export<\/th><th>Control<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Public<\/td><td>Public marketplace descriptions<\/td><td>Open<\/td><td>Allowed<\/td><td><span class=\"data-badge info\">STANDARD<\/span><\/td><\/tr>\r\n<tr><td>Internal<\/td><td>Operational documentation<\/td><td>Authenticated<\/td><td>Controlled<\/td><td><span class=\"data-badge ok\">CONTROLLED<\/span><\/td><\/tr>\r\n<tr><td>Confidential<\/td><td>Strategy metadata \/ commercial data<\/td><td>Role-based<\/td><td>Restricted<\/td><td><span class=\"data-badge ok\">RESTRICTED<\/span><\/td><\/tr>\r\n<tr><td>Restricted<\/td><td>Credentials \/ account \/ execution records<\/td><td>Least privilege<\/td><td>Approval required<\/td><td><span class=\"data-badge warn\">HIGH CONTROL<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"data-note\"><b>Secret handling:<\/b> credentials, API keys and similar authentication material should not be exposed through ordinary application views, exports or logs. Store secrets using an appropriate secret-management mechanism.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"dataLifecycle\" class=\"data-section\">\r\n<div class=\"data-card\"><h2>Data Lifecycle<\/h2><div class=\"data-desc\">Every major data domain should have a predictable lifecycle from collection through active use, archival and final disposal.<\/div>\r\n<div class=\"data-row\"><div><div class=\"data-main\">1. Collection<\/div><div class=\"data-meta\">Capture only data required for a defined product, operational or compliance purpose.<\/div><\/div><div>Purpose-bound<\/div><div>Validation<\/div><span class=\"data-badge ok\">CONTROLLED<\/span><\/div>\r\n<div class=\"data-row\"><div><div class=\"data-main\">2. Active Processing<\/div><div class=\"data-meta\">Use data through authorized services and role-based access controls.<\/div><\/div><div>Role-based<\/div><div>Audit<\/div><span class=\"data-badge ok\">CONTROLLED<\/span><\/div>\r\n<div class=\"data-row\"><div><div class=\"data-main\">3. Archival<\/div><div class=\"data-meta\">Move records that are no longer operationally active but must be retained.<\/div><\/div><div>Encrypted<\/div><div>Retention<\/div><span class=\"data-badge ok\">CONTROLLED<\/span><\/div>\r\n<div class=\"data-row\"><div><div class=\"data-main\">4. Disposal<\/div><div class=\"data-meta\">Delete or securely dispose of data after its approved retention period and legal holds.<\/div><\/div><div>Verified<\/div><div>Evidence<\/div><span class=\"data-badge info\">GOVERNED<\/span><\/div>\r\n<div class=\"data-note\"><b>Lifecycle exception:<\/b> a legal, regulatory or incident-related hold can suspend ordinary disposal. The hold itself should be recorded and have an accountable owner.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"dataRetention\" class=\"data-section\">\r\n<div class=\"data-card\"><h2>Retention Schedule<\/h2><div class=\"data-desc\">Illustrative retention controls for the MQLPro architecture. Final production periods must be aligned with applicable legal, contractual and business requirements.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Data Domain<\/th><th>Active Retention<\/th><th>Archive<\/th><th>Disposal Rule<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Authentication Events<\/td><td>90 days<\/td><td>365 days<\/td><td>Scheduled deletion<\/td><td><span class=\"data-badge ok\">DEFINED<\/span><\/td><\/tr>\r\n<tr><td>Audit Events<\/td><td>180 days<\/td><td>365 days<\/td><td>Policy-controlled<\/td><td><span class=\"data-badge ok\">DEFINED<\/span><\/td><\/tr>\r\n<tr><td>Execution Events<\/td><td>90 days<\/td><td>7 years*<\/td><td>Controlled archival<\/td><td><span class=\"data-badge warn\">VERIFY<\/span><\/td><\/tr>\r\n<tr><td>Application Logs<\/td><td>30 days<\/td><td>90 days<\/td><td>Automated deletion<\/td><td><span class=\"data-badge ok\">DEFINED<\/span><\/td><\/tr>\r\n<tr><td>Market Content<\/td><td>Active<\/td><td>As required<\/td><td>Owner decision<\/td><td><span class=\"data-badge info\">REVIEW<\/span><\/td><\/tr>\r\n<tr><td>Backup Snapshots<\/td><td>30 days<\/td><td>180 days<\/td><td>Rotation policy<\/td><td><span class=\"data-badge ok\">DEFINED<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"data-note\"><b>*Illustrative only:<\/b> retention periods for trading, financial, tax or regulated records must be determined from the requirements applicable to the actual MQLPro operating entity and jurisdictions. The UI does not establish a legal retention requirement.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"dataAccess\" class=\"data-section\">\r\n<div class=\"data-card\"><h2>Data Access Governance<\/h2><div class=\"data-desc\">Access to sensitive data should be purpose-limited, role-based, logged and periodically reviewed.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Data<\/th><th>Primary Role<\/th><th>Secondary Role<\/th><th>Export<\/th><th>Review<\/th><\/tr><\/thead><tbody>\r\n<tr><td>User Identity<\/td><td>IAM<\/td><td>Support<\/td><td>Restricted<\/td><td><span class=\"data-badge ok\">MONTHLY<\/span><\/td><\/tr>\r\n<tr><td>Trading Execution<\/td><td>Trading Ops<\/td><td>Audit<\/td><td>Controlled<\/td><td><span class=\"data-badge ok\">MONTHLY<\/span><\/td><\/tr>\r\n<tr><td>Broker Credentials<\/td><td>Connector Service<\/td><td>Security<\/td><td>Prohibited<\/td><td><span class=\"data-badge warn\">HIGH CONTROL<\/span><\/td><\/tr>\r\n<tr><td>Strategy Protection Data<\/td><td>Strategy Owner<\/td><td>Platform Admin<\/td><td>Restricted<\/td><td><span class=\"data-badge ok\">MONTHLY<\/span><\/td><\/tr>\r\n<tr><td>Audit Records<\/td><td>Security \/ Audit<\/td><td>Compliance<\/td><td>Evidence workflow<\/td><td><span class=\"data-badge ok\">QUARTERLY<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype data access review opened.')\">Review Access<\/button><button class=\"btn\" onclick=\"alert('Prototype data export approval workflow opened.')\">Export Approval<\/button><\/div>\r\n<div class=\"data-note\"><b>BlackBox boundary:<\/b> strategy-protection data may be required internally to execute or monitor a strategy, but public marketplace views should expose only the information intentionally designated for public consumption.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n\r\n<!-- ================= RELEASE & DEPLOYMENT CONTROL ================= -->\r\n<section id=\"releasePage\" class=\"hidden\">\r\n<div class=\"rel-wrap\">\r\n<div class=\"breadcrumb\">Home \/ Dashboard \/ Release & Deployment<\/div>\r\n<div class=\"title-row\">\r\n<div><h1 class=\"title\">Release & Deployment Control<\/h1><div class=\"subtitle\">Control how application, connector, risk and infrastructure changes move from development into production with validation, approval and rollback evidence.<\/div><\/div>\r\n<button class=\"btn\" onclick=\"showPage('dashboard')\">\u2190 Dashboard<\/button>\r\n<\/div>\r\n\r\n<div class=\"rel-layout\">\r\n<aside class=\"rel-nav\">\r\n<a class=\"active\" data-rel-tab=\"overview\" onclick=\"relTab('overview')\">Overview<\/a>\r\n<a data-rel-tab=\"releases\" onclick=\"relTab('releases')\">Releases<\/a>\r\n<a data-rel-tab=\"pipeline\" onclick=\"relTab('pipeline')\">Deployment Pipeline<\/a>\r\n<a data-rel-tab=\"gates\" onclick=\"relTab('gates')\">Release Gates<\/a>\r\n<a data-rel-tab=\"rollback\" onclick=\"relTab('rollback')\">Rollback<\/a>\r\n<\/aside>\r\n\r\n<div>\r\n<div id=\"relOverview\" class=\"rel-section active\">\r\n<div class=\"rel-card\"><h2>Release & Deployment Overview<\/h2><div class=\"rel-desc\">Production changes should be traceable to a version, owner, approval path, validation result and recovery plan. High-impact trading changes require additional controls.<\/div>\r\n<div class=\"rel-grid\">\r\n<div class=\"rel-stat\"><span>Production Version<\/span><b>v2.8.4<\/b><\/div>\r\n<div class=\"rel-stat\"><span>Deployments Today<\/span><b>6<\/b><\/div>\r\n<div class=\"rel-stat\"><span>Release Gates<\/span><b>12 \/ 12<\/b><\/div>\r\n<div class=\"rel-stat\"><span>Rollback Ready<\/span><b>100%<\/b><\/div>\r\n<\/div><\/div>\r\n<div class=\"rel-card\"><h3>Current Release State<\/h3>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">Application API v2.8.4<\/div><div class=\"rel-meta\">Production release containing API and dashboard changes.<\/div><\/div><div>Approved<\/div><div>CHG-2044<\/div><span class=\"rel-badge ok\">LIVE<\/span><\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">Connector Runtime v1.14.2<\/div><div class=\"rel-meta\">Broker connector runtime patch with verified rollback package.<\/div><\/div><div>Approved<\/div><div>CHG-2043<\/div><span class=\"rel-badge ok\">LIVE<\/span><\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">Risk Policy v3.7<\/div><div class=\"rel-meta\">Threshold configuration pending final production validation.<\/div><\/div><div>Validation<\/div><div>CHG-2042<\/div><span class=\"rel-badge warn\">STAGED<\/span><\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">Database Maintenance<\/div><div class=\"rel-meta\">Schema maintenance completed with backup verification.<\/div><\/div><div>Completed<\/div><div>CHG-2040<\/div><span class=\"rel-badge info\">CLOSED<\/span><\/div>\r\n<\/div>\r\n<div class=\"rel-note\"><b>Deployment principle:<\/b> deployment success means the software was delivered. It does not automatically mean the trading system is safe to resume. Post-deployment health checks and reconciliation remain separate gates.<\/div>\r\n<\/div>\r\n\r\n<div id=\"relReleases\" class=\"rel-section\">\r\n<div class=\"rel-card\"><h2>Release Registry<\/h2><div class=\"rel-desc\">A release record connects source version, change request, test evidence, approver and deployment result.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Release<\/th><th>Component<\/th><th>Owner<\/th><th>Approval<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>v2.8.4<\/td><td>Application API<\/td><td>Engineering<\/td><td>CHG-2044<\/td><td><span class=\"rel-badge ok\">PRODUCTION<\/span><\/td><\/tr>\r\n<tr><td>v1.14.2<\/td><td>Connector Runtime<\/td><td>Platform<\/td><td>CHG-2043<\/td><td><span class=\"rel-badge ok\">PRODUCTION<\/span><\/td><\/tr>\r\n<tr><td>v3.7<\/td><td>Risk Policy<\/td><td>Trading Ops<\/td><td>CHG-2042<\/td><td><span class=\"rel-badge warn\">STAGED<\/span><\/td><\/tr>\r\n<tr><td>v5.2.1<\/td><td>Dashboard UI<\/td><td>Frontend<\/td><td>CHG-2039<\/td><td><span class=\"rel-badge info\">COMPLETE<\/span><\/td><\/tr>\r\n<tr><td>v1.6.0<\/td><td>Audit Service<\/td><td>Security<\/td><td>CHG-2038<\/td><td><span class=\"rel-badge info\">COMPLETE<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype release record opened.')\">Create Release<\/button><button class=\"btn\" onclick=\"alert('Prototype release evidence opened.')\">View Evidence<\/button><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"relPipeline\" class=\"rel-section\">\r\n<div class=\"rel-card\"><h2>Deployment Pipeline<\/h2><div class=\"rel-desc\">Changes progress through controlled environments before production. Each stage produces evidence for the next gate.<\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">1. Build & Package<\/div><div class=\"rel-meta\">Compile, dependency validation, artifact creation and integrity checks.<\/div><\/div><div>Automated<\/div><div>Artifact signed<\/div><span class=\"rel-badge ok\">PASSED<\/span><\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">2. Automated Tests<\/div><div class=\"rel-meta\">Unit, integration, regression and security checks appropriate to the change.<\/div><\/div><div>Automated<\/div><div>1,842 checks<\/div><span class=\"rel-badge ok\">PASSED<\/span><\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">3. Staging<\/div><div class=\"rel-meta\">Deploy candidate to staging and verify functional and operational behavior.<\/div><\/div><div>Controlled<\/div><div>Health checks<\/div><span class=\"rel-badge ok\">PASSED<\/span><\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">4. Production Approval<\/div><div class=\"rel-meta\">Confirm change scope, risk, owner, rollback plan and authorization.<\/div><\/div><div>Human gate<\/div><div>CHG-2044<\/div><span class=\"rel-badge ok\">APPROVED<\/span><\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">5. Production Deployment<\/div><div class=\"rel-meta\">Deploy using controlled rollout and monitor service health.<\/div><\/div><div>Controlled<\/div><div>Canary + rollout<\/div><span class=\"rel-badge ok\">COMPLETE<\/span><\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">6. Post-Deploy Verification<\/div><div class=\"rel-meta\">Validate telemetry, execution pipeline and reconciliation state.<\/div><\/div><div>Operational<\/div><div>Resume gate<\/div><span class=\"rel-badge warn\">REQUIRED<\/span><\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"relGates\" class=\"rel-section\">\r\n<div class=\"rel-card\"><h2>Release Gates<\/h2><div class=\"rel-desc\">Gates prevent a release from progressing when required evidence or controls are missing.<\/div>\r\n<table class=\"dash-table\"><thead><tr><th>Gate<\/th><th>Requirement<\/th><th>Evidence<\/th><th>Owner<\/th><th>Status<\/th><\/tr><\/thead><tbody>\r\n<tr><td>Code Integrity<\/td><td>Artifact matches approved build<\/td><td>Hash \/ signature<\/td><td>Engineering<\/td><td><span class=\"rel-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Automated Testing<\/td><td>Required test suite passes<\/td><td>CI report<\/td><td>Engineering<\/td><td><span class=\"rel-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Security Review<\/td><td>No blocking security findings<\/td><td>Scan report<\/td><td>Security<\/td><td><span class=\"rel-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Change Approval<\/td><td>Authorized production change<\/td><td>CHG record<\/td><td>Change Owner<\/td><td><span class=\"rel-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Rollback Plan<\/td><td>Recovery artifact verified<\/td><td>Rollback test<\/td><td>Platform<\/td><td><span class=\"rel-badge ok\">PASS<\/span><\/td><\/tr>\r\n<tr><td>Post-Deploy Health<\/td><td>Telemetry remains within thresholds<\/td><td>Monitoring<\/td><td>Operations<\/td><td><span class=\"rel-badge warn\">PENDING<\/span><\/td><\/tr>\r\n<tr><td>Trading Resume<\/td><td>Reconciliation and risk checks pass<\/td><td>Resume record<\/td><td>Trading Ops<\/td><td><span class=\"rel-badge warn\">PENDING<\/span><\/td><\/tr>\r\n<\/tbody><\/table>\r\n<div class=\"rel-note\"><b>Critical distinction:<\/b> a successful software deployment should not bypass trading-specific controls. Connector health, account synchronization, risk state and broker reconciliation must be independently validated before automated execution is resumed.<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n<div id=\"relRollback\" class=\"rel-section\">\r\n<div class=\"rel-card\"><h2>Rollback Control<\/h2><div class=\"rel-desc\">Rollback restores a previously validated software state when a release causes unacceptable degradation. It is not a substitute for incident investigation.<\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">Application API v2.8.3<\/div><div class=\"rel-meta\">Previous production version retained as validated fallback.<\/div><\/div><div>Ready<\/div><div>Artifact verified<\/div><span class=\"rel-badge ok\">AVAILABLE<\/span><\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">Connector Runtime v1.14.1<\/div><div class=\"rel-meta\">Previous connector runtime available for controlled restoration.<\/div><\/div><div>Ready<\/div><div>Artifact verified<\/div><span class=\"rel-badge ok\">AVAILABLE<\/span><\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">Risk Policy v3.6<\/div><div class=\"rel-meta\">Previous policy snapshot available for authorized restoration.<\/div><\/div><div>Ready<\/div><div>Snapshot verified<\/div><span class=\"rel-badge ok\">AVAILABLE<\/span><\/div>\r\n<div class=\"rel-row\"><div><div class=\"rel-main\">Database Schema<\/div><div class=\"rel-meta\">Rollback depends on migration compatibility and verified backup restoration.<\/div><\/div><div>Conditional<\/div><div>Backup test<\/div><span class=\"rel-badge warn\">REVIEW<\/span><\/div>\r\n<div class=\"detail-actions\"><button class=\"btn\" onclick=\"alert('Prototype rollback readiness check opened.')\">Run Readiness Check<\/button><button class=\"btn\" onclick=\"alert('Prototype rollback procedure opened.')\">View Procedure<\/button><\/div>\r\n<div class=\"rel-note\"><b>Rollback safety:<\/b> before restoring a trading-related component, confirm the resulting state will not create duplicate execution, stale orders, mismatched account state or other reconciliation problems.<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/section>\r\n\r\n<!-- ================= MARKET ================= -->\r\n<section id=\"marketPage\" class=\"hidden\">\r\n<div class=\"breadcrumb\">Home \/ Market<\/div><div class=\"title-row\"><div><h1 class=\"title\">Market<\/h1><div class=\"subtitle\">Trading robots, indicators and tools for MetaTrader and algorithmic trading.<\/div><\/div><button class=\"btn blue\">Sell on MQLPro<\/button><\/div>\r\n<div class=\"market-layout\"><aside class=\"sidebar\"><div class=\"side-title\">Categories<\/div><a class=\"cat active\" onclick=\"filterCat(this,'All')\">All Products<\/a><a class=\"cat\" onclick=\"filterCat(this,'Expert Advisor')\">Expert Advisors<\/a><a class=\"cat\" onclick=\"filterCat(this,'Indicator')\">Indicators<\/a><a class=\"cat\" onclick=\"filterCat(this,'Utility')\">Utilities<\/a><a class=\"cat\" onclick=\"filterCat(this,'Library')\">Libraries<\/a><a class=\"cat\" onclick=\"filterCat(this,'Source Code')\">Source Code<\/a><div class=\"side-title\">Platform<\/div><a class=\"cat\">MetaTrader 5<\/a><a class=\"cat\">MetaTrader 4<\/a><\/aside>\r\n<div class=\"market-main\"><div class=\"searchbar\"><input id=\"productSearch\" oninput=\"searchProducts()\" placeholder=\"Search products, developers, keywords...\"><select><option>Sort: Popular<\/option><option>Newest<\/option><option>Highest rated<\/option><option>Price: Low to High<\/option><\/select><\/div>\r\n<div class=\"chips\"><span class=\"chip active\">Featured<\/span><span class=\"chip\">Top Rated<\/span><span class=\"chip\">Free<\/span><span class=\"chip\">Under $50<\/span><span class=\"chip\">MT5<\/span><span class=\"chip\">MT4<\/span><\/div>\r\n<div class=\"market-head\"><h2>Popular products<\/h2><span class=\"muted\">24,812 products<\/span><\/div>\r\n<div class=\"product-grid\" id=\"products\">\r\n\r\n<article class=\"product\" data-cat=\"Expert Advisor\" data-search=\"Quantum Titan MT5 QuantForge expert advisor gold\" onclick=\"openProduct('Quantum Titan MT5')\"><div class=\"product-top\"><div class=\"icon\">QT<\/div><div><div class=\"pname\">Quantum Titan MT5<\/div><div class=\"developer\">QuantForge<\/div><\/div><\/div><span class=\"tag\">Expert Advisor \u00b7 MT5<\/span><div class=\"pdesc\">Automated multi-session system designed for systematic market execution.<\/div><div class=\"pmeta\"><div><span>RATING<\/span><b class=\"rating\">\u2605\u2605\u2605\u2605\u2605 4.8<\/b><\/div><div><span>SALES<\/span><b>1,284<\/b><\/div><div><span>UPDATED<\/span><b>2d ago<\/b><\/div><\/div><div class=\"price-row\"><span class=\"price\">$99<\/span><span class=\"buy\">View product \u2192<\/span><\/div><\/article>\r\n<article class=\"product\" data-cat=\"Expert Advisor\" data-search=\"Gold Momentum Pro AlgoWorks expert advisor xauusd\" onclick=\"openProduct('Gold Momentum Pro')\"><div class=\"product-top\"><div class=\"icon\">GM<\/div><div><div class=\"pname\">Gold Momentum Pro<\/div><div class=\"developer\">AlgoWorks<\/div><\/div><\/div><span class=\"tag\">Expert Advisor \u00b7 MT5<\/span><div class=\"pdesc\">Momentum-oriented trading robot with configurable risk and execution settings.<\/div><div class=\"pmeta\"><div><span>RATING<\/span><b class=\"rating\">\u2605\u2605\u2605\u2605\u2606 4.4<\/b><\/div><div><span>SALES<\/span><b>927<\/b><\/div><div><span>UPDATED<\/span><b>5d ago<\/b><\/div><\/div><div class=\"price-row\"><span class=\"price\">$79<\/span><span class=\"buy\">View product \u2192<\/span><\/div><\/article>\r\n<article class=\"product\" data-cat=\"Indicator\" data-search=\"Market Structure X ChartLab indicator\" onclick=\"openProduct('Market Structure X')\"><div class=\"product-top\"><div class=\"icon\">MS<\/div><div><div class=\"pname\">Market Structure X<\/div><div class=\"developer\">ChartLab<\/div><\/div><\/div><span class=\"tag\">Indicator \u00b7 MT5 \/ MT4<\/span><div class=\"pdesc\">Charting toolkit for market structure, levels and configurable alerts.<\/div><div class=\"pmeta\"><div><span>RATING<\/span><b class=\"rating\">\u2605\u2605\u2605\u2605\u2605 4.9<\/b><\/div><div><span>SALES<\/span><b>2,410<\/b><\/div><div><span>UPDATED<\/span><b>1d ago<\/b><\/div><\/div><div class=\"price-row\"><span class=\"price\">$49<\/span><span class=\"buy\">View product \u2192<\/span><\/div><\/article>\r\n<article class=\"product\" data-cat=\"Utility\" data-search=\"Trade Manager Pro utility RiskTools\" onclick=\"openProduct('Trade Manager Pro')\"><div class=\"product-top\"><div class=\"icon\">TM<\/div><div><div class=\"pname\">Trade Manager Pro<\/div><div class=\"developer\">RiskTools<\/div><\/div><\/div><span class=\"tag\">Utility \u00b7 MT5<\/span><div class=\"pdesc\">Position management utility with risk sizing and trade control tools.<\/div><div class=\"pmeta\"><div><span>RATING<\/span><b class=\"rating\">\u2605\u2605\u2605\u2605\u2605 4.7<\/b><\/div><div><span>SALES<\/span><b>746<\/b><\/div><div><span>UPDATED<\/span><b>8d ago<\/b><\/div><\/div><div class=\"price-row\"><span class=\"price\">$35<\/span><span class=\"buy\">View product \u2192<\/span><\/div><\/article>\r\n<article class=\"product\" data-cat=\"Indicator\" data-search=\"Volume Flow Analyzer indicator DataEdge\" onclick=\"openProduct('Volume Flow Analyzer')\"><div class=\"product-top\"><div class=\"icon\">VF<\/div><div><div class=\"pname\">Volume Flow Analyzer<\/div><div class=\"developer\">DataEdge<\/div><\/div><\/div><span class=\"tag\">Indicator \u00b7 MT5<\/span><div class=\"pdesc\">Volume and flow visualization with configurable market filters.<\/div><div class=\"pmeta\"><div><span>RATING<\/span><b class=\"rating\">\u2605\u2605\u2605\u2605\u2606 4.5<\/b><\/div><div><span>SALES<\/span><b>512<\/b><\/div><div><span>UPDATED<\/span><b>12d ago<\/b><\/div><\/div><div class=\"price-row\"><span class=\"price\">$29<\/span><span class=\"buy\">View product \u2192<\/span><\/div><\/article>\r\n<article class=\"product\" data-cat=\"Library\" data-search=\"Execution Core Library DevStack\" onclick=\"openProduct('Execution Core')\"><div class=\"product-top\"><div class=\"icon\">EC<\/div><div><div class=\"pname\">Execution Core<\/div><div class=\"developer\">DevStack<\/div><\/div><\/div><span class=\"tag\">Library \u00b7 MT5<\/span><div class=\"pdesc\">Reusable execution and order-management components for developers.<\/div><div class=\"pmeta\"><div><span>RATING<\/span><b class=\"rating\">\u2605\u2605\u2605\u2605\u2605 4.8<\/b><\/div><div><span>SALES<\/span><b>338<\/b><\/div><div><span>UPDATED<\/span><b>3d ago<\/b><\/div><\/div><div class=\"price-row\"><span class=\"price\">$59<\/span><span class=\"buy\">View product \u2192<\/span><\/div><\/article>\r\n<\/div>\r\n<div class=\"featured notice\"><h3 style=\"margin:0 0 6px;font-size:17px;font-weight:400\">Become a developer on MQLPro<\/h3>Publish trading applications, manage versions, documentation, licensing and sales from one developer account.<\/div><\/div><\/div>\r\n<\/section>\r\n\r\n<!-- ================= PRODUCT DETAIL ================= -->\r\n<section id=\"productDetailPage\" class=\"hidden\">\r\n<a class=\"back\" onclick=\"showPage('market')\">\u2190 Back to Market<\/a>\r\n<div class=\"detail-card\"><div class=\"detail-title\"><div><h1 id=\"productName\">Quantum Titan MT5<\/h1><div class=\"muted\">by QuantForge \u00b7 Expert Advisor \u00b7 MetaTrader 5<\/div><\/div><span class=\"rating\">\u2605\u2605\u2605\u2605\u2605 4.8<\/span><\/div>\r\n<div class=\"detail-grid\"><div><div class=\"detail-section\"><h2>Product overview<\/h2><p class=\"muted\" style=\"line-height:1.6\">Quantum Titan MT5 is a prototype marketplace listing for an automated trading application. The real MQLPro implementation will expose product documentation, supported platforms, release history, licensing information and developer details.<\/p><\/div><div class=\"detail-section\"><h2>Product specifications<\/h2><div class=\"specs\"><div class=\"spec\"><span>PLATFORM<\/span><b>MetaTrader 5<\/b><\/div><div class=\"spec\"><span>TYPE<\/span><b>Expert Advisor<\/b><\/div><div class=\"spec\"><span>VERSION<\/span><b>3.8.2<\/b><\/div><div class=\"spec\"><span>LAST UPDATE<\/span><b>2 days ago<\/b><\/div><div class=\"spec\"><span>LICENSE<\/span><b>Personal<\/b><\/div><div class=\"spec\"><span>INSTALLATION<\/span><b>Automatic \/ Manual<\/b><\/div><\/div><\/div><div class=\"detail-section\"><h2>What's included<\/h2><p class=\"muted\">EA package, user documentation, update access and product support. Actual files and licensing will be implemented with the marketplace backend.<\/p><\/div><\/div>\r\n<aside class=\"buybox\"><div class=\"muted\">ONE-TIME LICENSE<\/div><div class=\"price\">$99<\/div><label>LICENSE<\/label><select><option>1 account<\/option><option>3 accounts<\/option><\/select><button class=\"btn blue full\" onclick=\"alert('Prototype only \u2014 checkout is not connected.')\">Buy Product<\/button><div class=\"notice\">Secure checkout, licensing and delivery will be connected in a later implementation stage.<\/div><\/aside><\/div><\/div>\r\n<\/section>\r\n\r\n<\/main>\r\n<footer class=\"footer\">MQLPro \u00a9 2026 \u00b7 Signals \u00b7 Market \u00b7 Documentation \u00b7 Terms \u00b7 Privacy<\/footer>\r\n\r\n<script>\r\nfunction hideAll(){\r\n['signalsPage','signalDetailPage','rankingPage','articlesPage','articleDetailPage','communityPage','discussionDetailPage','docsPage','docsDetailPage','loginPage','registerPage','accountPage','dashboardPage','ordersPage','copyAccountsPage','connectorCenterPage','signalEnginePage','riskEnginePage','executionQueuePage','accountSyncPage','symbolMappingPage','copyPoliciesPage','billingPage','signalIntakePage','copyOrchestratorPage','brokerConnectorPage','accountReconciliationPage','observabilityPage','securityPage','productionPage','infrastructurePage','disasterRecoveryPage','incidentManagementPage','monitoringPage','governancePage','dataGovernancePage','releasePage','checkoutPage','subscriptionConfirmPage','marketCheckoutPage','marketPurchaseConfirmPage','marketPage','productDetailPage'].forEach(id=>document.getElementById(id).classList.add('hidden'));\r\n}\r\nfunction showPage(page){\r\nhideAll();\r\nif(page==='signals')document.getElementById('signalsPage').classList.remove('hidden');\r\nif(page==='ranking')document.getElementById('rankingPage').classList.remove('hidden');\r\nif(page==='articles')document.getElementById('articlesPage').classList.remove('hidden');\r\nif(page==='community')document.getElementById('communityPage').classList.remove('hidden');\r\nif(page==='docs')document.getElementById('docsPage').classList.remove('hidden');\r\nif(page==='login')document.getElementById('loginPage').classList.remove('hidden');\r\nif(page==='register')document.getElementById('registerPage').classList.remove('hidden');\r\nif(page==='account'){document.getElementById('accountPage').classList.remove('hidden');loadAccountPrototype();}\r\nif(page==='dashboard'){document.getElementById('dashboardPage').classList.remove('hidden');loadDashboardPrototype();}\r\nif(page==='orders')document.getElementById('ordersPage').classList.remove('hidden');\r\nif(page==='copyAccounts')document.getElementById('copyAccountsPage').classList.remove('hidden');\r\nif(page==='connectorCenter')document.getElementById('connectorCenterPage').classList.remove('hidden');\r\nif(page==='signalEngine')document.getElementById('signalEnginePage').classList.remove('hidden');\r\nif(page==='riskEngine')document.getElementById('riskEnginePage').classList.remove('hidden');\r\nif(page==='executionQueue')document.getElementById('executionQueuePage').classList.remove('hidden');\r\nif(page==='accountSync')document.getElementById('accountSyncPage').classList.remove('hidden');\r\nif(page==='symbolMapping')document.getElementById('symbolMappingPage').classList.remove('hidden');\r\nif(page==='copyPolicies')document.getElementById('copyPoliciesPage').classList.remove('hidden');\r\nif(page==='billing')document.getElementById('billingPage').classList.remove('hidden');\r\nif(page==='signalIntake')document.getElementById('signalIntakePage').classList.remove('hidden');\r\nif(page==='copyOrchestrator')document.getElementById('copyOrchestratorPage').classList.remove('hidden');\r\nif(page==='brokerConnector')document.getElementById('brokerConnectorPage').classList.remove('hidden');\r\nif(page==='accountReconciliation')document.getElementById('accountReconciliationPage').classList.remove('hidden');\r\nif(page==='observability')document.getElementById('observabilityPage').classList.remove('hidden');\r\nif(page==='security')document.getElementById('securityPage').classList.remove('hidden');\r\nif(page==='production')document.getElementById('productionPage').classList.remove('hidden');\r\nif(page==='infrastructure')document.getElementById('infrastructurePage').classList.remove('hidden');\r\nif(page==='disasterRecovery')document.getElementById('disasterRecoveryPage').classList.remove('hidden');\r\nif(page==='incidentManagement')document.getElementById('incidentManagementPage').classList.remove('hidden');\r\nif(page==='monitoring')document.getElementById('monitoringPage').classList.remove('hidden');\r\nif(page==='governance')document.getElementById('governancePage').classList.remove('hidden');\r\nif(page==='dataGovernance')document.getElementById('dataGovernancePage').classList.remove('hidden');\r\nif(page==='release')document.getElementById('releasePage').classList.remove('hidden');\r\nif(page==='checkout')document.getElementById('checkoutPage').classList.remove('hidden');\r\nif(page==='subscriptionConfirm')document.getElementById('subscriptionConfirmPage').classList.remove('hidden');\r\nif(page==='marketCheckout')document.getElementById('marketCheckoutPage').classList.remove('hidden');\r\nif(page==='marketPurchaseConfirm')document.getElementById('marketPurchaseConfirmPage').classList.remove('hidden');\r\nif(page==='market')document.getElementById('marketPage').classList.remove('hidden');\r\ndocument.getElementById('nav-signals').classList.toggle('active',page==='signals');\r\ndocument.getElementById('nav-ranking').classList.toggle('active',page==='ranking');\r\ndocument.getElementById('nav-articles').classList.toggle('active',page==='articles');\r\ndocument.getElementById('nav-community').classList.toggle('active',page==='community');\r\ndocument.getElementById('nav-docs').classList.toggle('active',page==='docs');\r\ndocument.getElementById('nav-market').classList.toggle('active',page==='market');\r\nwindow.scrollTo({top:0,behavior:'smooth'});\r\n}\r\nfunction updateRanking(){\r\nconst metric=document.getElementById('rankMetric').value;\r\nconst tbody=document.querySelector('#rankingTable tbody');\r\nconst rows=[...tbody.querySelectorAll('tr')];\r\nconst key={return:'return',risk:'risk',dd:'dd',pf:'pf',win:'win',subs:'subs'}[metric];\r\nrows.sort((a,b)=>{\r\nlet av=parseFloat(a.dataset[key]), bv=parseFloat(b.dataset[key]);\r\nreturn metric==='dd' ? av-bv : bv-av;\r\n});\r\nrows.forEach((r,i)=>{r.querySelector('.rank-num').textContent=i+1;tbody.appendChild(r)});\r\nfilterRanking();\r\n}\r\nfunction filterRanking(){\r\nconst q=document.getElementById('rankSearch').value.toLowerCase();\r\ndocument.querySelectorAll('#rankingTable tbody tr').forEach(r=>{\r\nr.style.display=r.dataset.name.toLowerCase().includes(q)?'table-row':'none';\r\n});\r\n}\r\nfunction resetRanking(){\r\ndocument.getElementById('rankSearch').value='';\r\ndocument.getElementById('rankMetric').value='return';\r\nupdateRanking();\r\n}\r\nfunction openSignal(name){\r\nhideAll();document.getElementById('signalDetailPage').classList.remove('hidden');\r\ndocument.getElementById('nav-signals').classList.add('active');\r\ndocument.getElementById('nav-ranking').classList.remove('active');\r\ndocument.getElementById('nav-articles').classList.remove('active');\r\ndocument.getElementById('nav-community').classList.remove('active');\r\ndocument.getElementById('nav-docs').classList.remove('active');\r\ndocument.getElementById('nav-market').classList.remove('active');\r\ndocument.getElementById('detailName').innerHTML=name+' <span class=\"status\"><i class=\"dot\"><\/i>ACTIVE<\/span>';\r\ndocument.getElementById('signalBreadcrumb').textContent=name;\r\nwindow.scrollTo({top:0,behavior:'smooth'});\r\n}\r\nfunction openCopy(){\r\ndocument.getElementById('copyBox').classList.remove('hidden');\r\ndocument.getElementById('allocation2').value=document.getElementById('allocation').value;\r\nsetTimeout(()=>document.getElementById('copyBox').scrollIntoView({behavior:'smooth',block:'start'}),50);\r\n}\r\nfunction openProduct(name){\r\nhideAll();document.getElementById('productDetailPage').classList.remove('hidden');\r\ndocument.getElementById('nav-signals').classList.remove('active');\r\ndocument.getElementById('nav-ranking').classList.remove('active');\r\ndocument.getElementById('nav-articles').classList.remove('active');\r\ndocument.getElementById('nav-market').classList.add('active');\r\ndocument.getElementById('productName').textContent=name;\r\nwindow.scrollTo({top:0,behavior:'smooth'});\r\n}\r\n\r\nfunction openArticle(name){\r\nhideAll();\r\ndocument.getElementById('articleDetailPage').classList.remove('hidden');\r\ndocument.getElementById('articleDetailTitle').textContent=name;\r\ndocument.getElementById('nav-signals').classList.remove('active');\r\ndocument.getElementById('nav-ranking').classList.remove('active');\r\ndocument.getElementById('nav-articles').classList.add('active');\r\ndocument.getElementById('nav-market').classList.remove('active');\r\nwindow.scrollTo({top:0,behavior:'smooth'});\r\n}\r\n\r\nfunction openDiscussion(title){\r\nhideAll();\r\ndocument.getElementById('discussionDetailPage').classList.remove('hidden');\r\ndocument.getElementById('discussionTitle').textContent=title;\r\ndocument.getElementById('nav-signals').classList.remove('active');\r\ndocument.getElementById('nav-ranking').classList.remove('active');\r\ndocument.getElementById('nav-articles').classList.remove('active');\r\ndocument.getElementById('nav-community').classList.add('active');\r\ndocument.getElementById('nav-market').classList.remove('active');\r\nwindow.scrollTo({top:0,behavior:'smooth'});\r\n}\r\nfunction openNewDiscussion(){\r\nalert('Prototype only \u2014 discussion creation will be connected to authentication and the community backend.');\r\n}\r\n\r\nfunction openDoc(title){\r\nhideAll();\r\ndocument.getElementById('docsDetailPage').classList.remove('hidden');\r\ndocument.getElementById('docsDetailTitle').textContent=title;\r\ndocument.getElementById('nav-signals').classList.remove('active');\r\ndocument.getElementById('nav-ranking').classList.remove('active');\r\ndocument.getElementById('nav-articles').classList.remove('active');\r\ndocument.getElementById('nav-community').classList.remove('active');\r\ndocument.getElementById('nav-docs').classList.add('active');\r\ndocument.getElementById('nav-market').classList.remove('active');\r\nconst intro={\r\n'Getting Started':'Learn the basic MQLPro workflow from discovering a signal through configuring a follower account.',\r\n'Signals':'Understand the Signals marketplace, signal detail pages, performance metrics and discovery workflow.',\r\n'Copy Trading':'Explore master events, normalization, allocation, risk checks, connectors, execution and reconciliation.',\r\n'Market':'Learn how marketplace products are presented, searched and opened in product detail.',\r\n'Ranking & Performance':'Review the definitions and intended methodology behind MQLPro performance and ranking metrics.',\r\n'Risk Management':'Understand allocation, exposure, drawdown and account-level risk controls.',\r\n'Broker Connectors':'Explore the connector layer that maps platform instructions to broker-specific execution.',\r\n'API & Webhooks':'Review the planned integration surface for applications and event-driven workflows.',\r\n'FAQ':'Find answers to common questions about the MQLPro platform and its prototype scope.'\r\n}[title] || 'Explore this MQLPro documentation topic and its related platform concepts.';\r\ndocument.getElementById('docsIntro').textContent=intro;\r\nwindow.scrollTo({top:0,behavior:'smooth'});\r\n}\r\n\r\nfunction goAuthBack(){\r\nshowPage('signals');\r\n}\r\nfunction loginPrototype(){\r\nconst email=document.getElementById('loginEmail').value.trim();\r\nif(!email){alert('Please enter your email.');return;}\r\nlocalStorage.setItem('mqlproPrototypeUser',JSON.stringify({name:'MQLPro User',email:email}));\r\nshowPage('dashboard');\r\n}\r\nfunction registerPrototype(){\r\nconst name=document.getElementById('regName').value.trim() || 'MQLPro User';\r\nconst email=document.getElementById('regEmail').value.trim();\r\nif(!email){alert('Please enter your email.');return;}\r\nlocalStorage.setItem('mqlproPrototypeUser',JSON.stringify({name:name,email:email}));\r\nshowPage('dashboard');\r\n}\r\nfunction logoutPrototype(){\r\nlocalStorage.removeItem('mqlproPrototypeUser');\r\nshowPage('signals');\r\n}\r\n\r\n\r\n\r\nlet selectedCheckoutPlan={name:'Monthly',price:49};\r\n\r\nlet selectedPurchaseType={name:'Personal',price:149};\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction connTab(tab){\r\ndocument.querySelectorAll('#brokerConnectorPage .conn-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#brokerConnectorPage .conn-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'connOverview',connectors:'connConnectors',runtime:'connRuntime',health:'connHealth',credentials:'connCredentials'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#brokerConnectorPage .conn-nav a[data-conn-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction orchTab(tab){\r\ndocument.querySelectorAll('#copyOrchestratorPage .orch-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#copyOrchestratorPage .orch-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'orchOverview',lifecycle:'orchLifecycle',requests:'orchRequests',retries:'orchRetries',reconciliation:'orchReconciliation'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#copyOrchestratorPage .orch-nav a[data-orch-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction intakeTab(tab){\r\ndocument.querySelectorAll('#signalIntakePage .intake-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#signalIntakePage .intake-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'intakeOverview',endpoints:'intakeEndpoints',events:'intakeEvents',validation:'intakeValidation',security:'intakeSecurity'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#signalIntakePage .intake-nav a[data-intake-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction billTab(tab){\r\ndocument.querySelectorAll('#billingPage .bill-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#billingPage .bill-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'billOverview',subscriptions:'billSubscriptions',plans:'billPlans',invoices:'billInvoices',entitlements:'billEntitlements'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#billingPage .bill-nav a[data-bill-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction policyTab(tab){\r\ndocument.querySelectorAll('#copyPoliciesPage .policy-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#copyPoliciesPage .policy-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'policyOverview',rules:'policyRules',allocation:'policyAllocation',limits:'policyLimits',emergency:'policyEmergency'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#copyPoliciesPage .policy-nav a[data-policy-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction mapTab(tab){\r\ndocument.querySelectorAll('#symbolMappingPage .map-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#symbolMappingPage .map-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'mapOverview',mappings:'mapMappings',brokers:'mapBrokers',rules:'mapRules',validation:'mapValidation'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#symbolMappingPage .map-nav a[data-map-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nfunction relTab(tab){\r\ndocument.querySelectorAll('#releasePage .rel-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#releasePage .rel-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'relOverview',releases:'relReleases',pipeline:'relPipeline',gates:'relGates',rollback:'relRollback'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#releasePage .rel-nav a[data-rel-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction dataTab(tab){\r\ndocument.querySelectorAll('#dataGovernancePage .data-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#dataGovernancePage .data-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'dataOverview',classification:'dataClassification',lifecycle:'dataLifecycle',retention:'dataRetention',access:'dataAccess'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#dataGovernancePage .data-nav a[data-data-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction govTab(tab){\r\ndocument.querySelectorAll('#governancePage .gov-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#governancePage .gov-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'govOverview',audit:'govAudit',access:'govAccess',changes:'govChanges',policies:'govPolicies'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#governancePage .gov-nav a[data-gov-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction monTab(tab){\r\ndocument.querySelectorAll('#monitoringPage .mon-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#monitoringPage .mon-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'monOverview',metrics:'monMetrics',alerts:'monAlerts',slo:'monSlo',telemetry:'monTelemetry'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#monitoringPage .mon-nav a[data-mon-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction incTab(tab){\r\ndocument.querySelectorAll('#incidentManagementPage .inc-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#incidentManagementPage .inc-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'incOverview',active:'incActive',runbooks:'incRunbooks',timeline:'incTimeline',postmortem:'incPostmortem'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#incidentManagementPage .inc-nav a[data-inc-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction drTab(tab){\r\ndocument.querySelectorAll('#disasterRecoveryPage .dr-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#disasterRecoveryPage .dr-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'drOverview',rto:'drRto',scenarios:'drScenarios',continuity:'drContinuity',drills:'drDrills'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#disasterRecoveryPage .dr-nav a[data-dr-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction infraTab(tab){\r\ndocument.querySelectorAll('#infrastructurePage .infra-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#infrastructurePage .infra-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'infraOverview',services:'infraServices',database:'infraDatabase',queues:'infraQueues',recovery:'infraRecovery'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#infrastructurePage .infra-nav a[data-infra-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction prodTab(tab){\r\ndocument.querySelectorAll('#productionPage .prod-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#productionPage .prod-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'prodOverview',checks:'prodChecks',release:'prodRelease',rollback:'prodRollback',signoff:'prodSignoff'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#productionPage .prod-nav a[data-prod-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction secTab(tab){\r\ndocument.querySelectorAll('#securityPage .sec-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#securityPage .sec-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'secOverview',roles:'secRoles',sessions:'secSessions',api:'secApi',actions:'secActions'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#securityPage .sec-nav a[data-sec-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction obsTab(tab){\r\ndocument.querySelectorAll('#observabilityPage .obs-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#observabilityPage .obs-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'obsOverview',pipeline:'obsPipeline',events:'obsEvents',incidents:'obsIncidents',audit:'obsAudit'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#observabilityPage .obs-nav a[data-obs-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction syncTab(tab){\r\ndocument.querySelectorAll('#accountSyncPage .sync-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#accountSyncPage .sync-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'syncOverview',accounts:'syncAccounts',positions:'syncPositions',balances:'syncBalances',reconcile:'syncReconcile'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#accountSyncPage .sync-nav a[data-sync-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction execTab(tab){\r\ndocument.querySelectorAll('#executionQueuePage .exec-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#executionQueuePage .exec-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'execOverview',queue:'execQueue',lifecycle:'execLifecycle',reconciliation:'execReconciliation',errors:'execErrors'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#executionQueuePage .exec-nav a[data-exec-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction riskTab(tab){\r\ndocument.querySelectorAll('#riskEnginePage .risk-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#riskEnginePage .risk-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'riskOverview',rules:'riskRules',allocation:'riskAllocation',guards:'riskGuards',simulation:'riskSimulation'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#riskEnginePage .risk-nav a[data-risk-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\nfunction saveRiskPrototype(){alert('Risk profile saved in prototype mode. Production validation and persistence will be connected to the backend risk service.');}\r\nfunction runRiskSimulation(){\r\nconst equity=parseFloat(document.getElementById('simEquity').value)||0;\r\nconst master=parseFloat(document.getElementById('simMaster').value)||0;\r\nconst mult=parseFloat(document.getElementById('simMultiplier').value)||1;\r\nconst dd=parseFloat(document.getElementById('simDD').value)||0;\r\nconst allocation=(master*mult).toFixed(2);\r\nconst status=dd>=10?'BLOCKED \u2014 drawdown guard triggered':'ELIGIBLE \u2014 prototype allocation';\r\nconst el=document.getElementById('riskSimulationResult');\r\nif(el)el.innerHTML='<b>Result:<\/b> illustrative allocation '+allocation+' lot \u00b7 account equity $'+equity.toLocaleString()+' \u00b7 drawdown '+dd+'% \u00b7 '+status+'.';\r\n}\r\n\r\nfunction engineTab(tab){\r\ndocument.querySelectorAll('#signalEnginePage .engine-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#signalEnginePage .engine-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'engineOverview',signals:'engineSignals',events:'engineEvents',routing:'engineRouting',monitoring:'engineMonitoring'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#signalEnginePage .engine-nav a[data-engine-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction connectorTab(tab){\r\ndocument.querySelectorAll('#connectorCenterPage .connector-section').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#connectorCenterPage .connector-nav a').forEach(x=>x.classList.remove('active'));\r\nconst map={overview:'connectorOverview',brokers:'connectorBrokers',health:'connectorHealth',architecture:'connectorArchitecture'};\r\nconst section=document.getElementById(map[tab]||map.overview);\r\nif(section)section.classList.add('active');\r\nconst nav=document.querySelector('#connectorCenterPage .connector-nav a[data-connector-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\n\r\nfunction copyTab(tab){\r\ndocument.querySelectorAll('#copyAccountsPage .copy-section').forEach(x=>x.style.display='none');\r\ndocument.querySelectorAll('#copyAccountsPage .copy-nav').forEach(x=>x.classList.remove('active'));\r\nconst map={accounts:'copyAccountsTab',connections:'copyConnectionsTab',settings:'copySettingsTab',activity:'copyActivityTab'};\r\nconst section=document.getElementById(map[tab]||map.accounts);\r\nif(section)section.style.display='block';\r\nconst nav=document.querySelector('#copyAccountsPage .copy-nav[data-copy-tab=\"'+(map[tab]?tab:'accounts')+'\"]');\r\nif(nav)nav.classList.add('active');\r\n}\r\nfunction toggleCopyForm(id){\r\nconst el=document.getElementById(id);\r\nif(el)el.classList.toggle('active');\r\n}\r\nfunction saveCopySettings(){alert('Copy settings saved in prototype mode. Production persistence will be connected later.');}\r\nfunction connectPrototype(){alert('Connector setup completed in prototype mode. No broker credentials were transmitted or stored.');}\r\nfunction disconnectPrototype(){if(confirm('Disconnect the prototype follower account?'))alert('Prototype account disconnected.');}\r\n\r\nfunction showOrders(tab='subscriptions'){\r\nshowPage('orders');\r\nordersTab(tab);\r\n}\r\n\r\nfunction ordersTab(tab){\r\ndocument.querySelectorAll('#ordersPage .manage-tab').forEach(x=>x.classList.remove('active'));\r\ndocument.querySelectorAll('#ordersPage .orders-section').forEach(x=>x.style.display='none');\r\nconst t=document.querySelector('#ordersPage .manage-tab[data-order-tab=\"'+tab+'\"]');\r\nif(t)t.classList.add('active');\r\nconst s=document.getElementById(tab==='purchases'?'ordersPurchases':'ordersSubscriptions');\r\nif(s)s.style.display='block';\r\n}\r\n\r\nfunction openMarketCheckout(name='Quantum Titan MT5',meta='Trading Tool \u00b7 MT5 \u00b7 Version 2.4',price=149){\r\nshowPage('marketCheckout');\r\ndocument.getElementById('purchaseProductName').textContent=name;\r\ndocument.getElementById('purchaseProductMeta').textContent=meta;\r\ndocument.getElementById('purchaseSummaryProduct').textContent=name;\r\ndocument.getElementById('purchaseSummaryPrice').textContent='$'+price;\r\ndocument.getElementById('purchaseSummaryTotal').textContent='$'+price;\r\nselectedPurchaseType={name:'Personal',price:Number(price)};\r\nconst u=JSON.parse(localStorage.getItem('mqlproPrototypeUser')||'null');\r\nif(u){\r\ndocument.getElementById('purchaseEmail').value=u.email||'';\r\ndocument.getElementById('purchaseProfile').value=u.name||'';\r\n}\r\n}\r\nfunction selectPurchaseType(el){\r\ndocument.querySelectorAll('#marketCheckoutPage .purchase-type').forEach(p=>p.classList.remove('selected'));\r\nel.classList.add('selected');\r\nselectedPurchaseType={name:el.dataset.type==='commercial'?'Commercial':'Personal',price:selectedPurchaseType.price};\r\ndocument.getElementById('purchaseSummaryType').textContent=selectedPurchaseType.name;\r\n}\r\nfunction confirmMarketPurchase(){\r\nif(!document.getElementById('purchaseEmail').value.trim()){alert('Please enter your email.');return;}\r\nif(!document.getElementById('purchaseTerms').checked){alert('Please confirm the product license terms.');return;}\r\ndocument.getElementById('purchaseConfirmProduct').textContent=document.getElementById('purchaseSummaryProduct').textContent;\r\ndocument.getElementById('purchaseConfirmType').textContent=selectedPurchaseType.name;\r\ndocument.getElementById('purchaseConfirmPrice').textContent='$'+selectedPurchaseType.price;\r\nshowPage('marketPurchaseConfirm');\r\n}\r\nfunction goBackFromMarketCheckout(){showPage('market');}\r\n\r\nfunction openSignalCheckout(name='Alpha Trend',meta='Forex \u00b7 MQLPro Signal',price=49){\r\nshowPage('checkout');\r\ndocument.getElementById('checkoutSignalName').textContent=name;\r\ndocument.getElementById('checkoutSignalMeta').textContent=meta;\r\ndocument.getElementById('checkoutBasePrice').innerHTML='$'+price+' <small>\/ month<\/small>';\r\ndocument.getElementById('summarySignal').textContent=name;\r\nconst u=JSON.parse(localStorage.getItem('mqlproPrototypeUser')||'null');\r\nif(u){\r\ndocument.getElementById('checkoutEmail').value=u.email||'';\r\ndocument.getElementById('checkoutProfile').value=u.name||'';\r\n}\r\nupdateCheckoutSummary();\r\n}\r\nfunction selectPlan(el){\r\ndocument.querySelectorAll('#checkoutPage .plan').forEach(p=>p.classList.remove('selected'));\r\nel.classList.add('selected');\r\nselectedCheckoutPlan={name:el.dataset.plan==='quarterly'?'3 Months':el.dataset.plan==='annual'?'12 Months':'Monthly',price:Number(el.dataset.price)};\r\nupdateCheckoutSummary();\r\n}\r\nfunction updateCheckoutSummary(){\r\ndocument.getElementById('summaryPlan').textContent=selectedCheckoutPlan.name;\r\ndocument.getElementById('summaryPrice').textContent='$'+selectedCheckoutPlan.price;\r\ndocument.getElementById('summaryTotal').textContent='$'+selectedCheckoutPlan.price;\r\n}\r\nfunction confirmSubscription(){\r\nif(!document.getElementById('checkoutEmail').value.trim()){alert('Please enter your email.');return;}\r\nif(!document.getElementById('checkoutTerms').checked){alert('Please confirm the subscription terms.');return;}\r\ndocument.getElementById('confirmSignal').textContent=document.getElementById('summarySignal').textContent;\r\ndocument.getElementById('confirmPlan').textContent=selectedCheckoutPlan.name;\r\ndocument.getElementById('confirmPrice').textContent='$'+selectedCheckoutPlan.price;\r\nshowPage('subscriptionConfirm');\r\n}\r\nfunction goBackFromCheckout(){showPage('signals');}\r\n\r\nfunction dashboardTab(tab){\r\nconst map={overview:'dashOverview',signals:'dashSignals',subscriptions:'dashSubscriptions',copy:'dashCopy',purchases:'dashPurchases',account:'dashAccount'};\r\ndocument.querySelectorAll('#dashboardPage .dashboard-section').forEach(el=>el.classList.remove('active'));\r\ndocument.querySelectorAll('#dashboardPage .dashboard-item').forEach(el=>el.classList.remove('active'));\r\nconst section=document.getElementById(map[tab]||'dashOverview');\r\nif(section)section.classList.add('active');\r\nconst item=document.querySelector('#dashboardPage .dashboard-item[data-dash-tab=\"'+(map[tab]?tab:'overview')+'\"]');\r\nif(item)item.classList.add('active');\r\nwindow.scrollTo({top:0,behavior:'smooth'});\r\n}\r\n\r\nfunction loadDashboardPrototype(){\r\ntry{\r\nconst u=JSON.parse(localStorage.getItem('mqlproPrototypeUser')||'null');\r\ndocument.getElementById('dashUserName').textContent=(u&&u.name)?u.name:'MQLPro User';\r\ndocument.getElementById('dashAccountName').textContent=(u&&u.name)?u.name:'MQLPro User';\r\ndocument.getElementById('dashAccountEmail').textContent=(u&&u.email)?u.email:'user@example.com';\r\nconst initials=((u&&u.name)||'MQLPro User').split(\/\\s+\/).map(x=>x[0]).join('').slice(0,2).toUpperCase();\r\ndocument.getElementById('dashAvatar').textContent=initials;\r\n}catch(e){document.getElementById('dashUserName').textContent='MQLPro User';}\r\n}\r\n\r\nfunction loadAccountPrototype(){\r\ntry{\r\nconst u=JSON.parse(localStorage.getItem('mqlproPrototypeUser')||'null');\r\nif(u){\r\ndocument.getElementById('accountName').textContent=u.name||'MQLPro User';\r\ndocument.getElementById('accountEmail').textContent=u.email||'user@example.com';\r\nconst initials=(u.name||'MQLPro User').split(\/\\s+\/).map(x=>x[0]).join('').slice(0,2).toUpperCase();\r\ndocument.getElementById('accountAvatar').textContent=initials;\r\n}\r\n}catch(e){}\r\n}\r\n\r\nfunction filterDocs(){\r\nconst q=document.getElementById('docsSearch').value.toLowerCase();\r\ndocument.querySelectorAll('.docs-card').forEach(c=>{\r\nc.style.display=c.dataset.search.toLowerCase().includes(q)?'block':'none';\r\n});\r\n}\r\n\r\nfunction filterCommunity(){\r\nconst q=document.getElementById('communitySearch').value.toLowerCase();\r\ndocument.querySelectorAll('#discussionList .community-post').forEach(p=>{\r\np.style.display=p.dataset.search.toLowerCase().includes(q)?'block':'none';\r\n});\r\n}\r\n\r\nfunction filterArticles(){\r\nconst q=document.getElementById('articleSearch').value.toLowerCase();\r\ndocument.querySelectorAll('#articleGrid .article-card').forEach(a=>{\r\na.style.display=a.dataset.search.toLowerCase().includes(q)?'block':'none';\r\n});\r\n}\r\n\r\nfunction searchProducts(){\r\nconst q=document.getElementById('productSearch').value.toLowerCase();\r\ndocument.querySelectorAll('.product').forEach(p=>p.style.display=p.dataset.search.toLowerCase().includes(q)?'block':'none');\r\n}\r\nfunction filterCat(el,cat){\r\ndocument.querySelectorAll('.sidebar .cat').forEach(x=>x.classList.remove('active'));el.classList.add('active');\r\ndocument.querySelectorAll('.product').forEach(p=>p.style.display=(cat==='All'||p.dataset.cat===cat)?'block':'none');\r\n}\r\n<\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\n<\/div>\n\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>MQLPro \u2014 Signals &#038; Market MQLPro Signals Ranking Articles Community Documentation Market LoginRegister Home \/ Signals Trading Signals Browse trading systems and compare monitored performance. Create Signal TRADING SYSTEMAllNettingHedging PROFIT \/ MONTH, % MAX DRAWDOWN, % SUBSCRIPTION FEE Maximum profitReliabilityProfitable within a monthIntradayUnder $50Having reviewsUsing robots Reliability 3 featured signals GSGold Strategy ProStrategyLab+82% 98%Reliability124Subscribers4.81%Max DD\u2605\u2605\u2605\u2605\u2605Copy&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"hide","_kad_post_layout":"fullwidth","_kad_post_sidebar_id":"","_kad_post_content_style":"unboxed","_kad_post_vertical_padding":"hide","_kad_post_feature":"hide","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-14","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mql5.multiple-broker.com\/index.php?rest_route=\/wp\/v2\/pages\/14","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mql5.multiple-broker.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mql5.multiple-broker.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mql5.multiple-broker.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mql5.multiple-broker.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=14"}],"version-history":[{"count":142,"href":"https:\/\/mql5.multiple-broker.com\/index.php?rest_route=\/wp\/v2\/pages\/14\/revisions"}],"predecessor-version":[{"id":165,"href":"https:\/\/mql5.multiple-broker.com\/index.php?rest_route=\/wp\/v2\/pages\/14\/revisions\/165"}],"wp:attachment":[{"href":"https:\/\/mql5.multiple-broker.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=14"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}