:root{--bg:#0f1419;--panel:#171d25;--panel2:#1e2631;--line:#28323f;--text:#e6edf3;--muted:#8b98a8;--accent:#2dd4bf;--accent2:#60a5fa;--ok:#34d399;--warn:#fbbf24;--bad:#f87171;--radius:10px}
*{box-sizing:border-box}[x-cloak]{display:none!important}
body{margin:0;font:14px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text)}
a{color:var(--accent2);text-decoration:none}a:hover{text-decoration:underline}
h2,h3,h4{margin:.2em 0 .6em;font-weight:600}h3{font-size:15px}h4{font-size:13px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin-top:1em}
code{background:var(--panel2);padding:1px 5px;border-radius:4px}
.topbar{display:flex;align-items:center;gap:28px;padding:10px 22px;background:var(--panel);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.brand{font-size:17px;letter-spacing:.02em}.brand .dot{display:inline-block;width:10px;height:10px;border-radius:50%;background:var(--accent);margin-right:6px}
nav{display:flex;gap:4px}nav a{color:var(--muted);padding:6px 12px;border-radius:6px}nav a.active,nav a:hover{color:var(--text);background:var(--panel2);text-decoration:none}
.status{margin-left:auto;display:flex;gap:6px}
main{padding:20px 22px;max-width:1500px;margin:0 auto}
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:16px;margin-bottom:16px}
.card.narrow{width:420px}.card.wide{width:min(1100px,95vw);max-height:92vh;overflow:auto}
.grid2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px}@media(max-width:900px){.grid2{grid-template-columns:1fr}}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-bottom:16px}
.kpi.click{cursor:pointer;transition:border-color .15s,transform .15s}.kpi.click:hover{border-color:var(--accent);transform:translateY(-1px)}
.chip{display:inline-flex;align-items:center;gap:4px;background:#1e3a5f;color:#93c5fd;border-radius:12px;padding:3px 10px;font-size:12px}@media(max-width:1100px){.kpis{grid-template-columns:repeat(3,1fr)}}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px}.kpi .n{font-size:28px;font-weight:700;color:var(--accent)}.kpi .l{color:var(--muted);font-size:12px}
.bar{display:grid;grid-template-columns:200px 1fr 40px;align-items:center;gap:10px;margin:5px 0}.bl{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bt{height:9px;background:var(--panel2);border-radius:5px;overflow:hidden}.bf{height:100%;background:var(--accent)}.bf.alt{background:var(--accent2)}.bn{text-align:right;font-size:12px}
table{width:100%;border-collapse:collapse}th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);padding:8px 8px;border-bottom:1px solid var(--line)}td{padding:9px 8px;border-bottom:1px solid var(--line);vertical-align:top}
table.compact td{padding:6px 8px}.rowlink{cursor:pointer}.rowlink:hover{background:var(--panel2)}
.name{color:var(--text);font-weight:600}.sub{font-size:12px;color:var(--muted);margin-top:2px}.sub a{margin-right:8px}.li{color:#7cc4ff}.small{font-size:12px}.muted{color:var(--muted)}.center{text-align:center}
.score{display:inline-block;min-width:36px;text-align:center;padding:2px 7px;border-radius:12px;font-weight:700;background:var(--panel2)}.score.hot{background:#064e3b;color:var(--ok)}.score.warm{background:#452c06;color:var(--warn)}.score.cold{background:#3b1a1a;color:var(--bad)}.score.big{font-size:24px;padding:4px 14px}
.tag{display:inline-block;padding:2px 8px;border-radius:10px;font-size:11px;background:var(--panel2);color:var(--muted)}.tag.ok{background:#064e3b;color:var(--ok)}.tag.warn{background:#452c06;color:var(--warn)}.tag.bad{background:#3b1a1a;color:var(--bad)}
.st-qualified{background:#1e3a5f;color:#93c5fd}.st-approved{background:#064e3b;color:var(--ok)}.st-rejected,.st-unqualified{background:#2a2f36;color:var(--muted)}.st-duplicate{background:#452c06;color:var(--warn)}.st-pushed{background:#312e81;color:#c7d2fe}.st-new{background:var(--panel2)}
.pill{background:var(--accent);color:#000;border-radius:10px;padding:0 6px;font-size:11px;margin-left:4px}
button,.btn{background:var(--panel2);color:var(--text);border:1px solid var(--line);border-radius:7px;padding:7px 12px;cursor:pointer;font:inherit}button:hover{border-color:var(--muted)}button:disabled{opacity:.5;cursor:default}
button.primary{background:var(--accent);color:#04201c;border-color:var(--accent);font-weight:600}button.sm{padding:3px 8px;font-size:12px}button.ok{color:var(--ok)}button.bad{color:var(--bad)}button.link{background:none;border:none;color:var(--muted)}
input,select,textarea{background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:7px;padding:7px 10px;font:inherit;width:100%;margin:4px 0}input[type=checkbox]{width:auto;margin:0 4px 0 0}
.toolbar{display:flex;gap:8px;align-items:center;margin-bottom:12px;flex-wrap:wrap}.toolbar input[type=search]{max-width:300px}.toolbar select{width:auto}.spacer{flex:1}
.bulk{display:flex;gap:8px;align-items:center;padding:8px 12px;background:#1e3a5f;border-radius:7px;margin-bottom:10px}
.actions{white-space:nowrap}.pager{display:flex;gap:8px;align-items:center;justify-content:flex-end;padding-top:10px}
.field{margin-bottom:12px}.field>label{display:block;font-size:12px;color:var(--muted);margin-bottom:4px}.checks{display:flex;flex-wrap:wrap;gap:6px 14px}.checks label{display:flex;align-items:center;gap:4px}.row{display:flex;gap:10px}.row>*{flex:1}
.runrow{display:flex;gap:10px;align-items:center;padding:6px 0;border-bottom:1px solid var(--line)}.runcard{padding:10px 0;border-bottom:1px solid var(--line)}.runhead{display:flex;gap:8px;align-items:center;margin-bottom:4px}
.modal{position:fixed;inset:0;background:rgba(0,0,0,.6);display:flex;align-items:center;justify-content:center;z-index:20}
/* opened from inside the lead window (battlecard, competitor profile): stay above it */
.modal.over{z-index:25}
.dhead{display:flex;justify-content:space-between;align-items:flex-start;gap:20px;border-bottom:1px solid var(--line);padding-bottom:12px;margin-bottom:10px}.dhead .right{text-align:right}
.dfoot{display:flex;gap:8px;align-items:center;border-top:1px solid var(--line);padding-top:12px;margin-top:12px}
.contacts{list-style:none;padding:0;margin:0}.contacts li{padding:4px 0;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
pre{background:var(--bg);padding:8px;border-radius:6px;overflow:auto;max-height:220px;white-space:pre-wrap}
.toast{position:fixed;bottom:20px;right:20px;background:var(--panel2);border:1px solid var(--accent);padding:10px 16px;border-radius:8px;z-index:30}
details summary{cursor:pointer;color:var(--muted);font-size:12px;margin:6px 0}
/* v0.3: opportunities, lead management, users */
.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}@media(max-width:1100px){.grid3{grid-template-columns:1fr}}
.kv{display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px solid var(--line);font-size:13px}.kv b{color:var(--accent)}
.kpi.hotcard{border-color:var(--accent)}.kpi .n.warnn{color:var(--warn)}
.pill.hot{background:var(--warn)}
.tag.hot{background:#452c06;color:var(--warn)}.tag.tagc{background:#1e3a5f;color:#93c5fd;margin-right:3px}
.opp{border-left:3px solid var(--warn)}.opphead{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:6px}
.name.big{font-size:17px}.opprow{background:rgba(251,191,36,.04)}
.mgmt{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;background:var(--panel2);padding:10px;border-radius:8px;margin:10px 0}
.mgmt label{font-size:12px;color:var(--muted)}.mgmt input,.mgmt select{margin:2px 0 0}
@media(max-width:1000px){.mgmt{grid-template-columns:1fr 1fr}}
.history{list-style:none;padding:0;max-height:220px;overflow:auto}.history li{padding:3px 0;border-bottom:1px solid var(--line)}.history li.comment{background:rgba(96,165,250,.08);padding:4px 6px;border-radius:4px}
.due{color:var(--warn);font-weight:600}
.usermenu{display:inline-flex;align-items:center;gap:4px}
.st-contacted{background:#1e3a5f;color:#93c5fd}.st-meeting{background:#312e81;color:#c7d2fe}.st-proposal{background:#452c06;color:var(--warn)}.st-won{background:#064e3b;color:var(--ok)}.st-lost{background:#3b1a1a;color:var(--bad)}

/* v0.4 pan-African */
.bar.click{cursor:pointer;border-radius:4px}.bar.click:hover{background:var(--panel2)}

/* v2.0 */
.pr{display:inline-block;min-width:22px;text-align:center;padding:1px 7px;border-radius:6px;font-weight:700;font-size:12px;background:var(--panel2);color:var(--muted)}
.pr-A{background:#064e3b;color:var(--ok)}.pr-B{background:#1e3a5f;color:#93c5fd}.pr-C{background:#452c06;color:var(--warn)}.pr-D{background:#2a2f36;color:var(--muted)}.pr.big{font-size:14px;padding:3px 10px}
.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin:8px 0 12px}.tabs a{color:var(--muted);padding:6px 12px;border-radius:6px 6px 0 0}.tabs a.active,.tabs a:hover{color:var(--text);background:var(--panel2);text-decoration:none}
.warnbox{background:#452c06;color:var(--warn);padding:6px 10px;border-radius:6px}.sub.warn{color:var(--warn)}
.chat{max-height:420px;overflow:auto;display:flex;flex-direction:column;gap:8px;margin-bottom:8px}.bubble{padding:8px 12px;border-radius:10px;max-width:95%}.bubble.user{background:#1e3a5f;align-self:flex-end}.bubble.assistant{background:var(--panel2);align-self:flex-start}.bubble pre{margin:0;background:none;padding:0;max-height:none}
select.sm{padding:2px 6px;font-size:12px;width:auto;margin:0}

/* v2.0 responsive: phones and small tablets */
@media(max-width:900px){
  .topbar{flex-wrap:wrap;gap:8px 12px;padding:8px 12px}
  .brand{font-size:15px}
  nav{order:3;width:100%;overflow-x:auto;white-space:nowrap;flex-wrap:nowrap;padding-bottom:2px;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  nav::-webkit-scrollbar{display:none}
  nav a{padding:6px 9px;font-size:13px;flex:0 0 auto}
  .status{margin-left:auto;flex-wrap:wrap;justify-content:flex-end;gap:4px}
  .status .tag{font-size:10px}
  main{padding:12px 10px}
  .kpis{grid-template-columns:repeat(2,1fr);gap:8px}
  .kpi{padding:10px}.kpi .n{font-size:22px}.kpi .l{font-size:11px}
  .grid2,.grid3{grid-template-columns:1fr}
  .card{padding:12px;overflow-x:auto}
  .card.narrow,.card.wide{width:100%;max-width:100%}
  .modal{align-items:flex-start;padding:8px}
  .card.wide{max-height:calc(100vh - 16px)}
  .toolbar{gap:6px}.toolbar input[type=search]{max-width:100%;flex:1 1 100%}.toolbar select{flex:1 1 45%;max-width:100%;margin:0}
  .toolbar h3{flex:1 1 100%}
  .bulk{flex-wrap:wrap}
  .mgmt{grid-template-columns:1fr 1fr;gap:8px}
  .dhead{flex-direction:column;gap:8px}.dhead .right{text-align:left}
  .tabs{overflow-x:auto;white-space:nowrap;flex-wrap:nowrap}.tabs a{flex:0 0 auto;padding:6px 9px}
  .bar{grid-template-columns:110px 1fr 36px}
  table{min-width:640px}table.compact{min-width:520px}
  td,th{padding:7px 6px}
  input,select,textarea{font-size:16px}  /* 16px stops iOS from zooming into fields */
  button,.btn{padding:8px 12px}
  .row{flex-wrap:wrap}
  .chat{max-height:50vh}
  .toast{left:10px;right:10px;bottom:10px}
}
@media(max-width:520px){
  .kpis{grid-template-columns:1fr 1fr}
  .mgmt{grid-template-columns:1fr}
  .toolbar select{flex:1 1 46%;min-width:0}
  .toolbar button,.toolbar .btn{flex:1 1 46%}
  .runrow{flex-wrap:wrap}
  .pager{justify-content:center}
}

.nowrap{white-space:nowrap}
.note.ok{background:#06281f;border-left:3px solid var(--ok);padding:8px 10px;border-radius:6px}
/* long unbroken text (news/RSS URLs, IDs) wraps instead of widening a column or the window */
.grid2>*,.grid3>*{min-width:0}
.card a,.card li,.card td,.card p{overflow-wrap:anywhere}
.mfa-code{font-size:1.4em;letter-spacing:.2em;text-align:center}
.qr{display:flex;justify-content:center;margin:8px 0}.qr svg{background:#fff;padding:4px;border-radius:6px;max-width:220px;height:auto}
.mfa-key{word-break:break-all}
.backup-codes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;margin:10px 0}.backup-codes code{text-align:center;padding:4px}
/* phones: no table column narrower than a short word (long words still wrap), and small key/value tables stack */
@media(max-width:900px){
  .card td,.card th{min-width:72px}
  table.stack{min-width:0;width:100%}
  table.stack tr{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 10px;padding:6px 0;border-bottom:1px solid var(--line)}
  table.stack td{min-width:0;padding:0;border:0}
  table.stack td:nth-child(1){font-weight:600}
  table.stack td:nth-child(2){text-align:right;white-space:nowrap}
  table.stack td:nth-child(n+3){grid-column:1 / -1}
}

/* phones: list tables become one card per row; each value is preceded by its column name (data-label, set in app.js) */
@media(max-width:700px){
  .card table:has(> thead),.card table.compact:has(> thead){min-width:0;width:100%}
  .card table:has(> thead) thead{display:none}
  .card table:has(> thead) tbody tr{display:block;border:1px solid var(--line);border-radius:8px;padding:6px 10px;margin:0 0 10px;background:var(--panel2)}
  .card table:has(> thead) tbody td{display:block;position:relative;min-width:0;padding:4px 0 4px 36%;border:0;text-align:left;white-space:normal;min-height:1.4em}
  .card table:has(> thead) tbody td::before{content:attr(data-label);position:absolute;left:0;top:5px;width:33%;color:var(--muted);font-size:11px;line-height:1.3;text-transform:uppercase;letter-spacing:.02em;overflow-wrap:break-word}
  .card table:has(> thead) tbody td[data-label=""]{padding-left:0}
  .card table:has(> thead) tbody td[data-label=""]::before{display:none}
  .card table:has(> thead) tbody td:empty{display:none}
  .card table:has(> thead) tbody td.nowrap{white-space:normal}
}
@media(max-width:900px){.card select,.card input,.card textarea{max-width:100%;box-sizing:border-box}}
button.link.xclose{display:none}
@media(max-width:900px){
  button.link.xclose{display:block;position:sticky;top:0;float:right;z-index:3;font-size:20px;line-height:1;padding:6px 10px;margin:-4px -4px 0 8px;background:var(--panel);border:1px solid var(--line);border-radius:8px;box-shadow:0 2px 8px rgba(0,0,0,.4)}
  .dfoot{flex-wrap:wrap}
  .tabs{flex-wrap:wrap;overflow-x:visible;white-space:normal}
  .card table:not(:has(> thead)){min-width:0}
  .card span,.card code{overflow-wrap:anywhere}
}

/* header: one line; overflowing pages go into the three-dots list; user actions in a dropdown */
.topbar{flex-wrap:nowrap;gap:16px}
.brand{white-space:nowrap;flex:0 0 auto}
nav{flex:0 1 auto;min-width:0;overflow:hidden;flex-wrap:nowrap;align-items:center}
nav a{white-space:nowrap;flex:0 0 auto}
nav a.ov{display:none !important}
.navmore{position:relative;flex:0 0 auto}
.navmore[hidden]{display:none}
.navmore-btn{background:none;border:1px solid transparent;color:var(--muted);font-size:20px;line-height:1;padding:4px 10px;border-radius:6px;cursor:pointer}
.navmore-btn:hover,.navmore.open .navmore-btn{color:var(--text);background:var(--panel2)}
.navmore-btn.active{color:var(--text);border-color:var(--accent)}
.navmore-list,.dropmenu{position:absolute;right:0;top:calc(100% + 6px);min-width:200px;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:6px;box-shadow:0 8px 24px rgba(0,0,0,.45);z-index:30;flex-direction:column}
.navmore-list{display:none}
.navmore.open .navmore-list{display:flex}
.navmore-list a{color:var(--text);padding:8px 12px;border-radius:6px;white-space:nowrap}
.navmore-list a:hover{background:var(--panel2);text-decoration:none}
.navmore-list a.active{color:var(--accent)}
.status{flex:0 0 auto;flex-wrap:nowrap;align-items:center;white-space:nowrap}
.aitag{max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.usermenu{position:relative}
.userbtn{cursor:pointer;border:1px solid var(--line);font:inherit;font-size:12px}
.dropmenu{display:flex}
.dropmenu button{display:block;width:100%;text-align:left;background:none;border:0;color:var(--text);padding:8px 12px;border-radius:6px;cursor:pointer;white-space:nowrap}
.dropmenu button:hover{background:var(--panel2)}
.dm-info{padding:6px 12px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin:4px 0}
@media(max-width:900px){
  .topbar{flex-wrap:wrap;gap:8px 12px}
  nav{order:3;flex:1 1 calc(100% - 60px);width:auto;overflow:hidden;padding-bottom:0}
  .navmore{order:4}
  .aitag{max-width:120px}
}
nav a.disabled{opacity:.45;cursor:not-allowed}
th.sortable{cursor:pointer;user-select:none;white-space:nowrap}th.sortable:hover{color:var(--text)}th.sorted{color:var(--accent)}th .arr{font-size:10px}
