/* revup — app layer on the Ownware UI kit (assets/ui/ownware-ui.css). Accent + app-specific rules only; generic rules come from the kit. */
:root{--accent:#7c3aed;--accent-dark:var(--accent);--accent-soft:#f1e9fe;--on-accent:#ffffff;--accent-ink:var(--on-accent)}
html[data-theme="dark"]{--accent:#a78bfa;--accent-dark:#c4b5fd;--accent-soft:#2a1f45;--on-accent:#0b0d10;--accent-ink:var(--on-accent)}
*{box-sizing:border-box}
.pill.pending   {background:var(--warnbg);color:var(--warn)}
.pill.sent      {background:var(--infobg);color:var(--info)}
.pill.demo      {background:var(--accent-soft);color:var(--accent)}
.pill.failed    {background:var(--badbg);color:var(--bad)}
.pill.rated     {background:var(--okbg);color:var(--ok)}
.pill.gated     {background:var(--badbg);color:var(--bad)}
.pill.public    {background:var(--okbg);color:var(--ok)}
.pill.handled   {background:var(--chip);color:var(--sub)}
.pill.open      {background:var(--warnbg);color:var(--warn)}
.pill.email     {background:var(--infobg);color:var(--info)}
.pill.sms       {background:var(--accent-soft);color:var(--accent)}
.pill.off       {background:var(--chip);color:var(--sub)}
.tag{font-family:var(--mono);font-size:.82rem;color:var(--sub)}
.due-late{color:var(--bad);font-weight:700}
.meta-list{list-style:none;margin:0;padding:0}
.meta-list li{display:flex;justify-content:space-between;gap:12px;padding:7px 0;border-bottom:1px solid var(--line);font-size:.92rem}
.meta-list li:last-child{border-bottom:none}
.meta-list .k{color:var(--sub)}
.stars{font-size:1.05rem;letter-spacing:2px;color:var(--warn);white-space:nowrap}
.stars .dim{color:var(--line)}
.dist{display:flex;flex-direction:column;gap:6px}
.dist .drow{display:grid;grid-template-columns:38px minmax(0,1fr) 34px;gap:10px;align-items:center;font-size:.85rem}
.dist .dbar{height:10px;border-radius:6px;background:var(--accent-soft);overflow:hidden}
.dist .dbar i{display:block;height:100%;background:var(--accent);border-radius:6px}


/* ── the send queue's live progress (the hero) ───────────────────────────── */
.sendbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.sendbar .progress{flex:1;min-width:180px;height:10px}
.sendbar .n{font-variant-numeric:tabular-nums;font-weight:700;font-size:.9rem}
.sendlog{list-style:none;margin:10px 0 0;padding:0;max-height:190px;overflow:auto;font-size:.86rem}
.sendlog li{display:flex;gap:10px;align-items:center;padding:5px 0;border-bottom:1px solid var(--line2)}
.sendlog li:last-child{border-bottom:none}
.sendlog .who{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ── the rating gate (public) ─────────────────────────────────────────────── */
.starpick{display:flex;flex-direction:row-reverse;justify-content:center;gap:8px;margin:18px 0 6px}
.starpick input{position:absolute;opacity:0;width:0;height:0}
.starpick label{font-size:2.6rem;line-height:1;color:var(--line);cursor:pointer;transition:color .1s;display:inline;margin:0}
.starpick label:hover,.starpick label:hover ~ label,.starpick input:checked ~ label{color:var(--warn)}
.starpick input:focus-visible + label{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}

/* [hidden] must win over the kit's .alert{display:flex} */
.alert[hidden]{display:none}

@media(max-width:700px){.starpick label{font-size:2.2rem}}

/* Plain tables (data-plain) never get the kit JS's .scroll wrapper, but they DO keep its 640px
   phone min-width — so on a phone they were clipped by .tbl's overflow:hidden rather than
   scrolling. Let the card scroll instead (found 2026-08-20 on a 390px console). */
@media(max-width:700px){.tbl{overflow-x:auto}}

/* audit-2: feedback rows shrink instead of clipping */
.meta-list li{min-width:0;flex-wrap:wrap}
.meta-list li>span:first-child{min-width:0;flex:1 1 auto}

/* The sidebar brand is a BLOCK with text-overflow:ellipsis, but its text sits in an inline-block
   span — an atomic box the ellipsis can only drop whole, so a long org name rendered as just "…".
   Making the span ordinary inline text lets the block truncate it properly. */
.side .brand > span:not(.dot){display:inline}
