:root{
  --bg:#080d18; --bg2:#0d1526; --panel:#101a2e; --panel2:#15213a; --line:#1f2d49; --line2:#2a3b5e;
  --ink:#e8eefb; --dim:#8fa0c0; --faint:#5d6f93;
  --teal:#2dd4bf; --amber:#fbbf24; --rose:#fb7185; --blue:#60a5fa; --violet:#a78bfa;
  --sel:rgba(45,212,191,.12); --shadow:0 18px 50px rgba(0,0,0,.45);
  --map0:#14213a; --mapstroke:#0a1020;
  --sans:'Manrope',system-ui,-apple-system,Segoe UI,sans-serif; --mono:'JetBrains Mono',ui-monospace,Menlo,monospace;
  color-scheme:dark;
}
:root[data-theme="light"]{
  --bg:#f4f6fb; --bg2:#ffffff; --panel:#ffffff; --panel2:#f0f3fa; --line:#dde3f0; --line2:#c8d1e4;
  --ink:#101a2e; --dim:#53627f; --faint:#8793ad; --teal:#0d9488; --amber:#b7791f; --rose:#e11d48; --blue:#2563eb; --violet:#7c3aed;
  --sel:rgba(13,148,136,.10); --shadow:0 18px 40px rgba(16,26,46,.15); --map0:#e3e9f5; --mapstroke:#ffffff; color-scheme:light;
}
@media (prefers-color-scheme: light){
  :root:not([data-theme="dark"]){
    --bg:#f4f6fb; --bg2:#ffffff; --panel:#ffffff; --panel2:#f0f3fa; --line:#dde3f0; --line2:#c8d1e4;
    --ink:#101a2e; --dim:#53627f; --faint:#8793ad; --teal:#0d9488; --amber:#b7791f; --rose:#e11d48; --blue:#2563eb; --violet:#7c3aed;
    --sel:rgba(13,148,136,.10); --shadow:0 18px 40px rgba(16,26,46,.15); --map0:#e3e9f5; --mapstroke:#ffffff; color-scheme:light;
  }
}
*{box-sizing:border-box}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:14px/1.45 var(--sans);-webkit-font-smoothing:antialiased;overflow:hidden}
[hidden]{display:none!important}
a{color:inherit}
.dim{color:var(--dim)} .mono{font-family:var(--mono)}
.top{height:52px;display:flex;align-items:center;gap:18px;padding:0 20px;border-bottom:1px solid var(--line);background:var(--bg2)}
.brand{display:flex;align-items:center;gap:8px;text-decoration:none;font-size:15px}
.brand .dim{font-weight:400}
.logo{width:20px;height:20px;border-radius:50%;border:2px solid var(--teal);position:relative;display:inline-block}
.logo:after{content:"";position:absolute;inset:4px;border-radius:50%;background:var(--amber)}
.crumbs{flex:1;display:flex;gap:8px;align-items:center;color:var(--dim);font-size:13px;min-width:0;overflow:hidden;white-space:nowrap}
.crumbs a{text-decoration:none;color:var(--dim)} .crumbs a:hover{color:var(--ink)}
.crumbs .cur{color:var(--ink)} .crumbs .sep{color:var(--faint)}
.top-actions{display:flex;gap:8px;align-items:center}
.pill{font:12px var(--mono);color:var(--dim);border:1px solid var(--line);border-radius:99px;padding:3px 10px;background:var(--panel)}
.pill.ok{color:var(--teal)} .pill.warn{color:var(--amber)}
.btn{font:600 13px var(--sans);color:var(--ink);background:var(--panel);border:1px solid var(--line2);border-radius:8px;padding:7px 12px;cursor:pointer;white-space:nowrap}
.btn:hover{border-color:var(--teal)} .btn:focus-visible,.search:focus-visible,select:focus-visible,input:focus-visible,textarea:focus-visible,.choice:focus-visible,.rg:focus-visible{outline:2px solid var(--teal);outline-offset:2px}
.btn.primary{background:var(--teal);border-color:var(--teal);color:#04201c}
.btn.ghost{background:transparent;border-color:transparent} .btn.small{padding:4px 9px;font-size:12px}
.btn.link{border:0;background:none;color:var(--dim);text-decoration:underline;padding:4px 6px}
.btn.danger{color:var(--rose)} .btn[disabled]{opacity:.45;cursor:not-allowed}
#app{height:calc(100% - 52px);position:relative}
.view{position:absolute;inset:0}

/* landing */
.landing{display:grid;place-items:center;overflow:auto;background:radial-gradient(900px 500px at 70% -10%,rgba(45,212,191,.10),transparent),radial-gradient(700px 400px at 10% 110%,rgba(251,191,36,.07),transparent)}
.landing-inner{width:min(880px,100% - 32px);padding:32px 0}
.eyebrow{font:500 12px var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--teal);margin:0 0 10px}
h1{font-size:clamp(28px,4vw,42px);line-height:1.1;margin:0 0 10px;letter-spacing:-.02em}
.lede{color:var(--dim);margin:0 0 28px;font-size:15px}
.choices{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:16px}
.choice{display:block;text-decoration:none;background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:24px;transition:.15s;position:relative;overflow:hidden}
.choice:hover{border-color:var(--teal);transform:translateY(-2px);box-shadow:var(--shadow)}
.choice h2{margin:14px 0 6px;font-size:22px} .choice p{color:var(--dim);margin:0 0 18px}
.choice .go{color:var(--teal);font-weight:700}
.ci{width:64px;height:40px;color:var(--amber)}

/* map view */
.mapview{display:grid;grid-template-columns:340px 1fr}
.rail{border-right:1px solid var(--line);background:var(--bg2);overflow:auto;padding:14px}
.rail h3{font:500 11px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--faint);margin:6px 4px 10px}
.rg{display:block;width:100%;text-align:left;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px;margin-bottom:8px;cursor:pointer;color:var(--ink);font:inherit}
.rg:hover,.rg.hl{border-color:var(--c,var(--teal))}
.rg .r1{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.rg .nm{font-weight:700;display:flex;align-items:center;gap:8px}
.rg .sw{width:10px;height:10px;border-radius:3px;background:var(--c)}
.rg .n{font:500 13px var(--mono)}
.rg .bar{height:4px;border-radius:3px;background:var(--line);margin:9px 0 7px;overflow:hidden}
.rg .bar i{display:block;height:100%;background:var(--c)}
.rg .meta{display:flex;gap:12px;color:var(--dim);font-size:12px}
.rg .subs{display:none;margin-top:10px;border-top:1px solid var(--line);padding-top:8px}
.rg.open .subs{display:block}
.subs .ct{display:flex;justify-content:space-between;padding:4px 2px;border-radius:6px;font-size:13px;cursor:pointer}
.subs .ct:hover{background:var(--panel2)} .subs .ct span:last-child{font-family:var(--mono);color:var(--dim)}
.subs .openall{margin-top:8px;width:100%}
.stage{position:relative;overflow:hidden;background:radial-gradient(800px 500px at 50% 40%,var(--panel2),var(--bg))}
.mapwrap{position:absolute;inset:0}
#map{width:100%;height:100%;display:block;cursor:grab}
#map .land{stroke:var(--mapstroke);stroke-width:.5;transition:fill .15s}
#map .land.has{cursor:pointer} #map .land.has:hover{stroke:var(--ink);stroke-width:1.2}
#map .land.dim{opacity:.25}
#map .dot{stroke:var(--mapstroke);stroke-width:1;cursor:pointer;fill-opacity:.9} #map .dot:hover{stroke:var(--ink)}
.legend{position:absolute;left:16px;bottom:16px;background:var(--bg2);border:1px solid var(--line);border-radius:10px;padding:10px 12px;font-size:12px;color:var(--dim);max-width:260px}
.legend .row{display:flex;align-items:center;gap:7px;margin:2px 0}.legend i{width:10px;height:10px;border-radius:3px;display:inline-block}
.maptools{position:absolute;right:16px;top:16px}
.tip{position:absolute;pointer-events:none;background:var(--bg2);border:1px solid var(--line2);border-radius:10px;padding:9px 12px;box-shadow:var(--shadow);font-size:12.5px;z-index:5;min-width:150px}
.tip b{display:block;font-size:14px;margin-bottom:2px}.tip .mono{color:var(--dim)}

/* data view */
.dataview{display:flex;flex-direction:column;padding:16px 20px 10px;gap:10px;min-height:0}
.dv-head{display:flex;flex-wrap:wrap;gap:8px 18px;align-items:center;justify-content:space-between}
.dv-title{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap} .dv-title h1{font-size:24px;margin:0}
.dv-chips{display:flex;gap:6px;flex-wrap:wrap;max-height:64px;overflow:auto}
.chip{font:600 12px var(--sans);border:1px solid var(--line2);background:var(--panel);color:var(--dim);border-radius:99px;padding:4px 10px;cursor:pointer}
.chip:hover{border-color:var(--teal);color:var(--ink)} .chip.on{background:var(--teal);color:#04201c;border-color:var(--teal)}
.chip .n{font-family:var(--mono);opacity:.75;margin-left:4px}
.toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.search,select,.field input,.field textarea,.field select{font:13px var(--sans);color:var(--ink);background:var(--panel);border:1px solid var(--line2);border-radius:8px;padding:7px 10px}
.search{flex:1 1 260px;min-width:200px;max-width:420px}
.seg{display:flex;border:1px solid var(--line2);border-radius:8px;overflow:hidden}
.seg button{font:600 12px var(--sans);background:var(--panel);color:var(--dim);border:0;border-right:1px solid var(--line2);padding:7px 11px;cursor:pointer}
.seg button:last-child{border:0}.seg button.on{background:var(--sel);color:var(--teal)}
.tb-filters{display:flex;gap:6px;flex-wrap:wrap}
.tb-right{margin-left:auto;display:flex;gap:8px}
.tog{display:inline-flex;gap:6px;align-items:center;font-size:12.5px;color:var(--dim);border:1px solid var(--line2);border-radius:8px;padding:6px 10px;background:var(--panel);cursor:pointer;user-select:none}
.tog.on{color:var(--teal);border-color:var(--teal);background:var(--sel)}
.selbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;background:var(--sel);border:1px solid var(--teal);border-radius:10px;padding:7px 12px}
.sel-actions{display:flex;gap:6px;flex-wrap:wrap}
.grid{position:relative;flex:1;min-height:0;border:1px solid var(--line);border-radius:12px;background:var(--panel);overflow:hidden;display:flex;flex-direction:column}
.grid-head{display:flex;border-bottom:1px solid var(--line2);background:var(--panel2);overflow:hidden;flex:none}
.grid-body{flex:1;overflow:auto;position:relative}
.grid-spacer{width:1px}
.grid-rows{position:absolute;left:0;top:0;right:auto}
.gr{display:flex;height:38px;align-items:center;border-bottom:1px solid var(--line);cursor:default;position:absolute;left:0}
.gr:hover{background:var(--panel2)} .gr.sel{background:var(--sel)} .gr.open{box-shadow:inset 3px 0 var(--amber)}
.gc{flex:none;padding:0 10px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}
.gc.chk{width:42px;padding:0;display:grid;place-items:center}
.gc.mono{font-family:var(--mono);font-size:12px;color:var(--dim)}
.gc a{color:var(--blue);text-decoration:none} .gc a:hover{text-decoration:underline}
.gh{flex:none;padding:9px 10px;font:600 11px var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--dim);cursor:pointer;white-space:nowrap;user-select:none;position:relative}
.gh:hover{color:var(--ink)} .gh.sorted{color:var(--teal)}
.gh .rs{position:absolute;right:0;top:0;bottom:0;width:6px;cursor:col-resize}
.grid-empty,.grid-loading{position:absolute;inset:80px 0 0;display:grid;place-items:start center;color:var(--dim);padding-top:40px;pointer-events:none}
.statusline{display:flex;justify-content:space-between;color:var(--dim);font:12px var(--mono);padding:2px 4px}
.st{display:inline-block;font:600 11px var(--sans);padding:2px 8px;border-radius:99px;border:1px solid var(--line2);color:var(--dim)}
.st.s-contacted{color:var(--blue);border-color:var(--blue)} .st.s-replied{color:var(--amber);border-color:var(--amber)}
.st.s-partner{color:var(--teal);border-color:var(--teal)} .st.s-notinterested,.st.s-invalid{color:var(--rose);border-color:var(--rose)}
.star{cursor:pointer;color:var(--faint);background:none;border:0;font-size:15px;padding:0}.star.on{color:var(--amber)}
input[type=checkbox]{accent-color:var(--teal);width:15px;height:15px;cursor:pointer}

/* drawer */
.drawer{position:fixed;right:0;top:52px;bottom:0;width:min(460px,100%);background:var(--bg2);border-left:1px solid var(--line2);box-shadow:var(--shadow);z-index:20;overflow:auto;padding:18px 20px 40px}
.drawer h2{margin:0 0 2px;font-size:19px;padding-right:36px}.drawer .x{position:absolute;right:14px;top:12px}
.drawer .tags{display:flex;gap:6px;flex-wrap:wrap;margin:8px 0 14px}
.drawer dl{display:grid;grid-template-columns:130px 1fr;gap:7px 12px;margin:0 0 18px}
.drawer dt{color:var(--faint);font:500 11px var(--mono);text-transform:uppercase;letter-spacing:.05em;padding-top:2px}
.drawer dd{margin:0;word-break:break-word}.drawer dd a{color:var(--blue)}
.drawer h3{font:500 11px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--faint);margin:18px 0 8px}
.qa{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:6px}
.field{display:block;margin:8px 0}.field span{display:block;font-size:12px;color:var(--dim);margin-bottom:4px}
.field input,.field textarea,.field select{width:100%}.field textarea{min-height:84px;resize:vertical}

/* modal */
.modal{position:fixed;inset:0;background:rgba(2,6,16,.6);z-index:30;display:grid;place-items:center;padding:16px}
.mbox{background:var(--bg2);border:1px solid var(--line2);border-radius:16px;width:min(760px,100%);max-height:calc(100vh - 32px);overflow:auto;box-shadow:var(--shadow);padding:22px}
.mbox h2{margin:0 0 4px}.mbox .sub{color:var(--dim);margin:0 0 16px}
.msec{margin:16px 0}.msec>h4{font:500 11px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--faint);margin:0 0 8px}
.radios{display:grid;gap:6px}
.radio{display:flex;gap:10px;align-items:center;border:1px solid var(--line2);border-radius:10px;padding:9px 12px;cursor:pointer;background:var(--panel)}
.radio.on{border-color:var(--teal);background:var(--sel)} .radio[aria-disabled=true]{opacity:.45;cursor:not-allowed}
.radio .n{margin-left:auto;font:12px var(--mono);color:var(--dim)}
.colgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:4px 14px}
.colgrid label{display:flex;gap:8px;align-items:center;padding:3px 0;cursor:pointer}
.mrow{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.mfoot{display:flex;gap:8px;justify-content:flex-end;margin-top:20px;align-items:center}
.mfoot .info{margin-right:auto;color:var(--dim);font:12px var(--mono)}
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);background:var(--ink);color:var(--bg);padding:10px 16px;border-radius:10px;z-index:40;font-weight:600;box-shadow:var(--shadow)}

@media (max-width:860px){
  .mapview{grid-template-columns:1fr;grid-template-rows:auto 1fr}
  .rail{border-right:0;border-bottom:1px solid var(--line);max-height:38vh}
  .dataview{padding:12px}
  .crumbs{display:none}
}

/* home centre */
.centre{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;margin-top:22px}
.cc{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:16px}
.cc h3{font:500 11px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--faint);margin:0 0 12px}
.bar-row{display:grid;grid-template-columns:minmax(90px,1.2fr) 2fr auto;gap:10px;align-items:center;margin:7px 0;text-decoration:none;font-size:13px}
.bar-row span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.bar-row i{height:6px;border-radius:4px;background:var(--line);overflow:hidden}.bar-row b{display:block;height:100%;background:var(--c)}
.bar-row em{font:12px var(--mono);color:var(--dim);font-style:normal}
a.bar-row:hover span{color:var(--teal)}

/* progress */
.progressview{overflow:auto}.pg-inner{width:min(1100px,100% - 32px);margin:0 auto;padding:24px 0 48px}
.pg-head{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;flex-wrap:wrap;margin-bottom:12px}.pg-head h1{font-size:28px;margin:0}.pg-head p{margin:4px 0 0}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin-top:12px}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px}.kpi span{display:block;font:500 11px var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--faint)}.kpi b{font-size:24px;letter-spacing:-.02em}
.pg-table{overflow:auto}.ptable{width:100%;border-collapse:collapse;font-size:13px}.ptable th{text-align:left;font:500 11px var(--mono);text-transform:uppercase;letter-spacing:.06em;color:var(--faint);padding:6px 10px;border-bottom:1px solid var(--line2)}
.ptable td{padding:7px 10px;border-bottom:1px solid var(--line);max-width:420px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.mini{display:inline-block;width:70px;height:6px;border-radius:4px;background:var(--line);vertical-align:middle;overflow:hidden}.mini b{display:block;height:100%;background:var(--teal)}
