CSS:

/* campaign.css — Campaign Management v2.31
   - AI: actionable lists, budget slider, SLA, what-if
   - Org modal sparkline height fix
   - Contact modal: header + stacked campaign cards
   - Square +1 button with round badge
*/

/* Theme */
:root{
  --brand:#0ea5e9; --ink:#0f172a; --muted:#475569; --line:#e2e8f0; --bg:#fff;
  --chip:#f1f5f9; --chipText:#334155; --ok:#16a34a; --warn:#f59e0b; --bad:#ef4444;
  --selBg:#fbfdff;
}

#campaigns{ padding:0 2.5rem 3rem; max-width:1400px; margin:0 auto; color:var(--ink); }

/* Head */
.cmp-head{ display:grid; grid-template-columns:1fr auto auto; gap:12px; align-items:center; margin:16px 0 8px; }
.cmp-head h2{ margin:0; font-size:22px; font-weight:700; letter-spacing:.2px; }
.cmp-head .btn{ height:36px; border:1px solid var(--line); border-radius:8px; background:#fff; padding:6px 12px; cursor:pointer; font-weight:600; box-shadow:0 1px 0 rgba(2,6,23,.04) inset; }
.cmp-head .btn.brand{ background:var(--brand); color:#fff; border-color:var(--brand); }

/* Builder */
.cmp-builder{ border:1px solid var(--line); border-radius:14px; padding:14px; background:#fff; margin-bottom:12px; position:relative;
  box-shadow:0 6px 24px rgba(2,6,23,.08),0 2px 6px rgba(2,6,23,.05);
  background: radial-gradient(1200px 600px at -10% -20%, rgba(14,165,233,.06), transparent 60%), #fff;
}
.cmp-builder h3{ margin:0 0 10px; font-size:16px; }
.cmp-grid{ display:grid; grid-template-columns:repeat(4,minmax(180px,1fr)); gap:10px; }
.cmp-grid .inp, .cmp-grid select{ border:1px solid var(--line); border-radius:8px; padding:8px 10px; height:36px; }
.cmp-builder .row{ display:flex; gap:8px; align-items:center; margin-top:10px; }
.cmp-builder .pill{ background:var(--chip); color:var(--chipText); padding:4px 10px; border-radius:999px; font-size:12px; border:1px solid var(--line); }
.cmp-builder .btn-mini{ height:32px; padding:4px 10px; border:1px solid var(--line); border-radius:8px; background:#fff; cursor:pointer; }
.cmp-builder .btn-mini.brand{ background:var(--brand); border-color:var(--brand); color:#fff; }
.cmp-builder .closex{ position:absolute; top:8px; right:10px; border:none; background:transparent; font-size:18px; cursor:pointer; }

/* Cards */
.cmp-card{ background:#fff; border:1px solid var(--line); border-radius:14px; padding:12px; margin-top:12px; position:relative;
  box-shadow:0 6px 24px rgba(2,6,23,.08),0 2px 6px rgba(2,6,23,.05); overflow:visible;
}
.cmp-card h4{ margin:0 0 8px; font-size:14px; font-weight:800; }
.cmp-chart{ height:260px; }

/* ===== AI (collapsible) ===== */
.ai-card{ border:1px solid var(--line); border-left:4px solid var(--brand); border-radius:14px; background:#fff; margin-top:12px; position:relative; z-index:1; }
.ai-head{ display:flex; align-items:center; gap:12px; padding:10px 12px; cursor:pointer; user-select:none; outline:none; background:#fbfdff; border-bottom:1px dashed var(--line); position:relative; z-index:3; }
.ai-head:focus-visible{ box-shadow:0 0 0 3px rgba(14,165,233,.25); border-radius:8px; }
.ai-title{ font-weight:700; font-size:14px; display:flex; align-items:center; gap:8px; }
.ai-dot{ width:8px; height:8px; border-radius:50%; background:var(--brand); position:relative; }
.ai-dot::after{ content:""; position:absolute; inset:-6px; border-radius:999px; background:radial-gradient(circle at center, rgba(14,165,233,.35), transparent 60%); animation:pulse 2.2s ease-in-out infinite; }
@keyframes pulse{ 0%,100%{opacity:.35} 50%{opacity:.1} }
.ai-counts{ margin-left:auto; display:flex; gap:8px; flex-wrap:wrap; }
.ai-chip{ background:#eef2ff; color:#3730a3; border-radius:999px; padding:2px 8px; font-size:12px; border:1px solid #e5e7eb; font-weight:700; }
.ai-chev{ margin-left:8px; transition:transform .2s ease; }
.ai-card.collapsed .ai-chev{ transform:rotate(-90deg); }
.ai-body{ padding:0 12px 12px; border-top:1px dashed var(--line); }
.ai-card.collapsed .ai-body{ display:none; }
.ai-section{ margin-top:10px; }
.ai-section h5{ margin:8px 0 4px; font-size:13px; font-weight:800; color:#0f172a; }
.ai-tags{ display:flex; flex-wrap:wrap; gap:6px; }
.ai-tag{ background:#f8fafc; border:1px solid var(--line); border-radius:999px; padding:2px 8px; font-size:12px; color:#334155; }
.ai-actions{ margin-top:8px; display:flex; gap:8px; flex-wrap:wrap; }
/* Replace the existing .ai-list rule with this: */
.ai-list{
  display:grid;
  gap:6px;
  grid-auto-rows:min-content; /* or: auto */
}

.ai-item{ display:flex; align-items:center; gap:10px; padding:6px 8px; border:1px solid var(--line); border-radius:10px; background:#fff; }
.ai-item .mini{ font-size:12px; color:#64748b }
.ai-controls{ display:flex; gap:12px; align-items:center; flex-wrap:wrap; }
.ai-controls input[type="range"]{ width:200px }

/* Status filter chips */
.filters-wrap{ padding:4px 0 8px; border-bottom:1px solid var(--line); margin-bottom:8px; }
.status-filter{ display:flex; flex-wrap:wrap; gap:8px; }
.status-chip{ background:var(--chip); color:var(--chipText); border:1px solid var(--line); padding:6px 10px; border-radius:999px; font-size:13px; cursor:pointer; user-select:none; transition:transform .08s ease, border-color .12s ease, background .12s ease, color .12s ease; }
.status-chip:hover{ transform:translateY(-1px) }
.status-chip.active{ background:var(--brand); color:#fff; border-color:var(--brand); box-shadow:0 1px 0 rgba(2,6,23,.06) inset }

/* Tools */
.tbl-tools{ background:#fbfdff; border:1px solid var(--line); border-radius:12px; padding:10px 12px; display:flex; justify-content:space-between; align-items:center; gap:12px; flex-wrap:wrap; margin:8px 0; }
.tools-right{ display:flex; gap:10px; align-items:center; flex-wrap:nowrap; }
.tools-right .inp{ width:260px; }
.tools-right .sel, .tools-right .btn, .tools-left .sel{ height:34px; }
.tbl-tools .btn{ border:1px solid var(--line); background:#fff; border-radius:8px; padding:6px 10px; cursor:pointer; }
.tbl-tools .btn.brand{ background:var(--brand); color:#fff; border-color:var(--brand); }
.tbl-tools .sel, .tbl-tools .inp{ border:1px solid var(--line); border-radius:8px; padding:6px 10px; }

/* Multi-select */
.msel{ min-width:320px; position:relative; }
.msel .msel-box{ display:flex; align-items:center; gap:6px; flex-wrap:wrap; min-height:36px; border:1px solid var(--line); border-radius:8px; background:#fff; padding:4px 6px; cursor:text; }
.msel .chip{ background:#eef2ff; color:#3730a3; border:1px solid #e5e7eb; border-radius:999px; padding:2px 8px; font-size:12px; display:flex; align-items:center; gap:6px; }
.msel .chip b{ font-weight:700 }
.msel .chip .x{ cursor:pointer; opacity:.7 }
.msel .placeholder{ color:#94a3b8; padding:2px 6px; }
.msel .dd{ position:absolute; z-index:5; left:0; right:0; top:calc(100% + 6px); background:#fff; border:1px solid var(--line); border-radius:10px; box-shadow:0 14px 30px rgba(2,6,23,.12); padding:8px; display:none; }
.msel.open .dd{ display:block; }
.msel .opt{ display:flex; align-items:center; gap:8px; padding:6px 8px; border-radius:8px; cursor:pointer; }
.msel .opt:hover{ background:var(--selBg); }
.msel .opt input{ width:16px; height:16px; }

/* Table */
.scroll-wrap{ overflow:auto; max-height:520px; border:1px solid var(--line); border-radius:12px; background:#fff; box-shadow: 0 1px 0 rgba(2,6,23,.03) inset; }
.cmp-table{ width:100%; border-collapse:collapse; font-size:14px; table-layout:fixed; }
.cmp-table thead th{ position:sticky; top:0; background:#fff; padding:8px; text-align:left; border-bottom:1px solid var(--line); z-index:20; font-weight:800; color:#334155; }
.cmp-table tbody td{ padding:8px; border-bottom:1px solid var(--line); vertical-align:middle; overflow:hidden; text-overflow:ellipsis; }
.cmp-table tbody tr:nth-child(even){ background:#fcfdff; }
.scroll-wrap.scrolled thead th{ box-shadow: 0 10px 14px -12px rgba(2,6,23,.35); }

/* Column widths */
#cmpTable col.c-org     { width: 220px; }
#cmpTable col.c-contact { width: 190px; }
#cmpTable col.c-title   { width: 160px; }
#cmpTable col.c-email   { width: 230px; }
#cmpTable col.c-phone   { width: 160px; }
#cmpTable col.c-camps   { width: 360px; }

/* Campaign badges */
.badges{ display:flex; flex-wrap:wrap; gap:6px; }
.cmp-badge{ display:inline-flex; align-items:center; gap:6px; background:#f8fafc; border:1px solid var(--line); border-radius:999px; padding:2px 8px; font-size:12px; color:#334155; }
.cmp-badge .dot{ width:8px; height:8px; border-radius:50%; background:#94a3b8; }
.cmp-badge.target .dot    { background:#94a3b8; }
.cmp-badge.contacted .dot { background:#f59e0b; }
.cmp-badge.accepted .dot  { background:#16a34a; }
.cmp-badge.declined .dot  { background:#ef4444; }
.cmp-badge.sel{ background:#e6f4ff; border-color:#cfe8ff; }

/* Modal (shared) */
.cmp-modal{ position:fixed; inset:0; background:rgba(15,23,42,.45); display:none; align-items:center; justify-content:center; z-index:1000; }
.cmp-modal.open{ display:flex; }
.cmp-modal .panel{ width:min(980px,96vw); max-height:92vh; overflow:auto; background:#fff; border-radius:16px; border:1px solid var(--line); box-shadow:0 18px 60px rgba(0,0,0,.28); }
.cmp-modal header{ display:flex; justify-content:space-between; align-items:center; padding:12px 14px; border-bottom:1px solid var(--line); background:#fbfdff; }
.cmp-modal header h3{ margin:0; font-size:16px; }
.cmp-modal header button{ border:none; background:#fff; font-size:18px; cursor:pointer; }
.cmp-modal .body{ padding:14px; }
.cmp-modal footer{ padding:12px 14px; border-top:1px solid var(--line); display:flex; gap:8px; justify-content:flex-end; background:#fff; position:sticky; bottom:0; }
.cmp-modal .btn{ height:36px; padding:6px 12px; border-radius:8px; border:1px solid var(--line); cursor:pointer; }
.cmp-modal .btn.brand{ background:var(--brand); color:#fff; border-color:var(--brand); }

/* Org modal parity + sparkline height */
.org-grid{ display:grid; grid-template-columns:1.1fr 1fr; gap:12px; }
.org-card{ border:1px solid var(--line); border-radius:12px; background:#fff; padding:12px; box-shadow:0 1px 0 rgba(2,6,23,.03) inset; }
.org-card h5{ margin:0 0 8px; font-size:13px; font-weight:800; }
.kv{ display:grid; grid-template-columns:1fr 1fr; gap:8px; }
.kv div{ display:flex; justify-content:space-between; border-bottom:1px dashed #eef2f7; padding:4px 0; }
.kv small{ color:#64748b }
.o-tags{ display:flex; flex-wrap:wrap; gap:6px; }
.o-tag{ background:#eef2ff; color:#3730a3; border:1px solid #e5e7eb; border-radius:999px; padding:2px 8px; font-size:12px; }
.o-signal{ display:grid; grid-template-columns:repeat(3,1fr); gap:8px; }
.o-pill{ background:#f8fafc; border:1px solid var(--line); border-radius:999px; padding:4px 10px; font-size:12px; display:flex; gap:6px; align-items:center; justify-content:center; }
.o-list{ list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:8px; }
.o-list li{ display:flex; justify-content:space-between; gap:10px; border-bottom:1px dashed #eef2f7; padding-bottom:6px; }
.spark{ display:block; width:100%; height:140px; }

/* Contact modal — header + stacked campaign cards */
.ct-head{ display:grid; grid-template-columns:repeat(5,minmax(120px,1fr)); gap:12px; margin-bottom:12px; }
.ct-head small{ color:#64748b; display:block; }
.ct-head b{ display:block; }

.camp-card{ border:1px solid var(--line); border-radius:12px; background:#fff; padding:12px; margin-bottom:10px; }
.camp-top{ display:flex; align-items:center; justify-content:space-between; gap:12px; }
.camp-meta{ display:flex; gap:14px; align-items:center; margin:8px 0; }
.camp-actions{ display:flex; gap:10px; align-items:center; }

.status-inline{ width:100%; max-width:220px; height:30px; border:1px solid var(--line); border-radius:999px; background:#fff; padding:4px 10px; }

/* Square +1 with round badge */
.plus1{ position:relative; width:36px; height:36px; border:1px solid var(--line); border-radius:10px;
  display:inline-flex; align-items:center; justify-content:center; font-weight:800; background:#fff; cursor:pointer; }
.plus1 .bcount{ position:absolute; top:-6px; right:-6px; width:18px; height:18px; border-radius:999px;
  background:#fee2e2; color:#991b1b; border:1px solid #fecaca; display:flex; align-items:center; justify-content:center; font-size:11px; }

/* Pager & summary */
.cmp-pager{ display:flex; gap:8px; justify-content:flex-end; margin:10px 0 0; }
.cmp-pager button{ border:1px solid var(--line); background:#fff; border-radius:10px; padding:6px 10px; cursor:pointer; font-weight:700; transition:transform .08s ease, background .12s ease, color .12s ease; }
.cmp-pager button:hover{ transform:translateY(-1px) }
.cmp-pager .act{ background:var(--brand); color:#fff; border-color:var(--brand) }
.cmp-sum{ display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin-top:12px; }
.cmp-sum .card{ border:1px solid var(--line); border-radius:12px; background:#fff; padding:12px; display:flex; align-items:center; gap:12px; }
.cmp-sum .card b{ font-size:24px }
.cmp-sum .card small{ color:#64748b }

/* Small screens */
@media (max-width: 900px){
  .org-grid{ grid-template-columns:1fr; }
  .ct-head{ grid-template-columns:1fr 1fr; }
}

/* Toast */
.cmp-toast{ position:fixed; right:24px; bottom:24px; background:#111827; color:#fff; padding:10px 14px; border-radius:10px; box-shadow:0 10px 30px rgba(0,0,0,.25); opacity:0; transform:translateY(8px); transition:.25s; z-index:1100; }
.cmp-toast.show{ opacity:1; transform:translateY(0); }

/* Kill ripples in this module */
#campaigns .btn .ripple, #campaigns .btn-mini .ripple { display:none !important; }
#campaigns .btn::after, #campaigns .btn-mini::after { content:none !important; animation:none !important; }
#campaigns .btn,#campaigns .btn-mini{ -webkit-tap-highlight-color:transparent; transform:none !important; }
#campaigns .btn:active,#campaigns .btn-mini:active{ transform:none !important; }

/* Compact AI list items (local to AI panel only) */
.ai-item{
  display:flex; align-items:center; justify-content:space-between;
  padding:8px 10px; border:1px solid var(--line); border-radius:10px; background:#fff;
  line-height:1.25;
}
.ai-item .mini{ color:#64748b; font-size:12px; }
.ai-item .btn{ height:28px; padding:0 10px; border:1px solid var(--line); background:#fff; border-radius:8px; cursor:pointer; }

/* Finite container for org sparkline */
.org-chart{ height:160px; }
.org-chart canvas{ width:100% !important; height:100% !important; display:block; }

/* Keep contact header cells from overflowing */
.ct-head > div{ min-width:0; }                       /* allow grid children to shrink */
.ct-head b, .ct-head a{ word-break:break-word; overflow-wrap:anywhere; }  /* wrap long email/phone */

/* --- Compact AI rows (force tight vertical rhythm) --- */
.ai-card .ai-item{
  display:flex; align-items:center; justify-content:space-between;
  padding-block:8px !important;   /* shrink vertical padding */
  padding-inline:10px !important; /* keep a little horizontal room */
  min-height:unset;                /* in case a theme sets one */
  line-height:1.25;
}

.ai-card .ai-item > *{ margin:0; }            /* kill stray margins */
.ai-card .ai-item .mini{ font-size:12px; line-height:1.2; }

/* Neutralize any global .btn sizing that inflates the row */
.ai-card .ai-item .btn{
  height:28px !important;
  line-height:26px;               /* keeps label centered without extra height */
  padding:0 10px !important;
  border-radius:8px;
}

/* Make AI rows truly one-line and compact */
.ai-card .ai-item{
  display:flex;
  align-items:center;
  justify-content:space-between;
  flex-wrap:nowrap;          /* don't wrap to a second line */
  padding:8px 10px;
  line-height:1.25;
}

/* The long name should be the only thing allowed to shrink/truncate */
.ai-card .ai-item > b{ flex:0 0 auto; }
.ai-card .ai-item > span:nth-of-type(2){
  min-width:0;               /* allow shrinking inside flex */
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}

/* Keep “score …” inline — override any global .mini rules */
.ai-card .ai-item .mini{
  display:inline !important;
  width:auto !important;
  margin:0 !important;
  text-align:left !important;
  white-space:nowrap;
  font-size:12px;
  line-height:1.2;
}

/* Buttons shouldn’t set the row height */
.ai-card .ai-item .btn{
  height:28px;
  line-height:26px;
  padding:0 10px;
  border-radius:8px;
}

/* === Bulletproof compact AI rows === */
.ai-card .ai-item{
  display:flex;
  align-items:center;
  gap:10px;
  padding:8px 10px;
  line-height:1.25;
  flex-wrap:nowrap;                  /* never wrap to a second line */
}

/* The long name flexes and truncates, everything else stays tight */
.ai-card .ai-item .main{
  flex:1 1 auto;
  min-width:0;                       /* allow shrinking */
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

/* Keep “score …” inline and on the same row, right before the buttons */
.ai-card .ai-item .mini{
  display:inline-block !important;   /* beat blocky global styles */
  width:auto !important;
  margin:0 !important;
  text-align:left !important;
  white-space:nowrap;
  font-size:12px;
  line-height:1.2;
}
.ai-card .ai-item .score{ margin-left:12px; }

/* Buttons shouldn’t inflate row height */
.ai-card .ai-item .btn{
  height:28px !important;
  line-height:26px;
  padding:0 10px !important;
  border-radius:8px;
}

/* === Compact, single-line AI rows (grid layout) === */
.ai-card .ai-item{
  display:grid;
  grid-template-columns: auto 1fr auto auto; /* rank | name | score | buttons */
  align-items:center;
  gap:12px;
  padding:8px 12px;
  line-height:1.25;
}

/* Long name truncates, never wraps */
.ai-card .ai-item .main{
  min-width:0;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

/* Keep “score …” inline and compact */
.ai-card .ai-item .mini{
  display:inline-block !important;
  margin:0 !important;
  white-space:nowrap;
  font-size:12px;
  line-height:1.2;
}

/* Buttons shouldn’t inflate height */
.ai-card .ai-item .btn{
  height:28px !important;
  line-height:26px;
  padding:0 10px !important;
  border-radius:8px;
}

/* Hide the old spacer span (from the original markup) */
.ai-card .ai-item span[style*="flex:1"]{ display:none !important; }

/* Use grid to lock rows to one line even with the old DOM order */
.ai-card .ai-item{
  display:grid;
  grid-auto-flow:column;
  grid-auto-columns:max-content;
  grid-template-columns:auto 1fr auto auto; /* rank | name | score | buttons */
  align-items:center;
  gap:12px;
  padding:8px 12px;
}

/* First non-mini span is the name: truncate it */
.ai-card .ai-item > span:not(.mini){
  min-width:0;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

/* Score + buttons compact */
.ai-card .ai-item .mini{
  display:inline-block !important;
  white-space:nowrap;
  font-size:12px;
  line-height:1.2;
}
.ai-card .ai-item .btn{
  height:28px !important;
  line-height:26px;
  padding:0 10px !important;
}

/* === FINAL compact fix for AI rows (beats theme rules) === */
.ai-card .ai-item{
  display:flex;
  align-items:center;
  gap:12px;
  padding:8px 12px;
  line-height:1.25;
  flex-wrap:nowrap;
}

/* Reset any upstream "block/width:100%" on row children */
.ai-card .ai-item > *{
  display:inline-flex !important;
  width:auto !important;
  max-width:none !important;
  margin:0 !important;
  flex:0 0 auto !important;     /* don't let anything claim a full line */
}

/* If you added class="main" in JS, this targets it; otherwise it will match the 2nd span (the name) */
.ai-card .ai-item .main,
.ai-card .ai-item > span:nth-of-type(1):not(.mini) ~ span:not(.mini):nth-of-type(1){
  /* the long name */
  display:inline-block !important;
  flex:1 1 auto !important;
  min-width:0 !important;
  white-space:nowrap;
  overflow:hidden;
  text-overflow:ellipsis;
}

/* Keep "score ..." inline */
.ai-card .ai-item .mini{
  display:inline-block !important;
  white-space:nowrap;
  font-size:12px;
  line-height:1.2;
}

/* Buttons should not set row height */
.ai-card .ai-item .btn{
  height:28px !important;
  line-height:26px;
  padding:0 10px !important;
  border-radius:8px;
}

/* === Bulletproof compact AI rows (wins over theme) === */
#campaigns #aiCard .ai-list{           /* container must not stretch children */
  display:flex !important;
  flex-direction:column !important;
  gap:6px !important;
  height:auto !important;
  align-content:flex-start !important; /* grid fallback if any */
  justify-content:flex-start !important;
}

#campaigns #aiCard .ai-list > .ai-item{
  /* kill any fixed height / min-height / flex-basis coming from a theme */
  flex:0 0 auto !important;
  height:auto !important;
  min-height:0 !important;
  padding:8px 12px !important;
  margin:0 !important;

  display:flex !important;
  align-items:center !important;
  gap:12px !important;

  border:1px solid var(--line) !important;
  border-radius:10px !important;
  background:#fff !important;
}

/* children shouldn’t introduce block margins or force new lines */
#campaigns #aiCard .ai-list > .ai-item > *{
  margin:0 !important;
  max-width:none !important;
  width:auto !important;
  flex:0 0 auto !important;     /* prevent vertical stretching via flex-basis */
  display:inline-flex !important;
}

/* the long name can truncate; everything else stays tight */
#campaigns #aiCard .ai-list > .ai-item .main{
  flex:1 1 auto !important;
  min-width:0 !important;
  white-space:nowrap !important;
  overflow:hidden !important;
  text-overflow:ellipsis !important;
}

/* tiny, inline score */
#campaigns #aiCard .ai-list > .ai-item .mini{
  display:inline-block !important;
  font-size:12px !important;
  line-height:1.2 !important;
  white-space:nowrap !important;
  margin:0 !important;
}

/* buttons mustn’t set row height */
#campaigns #aiCard .ai-list > .ai-item .btn{
  height:28px !important;
  line-height:26px !important;
  padding:0 10px !important;
  border-radius:8px !important;
}

/* nuke the old spacer if still present anywhere */
#campaigns #aiCard .ai-list > .ai-item span[style*="flex:1"]{
  display:none !important;
}

/* Compact AI rows — avoids global .mini conflicts */
#campaigns #aiCard .ai-list{ display:flex; flex-direction:column; gap:6px; }

#campaigns #aiCard .ai-item{
  display:flex; align-items:center; gap:12px;
  padding:8px 12px; border:1px solid var(--line); border-radius:10px; background:#fff;
  height:auto; min-height:0; flex:0 0 auto;
}

#campaigns #aiCard .ai-item > *{
  margin:0; width:auto; max-width:none; flex:0 0 auto;
}

/* long name truncates */
#campaigns #aiCard .ai-item .main{
  flex:1 1 auto; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis;
}

/* NEW classes (no global collisions) */
#campaigns #aiCard .ai-item .ai-sub{
  margin-left:8px; font-size:12px; line-height:1.2; opacity:.75;
  white-space:nowrap;
}
#campaigns #aiCard .ai-item .ai-score{
  font-size:12px; line-height:1.2; white-space:nowrap;
}

/* buttons shouldn’t set row height */
#campaigns #aiCard .ai-item .btn{
  height:28px; line-height:26px; padding:0 10px; border-radius:8px;
}

/* in case an old spacer survived somewhere */
#campaigns #aiCard .ai-item span[style*="flex:1"]{ display:none !important; }

/* --- Compact the rest of the AI panel (stop global .mini from expanding things) --- */
#campaigns #aiCard .ai-body .mini{
  display:inline !important;         /* don't become a tall block */
  margin:0 !important;
  white-space:normal !important;
  min-height:0 !important;
  line-height:1.25 !important;
}

/* Paragraph form of .mini (like “Top N is based on…”) */
#campaigns #aiCard .ai-body p.mini{
  display:block !important;          /* a normal, short paragraph */
  margin:6px 0 0 !important;
  min-height:0 !important;
}

/* Keep the controls tight */
#campaigns #aiCard .ai-controls{
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
}
#campaigns #aiCard .ai-controls input[type="range"]{
  margin:0;                          /* some themes add block margins */
}