:root{
  /* Light theme. Accent blues are taken from the Simplify logo artwork. */
  --bg:#FFFFFF; --panel:#F6F8FB; --raised:#EFF3F8; --line:#DDE4ED;
  --text:#16202B; --muted:#57687A; --dim:#8394A5;
  --signal:#B0761A; --claim:#2E63AC; --live:#1E8E4F; --warn:#C0442F;
  --out:#DDEBFA;            /* outgoing message, logo blue at low strength */
  --accent-soft:#E9F1FB;    /* selected rows and open conversations */
  --accent-line:#BBD5F0;
  --on-accent:#FFFFFF;      /* text sitting on a filled accent */
  color-scheme:light;
}
*{box-sizing:border-box}
/* The hidden attribute must beat any author display rule, otherwise elements
   toggled with el.hidden stay on screen. */
[hidden]{display:none !important}
body{
  margin:0;background:var(--bg);color:var(--text);
  font-family:"IBM Plex Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased;
}
button{font:inherit;color:inherit;cursor:pointer;border:0;background:none}
input,textarea,select{font:inherit}
.mono{font-family:"IBM Plex Mono",ui-monospace,monospace}
:focus-visible{outline:2px solid var(--claim);outline-offset:2px}

/* login */
.centre{min-height:100vh;display:grid;place-items:center;padding:24px}
.card{width:100%;max-width:380px;background:var(--panel);border:1px solid var(--line);border-radius:6px;padding:32px}
.card h1{font-size:19px;font-weight:600;margin:0 0 4px}
.card .sub{color:var(--muted);margin:0 0 24px;font-size:13px}
.field{margin-bottom:14px}
.field label{display:block;font-size:12px;color:var(--muted);margin-bottom:5px}
.field input{width:100%;padding:9px 11px;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:4px}
.primary{width:100%;padding:10px;background:var(--claim);color:var(--on-accent);border-radius:4px;font-weight:600;margin-top:6px}
.primary:hover{filter:brightness(1.08)}
.err{color:var(--warn);font-size:12px;margin-top:12px;min-height:18px}

/* shell */
#app{display:grid;height:100vh;grid-template-columns:188px 1fr}
.rail{background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column}
.brand{padding:16px;border-bottom:1px solid var(--line)}
.brand b{display:block;font-size:13px;font-weight:600}
.brand span{font-size:11px;color:var(--dim)}
.wa-state{display:flex;align-items:center;gap:7px;padding:11px 16px;border-bottom:1px solid var(--line);font-size:12px;color:var(--muted)}
.dot{width:7px;height:7px;border-radius:50%;background:var(--dim);flex:none}
.dot.up{background:var(--live)} .dot.warn{background:var(--signal)} .dot.down{background:var(--warn)}
.nav{padding:8px 0;flex:1}
.nav button{display:flex;width:100%;align-items:center;justify-content:space-between;gap:8px;padding:8px 16px;color:var(--muted);font-size:13px;text-align:left}
.nav button:hover{color:var(--text);background:var(--raised)}
.nav button.sel{color:var(--claim);font-weight:600;box-shadow:inset 3px 0 0 var(--claim);background:var(--accent-soft)}
.pill{background:var(--signal);color:var(--on-accent);border-radius:9px;padding:0 6px;font-size:11px;font-weight:600;min-width:18px;text-align:center}
.whoami{border-top:1px solid var(--line);padding:12px 16px;font-size:12px;color:var(--muted)}
.whoami b{display:block;color:var(--text);font-weight:500}
.whoami button{color:var(--claim);font-size:12px;padding:0;margin-top:6px}

.view{display:none;min-width:0;overflow:hidden}
.view.on{display:grid}
#v-inbox{grid-template-columns:270px 1fr 216px}
#v-link,#v-team,#v-log{grid-template-columns:1fr;overflow-y:auto}
/* min-height:0 is load-bearing. A flex item defaults to min-height:auto, which
   refuses to shrink below its content, so a long thread makes .msgs grow past
   the viewport instead of scrolling and pushes the composer off screen. */
.col{min-width:0;min-height:0;display:flex;flex-direction:column;border-right:1px solid var(--line)}
.col:last-child{border-right:0}
.colhead{padding:12px 14px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:8px;flex:none}
.colhead h2{font-size:13px;font-weight:600;margin:0}
.colhead .sub{font-size:11px;color:var(--dim)}
.colhead button{font-size:12px;color:var(--claim)}
.scroll{overflow-y:auto;flex:1}

.chat{width:100%;text-align:left;padding:11px 14px;border-bottom:1px solid var(--line);display:grid;grid-template-columns:1fr auto;gap:3px 8px}
.chat:hover{background:var(--raised)}
.chat.sel{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--claim)}
.chat .nm{font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat .tm{font-size:11px;color:var(--dim);white-space:nowrap}
.chat .pv{grid-column:1/2;font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chat .rt{grid-column:2/3;display:flex;align-items:center;gap:5px}
.owner{font-size:10px;color:var(--claim);border:1px solid var(--claim);border-radius:3px;padding:0 4px}
.owner.me{background:var(--claim);color:var(--on-accent)}

.thead{padding:11px 16px;border-bottom:1px solid var(--line);flex:none}
.thead .row{display:flex;align-items:center;justify-content:space-between;gap:10px}
.thead h2{font-size:14px;font-weight:600;margin:0}
.thead .meta{font-size:11px;color:var(--dim);margin-top:2px}
.claimbtn{border:1px solid var(--claim);color:var(--claim);border-radius:4px;padding:5px 11px;font-size:12px;white-space:nowrap}
.claimbtn:hover{background:var(--claim);color:var(--on-accent)}
.claimbtn.held{border-color:var(--line);color:var(--muted)}
.claimbtn.held:hover{background:transparent;color:var(--text);border-color:var(--muted)}

.msgs{flex:1;min-height:0;overflow-y:auto;padding:20px 16px 16px;display:flex;flex-direction:column;gap:9px}
.msg{position:relative;max-width:min(560px,74%);padding:7px 11px;border-radius:7px;background:var(--raised);border:1px solid transparent}
.msg.out{align-self:flex-end;background:var(--out);border-color:var(--accent-line)}
.msg .by{font-size:11px;color:var(--claim);margin-bottom:2px;font-weight:500}
.msg .tx{white-space:pre-wrap;word-break:break-word}
.msg .tm{font-size:10px;color:var(--dim);margin-top:3px;text-align:right}
.msg .att{font-size:12px;color:var(--signal)}
.empty{margin:auto;color:var(--dim);font-size:13px;text-align:center;max-width:34ch}
.typing{align-self:flex-start;font-size:12px;color:var(--signal);padding:4px 2px}

.composer{border-top:1px solid var(--line);padding:11px 14px;flex:none}
.lockbar{background:#FDF6E7;border:1px solid #E8D6A8;border-radius:4px;padding:7px 10px;font-size:12px;color:var(--signal);margin-bottom:9px}
.cbox{display:flex;gap:9px;align-items:flex-end}
.cbox textarea{flex:1;resize:none;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:4px;padding:9px 11px;min-height:40px;max-height:140px}
.send{background:var(--claim);color:var(--on-accent);border-radius:4px;padding:10px 16px;font-weight:600}
.send[disabled]{opacity:.45;cursor:not-allowed}
.csub{font-size:11px;color:var(--dim);margin-top:7px}

.rblock{padding:13px 14px;border-bottom:1px solid var(--line)}
.rblock h3{font-size:11px;color:var(--dim);margin:0 0 9px;font-weight:500}
.person{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:12px}
.person .dot{width:6px;height:6px;background:var(--live)}
.person .where{color:var(--dim);font-size:11px;margin-left:auto}

.pad{padding:28px;max-width:760px;margin:0 auto;width:100%}
.pad h2{font-size:17px;margin:0 0 6px}
.pad p{color:var(--muted);margin:0 0 20px;max-width:64ch}
.qrwrap{background:#fff;padding:14px;border-radius:6px;width:236px;height:236px;display:grid;place-items:center}
.qrwrap img{width:208px;height:208px;image-rendering:pixelated}
.steps{margin:20px 0 0;padding:0;list-style:none;counter-reset:s}
.steps li{counter-increment:s;padding:7px 0 7px 30px;position:relative;color:var(--muted);font-size:13px}
.steps li::before{content:counter(s);position:absolute;left:0;top:7px;width:19px;height:19px;border:1px solid var(--line);border-radius:50%;display:grid;place-items:center;font-size:11px;color:var(--dim)}
.notice{border:1px solid var(--line);border-left:2px solid var(--warn);border-radius:4px;padding:12px 14px;margin-top:26px;font-size:13px;color:var(--muted)}
.notice b{color:var(--text);font-weight:600}
.danger{border:1px solid var(--warn);color:var(--warn);border-radius:4px;padding:7px 13px;font-size:12px;margin-top:20px}
.danger:hover{background:var(--warn);color:var(--on-accent)}

table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;font-size:11px;color:var(--dim);font-weight:500;padding:8px 12px;border-bottom:1px solid var(--line)}
td{padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:top}
.tag{font-size:11px;border:1px solid var(--line);border-radius:3px;padding:1px 6px;color:var(--muted)}
.tag.adm{border-color:var(--claim);color:var(--claim)}
.rowform{display:flex;gap:8px;flex-wrap:wrap;margin:18px 0 26px}
.rowform input,.rowform select{background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:4px;padding:8px 10px}
.rowform button{background:var(--claim);color:var(--on-accent);border-radius:4px;padding:8px 15px;font-weight:600}
.linkbtn{color:var(--claim);font-size:12px}
.linkbtn.warn{color:var(--warn)}

@media (max-width:900px){
  #app{grid-template-columns:1fr}
  .rail{flex-direction:row;align-items:center;overflow-x:auto}
  .brand,.wa-state,.whoami{border:0;flex:none}
  .nav{display:flex;padding:0;flex:none}
  .nav button{padding:8px 12px}
  #v-inbox{grid-template-columns:1fr}
  #v-inbox .col:not(.thread){display:none}
  #v-inbox.list .col:not(.thread){display:flex}
  #v-inbox.list .thread{display:none}
}

/* chat list filters and search */
.filters{display:flex;gap:4px;padding:8px 10px 6px;border-bottom:1px solid var(--line);flex:none}
.fbtn{font-size:12px;color:var(--muted);padding:3px 9px;border-radius:3px;border:1px solid transparent}
.fbtn:hover{color:var(--text);background:var(--raised)}
.fbtn.sel{color:var(--text);border-color:var(--line);background:var(--raised)}
.searchrow{padding:8px 10px;border-bottom:1px solid var(--line);flex:none}
.searchrow input{width:100%;background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:4px;padding:6px 9px;font-size:12px}
.theadbtns{display:flex;align-items:center;gap:12px}
.chat.muted .nm{color:var(--muted)}
.chat .grp{font-size:10px;color:var(--dim);border:1px solid var(--line);border-radius:3px;padding:0 4px}
.pill.quiet{background:transparent;color:var(--dim);border:1px solid var(--line);font-weight:400}

/* ---------- sign-in code step ---------- */
.codelead{color:var(--muted);font-size:13px;margin:0 0 16px}
.codelead b{color:var(--text)}
.codeinput{width:100%;padding:11px;background:var(--bg);color:var(--text);border:1px solid var(--line);
  border-radius:4px;font-size:22px;letter-spacing:6px;text-align:center}
.coderow{display:flex;justify-content:space-between;margin-top:12px}

/* ---------- notifications opt-in ---------- */
.notifybtn{margin:0 12px 10px;padding:7px 9px;border:1px solid var(--line);border-radius:4px;
  background:var(--raised);color:var(--muted);font-size:12px;text-align:left}
.notifybtn:hover{color:var(--text);border-color:var(--claim)}

/* ---------- group name / description ---------- */
.groupdesc{padding:8px 0 0;color:var(--muted);font-size:13px;white-space:pre-wrap;
  max-height:96px;overflow:auto}
.groupdesc .nodesc{color:var(--dim);font-style:italic}
.groupedit{padding:12px 0 4px;border-top:1px solid var(--line);margin-top:10px}
.groupedit label{display:block;font-size:12px;color:var(--muted);margin:8px 0 4px}
.groupedit input,.groupedit textarea{width:100%;padding:8px 10px;background:var(--bg);color:var(--text);
  border:1px solid var(--line);border-radius:4px;resize:vertical}
.gbtns{display:flex;align-items:center;gap:14px;margin-top:10px}
.primary.sm{width:auto;padding:7px 14px;margin:0;font-size:13px}

/* ---------- attachments ---------- */
.attach{width:34px;height:34px;flex:none;border:1px solid var(--line);border-radius:4px;
  background:var(--raised);color:var(--muted);font-size:18px;line-height:1}
.attach:hover:not([disabled]){color:var(--text);border-color:var(--claim)}
.attach[disabled]{opacity:.4;cursor:not-allowed}
.attachbar{display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:7px 10px;margin-bottom:8px;background:var(--raised);border:1px solid var(--line);
  border-radius:4px;font-size:12px;color:var(--muted)}
.media{display:block;max-width:280px;max-height:280px;border-radius:4px;margin:2px 0 6px}
.media img{display:block;max-width:280px;max-height:280px;border-radius:4px}
.media.audio{width:260px;height:36px;max-height:none}
.doc{display:flex;align-items:center;gap:9px;padding:9px 11px;margin:2px 0 6px;
  background:var(--raised);border:1px solid var(--line);border-radius:4px;
  text-decoration:none;color:var(--text);max-width:300px}
.doc:hover{border-color:var(--claim)}
.docicon{font-size:10px;text-transform:uppercase;letter-spacing:.5px;color:var(--dim);
  border:1px solid var(--line);border-radius:3px;padding:2px 5px;flex:none}
.docname{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px}
.docsize{color:var(--dim);font-size:11px;flex:none}

/* ---------- internal team chat ---------- */
#v-chat.on{display:block;overflow:hidden}
.internal{display:flex;flex-direction:column;height:100vh;max-width:860px;margin:0 auto;
  border-left:1px solid var(--line);border-right:1px solid var(--line)}
.ihead{padding:18px 22px 14px;border-bottom:1px solid var(--line)}
.ihead h2{font-size:16px;font-weight:600;margin:0 0 4px}
.ihead p{margin:0;color:var(--muted);font-size:13px}
.internal .msgs{flex:1}
.internal .composer{border-top:1px solid var(--line)}

/* ---------- smtp status ---------- */
.smtpbar{padding:11px 13px;border-radius:4px;font-size:13px;margin-bottom:18px;
  border:1px solid var(--line);background:var(--raised);color:var(--muted)}
.smtpbar.warn{border-color:var(--signal);color:var(--text)}
.smtpbar.ok{border-color:var(--line)}
.smtpbar b{color:var(--text)}

/* ---------- loading earlier history ---------- */
.loadmore{align-self:center;flex:none;margin-bottom:10px;padding:7px 14px;border:1px solid var(--line);
  border-radius:4px;background:var(--raised);color:var(--claim);font-size:12px}
.loadmore:hover:not([disabled]){border-color:var(--claim)}
.loadmore[disabled]{color:var(--dim);cursor:default}
.threadstart{align-self:center;flex:none;margin-bottom:12px;padding:0 20px;color:var(--dim);
  font-size:11px;text-align:center;max-width:420px}

/* ---------- attachment that could not be stored ---------- */
.att.missing{border:1px dashed var(--line);border-radius:4px;padding:8px 10px;margin:2px 0 6px;max-width:320px}
.att.missing .attline{color:var(--signal);font-size:12px;font-weight:500}
.att.missing .attnote{color:var(--dim);font-size:11px;margin-top:3px;line-height:1.45}
.refetch{margin-top:7px;padding:4px 9px;border:1px solid var(--line);border-radius:3px;
  background:var(--raised);color:var(--claim);font-size:11px}
.refetch:hover:not([disabled]){border-color:var(--claim)}
.refetch[disabled]{color:var(--dim);cursor:default}

/* ==========================================================================
   Simplify Networks branding
   Blues sampled from the logo artwork itself.
   ========================================================================== */
:root{
  --brand-deep:#2E63AC; --brand-mid:#4FA3D7; --brand-light:#88D3F1;
}

/* ---------- sign-in ---------- */
body.signin{min-height:100vh}
.split{display:grid;grid-template-columns:1.05fr .95fr;min-height:100vh}

.brandside{
  position:relative;overflow:hidden;padding:56px 56px 40px;
  display:flex;flex-direction:column;justify-content:center;
  background:
    radial-gradient(120% 90% at 10% 6%, rgba(79,163,215,.22), transparent 60%),
    radial-gradient(95% 75% at 92% 98%, rgba(46,99,172,.16), transparent 62%),
    #F2F7FC;
  border-right:1px solid var(--line);
}
/* a large, very faint swoosh sitting behind the copy */
.brandside::after{
  content:"";position:absolute;right:-90px;top:50%;transform:translateY(-50%);
  width:520px;height:520px;background:url("/img/mark.png") no-repeat center/contain;
  opacity:.08;pointer-events:none;
}
.brandside > *{position:relative;z-index:1}
.blogo{width:290px;max-width:70%;height:auto;margin-bottom:34px}
.brandside h1{font-size:27px;font-weight:600;margin:0 0 14px;letter-spacing:-.2px}
.lead{color:var(--muted);font-size:14px;line-height:1.65;margin:0 0 26px;max-width:46ch}
.points{list-style:none;margin:0 0 40px;padding:0}
.points li{position:relative;padding:6px 0 6px 24px;color:var(--muted);font-size:13px}
.points li::before{
  content:"";position:absolute;left:2px;top:15px;width:5px;height:5px;border-radius:50%;
  background:var(--brand-mid);box-shadow:0 0 0 3px rgba(79,163,215,.14);
}
.brandfoot{margin-top:auto;color:var(--muted);font-size:11.5px;line-height:1.8}

.formside{display:grid;place-items:center;padding:40px 32px;background:var(--bg)}
.formside .smallprint{margin:18px auto 0;max-width:376px;color:var(--dim);font-size:11px;
  line-height:1.7;text-align:center;display:none}
.formbox{
  width:100%;max-width:376px;background:var(--panel);border:1px solid var(--line);
  border-radius:8px;padding:34px 32px 30px;
  box-shadow:0 1px 2px rgba(22,32,43,.04), 0 14px 34px rgba(22,32,43,.07);
}
.mlogo{display:none;width:210px;height:auto;margin:0 auto 28px}
.formbox h2{font-size:20px;font-weight:600;margin:0 0 5px}
.formbox .sub{color:var(--muted);font-size:13px;margin:0 0 26px}
.formbox .primary{background:linear-gradient(135deg,var(--brand-mid),var(--brand-deep));color:#fff}
.formbox .primary:hover{filter:brightness(1.06)}
.formbox .primary:hover{filter:brightness(1.1)}

@media (max-width:880px){
  .split{grid-template-columns:1fr}
  .brandside{display:none}
  .mlogo{display:block}
  .formside{min-height:100vh;align-content:center}
  .formside .smallprint{display:block}
}

/* ---------- logo in the rail ---------- */
.brand{display:flex;flex-direction:column;gap:9px;padding:18px 16px 15px}
.brand .raillogo{width:146px;height:auto;align-self:flex-start}
.brand .railnum{font-size:11px;color:var(--dim);font-family:"IBM Plex Mono",ui-monospace,monospace}

/* ---------- branded empty states ---------- */
.emptystate{margin:auto;display:flex;flex-direction:column;align-items:center;text-align:center;
  padding:32px 24px;max-width:40ch}
.emptystate img{width:58px;height:auto;opacity:.26;margin-bottom:18px}
.emptystate b{display:block;font-size:14px;font-weight:600;color:var(--text);margin-bottom:6px}
.emptystate span{color:var(--dim);font-size:12.5px;line-height:1.6}

/* ---------- right rail footer mark ---------- */
.railmark{margin-top:auto;padding:16px 14px;border-top:1px solid var(--line);
  display:flex;align-items:center;gap:9px;opacity:.5}
.railmark img{width:18px;height:auto}
.railmark span{font-size:10.5px;color:var(--dim);line-height:1.4}

/* ---------- @ mentions ---------- */
.mention{color:var(--claim);background:var(--accent-soft);border-radius:3px;padding:0 3px;font-weight:500}
.msg.out .mention{background:rgba(46,99,172,.10)}
.mentionmenu{
  margin-bottom:8px;border:1px solid var(--line);border-radius:6px;background:var(--bg);
  box-shadow:0 8px 22px rgba(22,32,43,.12);max-height:330px;overflow-y:auto;
}
.mentionmenu button{display:flex;width:100%;align-items:center;gap:9px;padding:8px 11px;text-align:left;
  border-bottom:1px solid var(--line)}
.mentionmenu button:last-child{border-bottom:0}
.mentionmenu button:hover,.mentionmenu button.on{background:var(--accent-soft)}
.mentionmenu .mname{font-size:13px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:none;max-width:60%}
.mentionmenu .mnum{font-size:11px;color:var(--dim);font-family:"IBM Plex Mono",ui-monospace,monospace}
.mentionmenu .mhead{position:sticky;top:0;background:var(--panel);border-bottom:1px solid var(--line);
  padding:6px 11px;font-size:11px;color:var(--dim);z-index:1}
.mentionmenu .madm{margin-left:auto;font-size:10px;color:var(--claim);border:1px solid var(--accent-line);
  border-radius:3px;padding:0 4px}

/* ---------- reactions ---------- */
.reacts{display:flex;flex-wrap:wrap;gap:4px;margin-top:5px}
.react{display:inline-flex;align-items:center;gap:3px;font-size:12px;line-height:1;
  padding:3px 6px;border:1px solid var(--line);border-radius:11px;background:var(--bg);color:var(--muted)}
.react.mine{border-color:var(--claim);background:var(--accent-soft);color:var(--claim)}
/* Always present so people know reactions exist, and unmistakable on hover. */
.reactbtn{position:absolute;top:-9px;right:8px;display:inline-flex;align-items:center;gap:4px;
  font-size:12px;line-height:1;padding:3px 8px;color:var(--muted);background:var(--bg);
  border:1px solid var(--line);border-radius:12px;opacity:.85;transition:all .12s;
  box-shadow:0 1px 3px rgba(22,32,43,.08)}
.reactbtn span{display:none;font-size:11px;font-weight:500}
.msg:hover .reactbtn{opacity:1;border-color:var(--claim);color:var(--claim)}
.msg:hover .reactbtn span{display:inline}
.reactbtn:hover{background:var(--accent-soft)}
.reactpick{position:absolute;top:-8px;right:0;transform:translateY(-100%);z-index:5;
  display:flex;gap:2px;padding:5px;background:var(--bg);border:1px solid var(--line);
  border-radius:20px;box-shadow:0 8px 22px rgba(22,32,43,.14)}
.reactpick button{font-size:16px;line-height:1;padding:4px 5px;border-radius:50%}
.reactpick button:hover,.reactpick button.on{background:var(--accent-soft)}
.reactpick .clear{font-size:12px;color:var(--dim)}
.reactpick.below{top:auto;bottom:-8px;transform:translateY(100%)}

/* ---------- telling senders apart ---------- */
/* Incoming messages carry a per-sender colour on the name and a matching edge,
   so a group with several people in it is readable without reading names. */
.msg:not(.out){border-left:3px solid var(--sender,var(--line))}
.msg:not(.out) .by{color:var(--sender,var(--claim))}
/* Ours sit right, in the brand blue, and say so. */
.msg.out{border-left:0;border-right:3px solid var(--claim)}
.msg.out .by{color:var(--claim)}

/* ---------- delivery ticks ---------- */
.msg .tm{display:flex;align-items:center;justify-content:flex-end;gap:5px}
.ticks{font-size:11px;line-height:1;padding:1px 4px;border-radius:3px;color:var(--dim);letter-spacing:-1px}
.ticks:hover{background:var(--bg);color:var(--claim)}
.ticks.read{color:var(--claim);font-weight:600}

/* ---------- message info panel ---------- */
.infopanel{position:absolute;right:18px;top:96px;z-index:20;width:290px;max-height:60vh;overflow-y:auto;
  background:var(--bg);border:1px solid var(--line);border-radius:8px;padding:14px 15px;
  box-shadow:0 14px 36px rgba(22,32,43,.16)}
.infohead{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:10px}
.infohead b{font-size:13px}
.infohead span{font-size:11px;color:var(--claim);font-weight:600}
.inforow{display:flex;justify-content:space-between;gap:10px;font-size:12px;color:var(--muted);padding:3px 0}
.inforow b{color:var(--text);font-weight:500}
.infoblock{margin-top:12px;border-top:1px solid var(--line);padding-top:10px}
.infoblock h4{margin:0 0 6px;font-size:11px;color:var(--dim);font-weight:600;text-transform:uppercase;letter-spacing:.4px}
.infoblock ul{margin:0;padding:0;list-style:none}
.infoblock li{display:flex;justify-content:space-between;gap:10px;font-size:12px;padding:3px 0}
.infoblock li span{color:var(--dim);font-size:11px;white-space:nowrap}
.infonone{margin:0;font-size:12px;color:var(--dim)}
.infonote{margin:10px 0 0;font-size:10.5px;color:var(--dim);line-height:1.5}
.infoload{font-size:12px;color:var(--muted)}
.thread{position:relative}

/* --- ticket links ------------------------------------------------------- */
.linkrow{display:grid;grid-template-columns:1fr auto;align-items:baseline;gap:2px 10px;
  padding:7px 0;font-size:12px;border-bottom:1px solid var(--line)}
.linkrow:last-of-type{border-bottom:0}
.linkrow a{color:var(--claim);font-weight:500;text-decoration:none;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;min-width:0}
.linkrow a:hover{text-decoration:underline}
.linkrow .linkmeta{grid-column:1/-1;color:var(--dim);font-size:11px}
.linkrow .linkacts{display:flex;gap:8px}
.linkrow .linkacts button{color:var(--dim);font-size:11px}
.linkrow .linkacts button:hover{color:var(--claim)}
.linkform{display:flex;flex-direction:column;gap:6px;margin-top:9px}
.linkform input{width:100%;padding:7px 9px;font-size:12px;border:1px solid var(--line);
  border-radius:4px;background:var(--bg);color:var(--text)}
.linkform input:focus{outline:none;border-color:var(--claim)}
.linkbtns{display:flex;gap:7px}
.linkbtns button{font-size:12px;padding:6px 11px;border-radius:4px;border:1px solid var(--line);
  background:var(--raised);color:var(--text)}
.linkbtns button.primary{background:var(--claim);border-color:var(--claim);color:var(--on-accent)}
.linkerr{color:var(--warn);font-size:11px;margin:0}
.addlink{margin-top:9px;font-size:12px;color:var(--claim);text-align:left}
.addlink:hover{text-decoration:underline}

/* --- per-message info button -------------------------------------------- */
.infobtn{font-size:10px;color:var(--dim);border:1px solid var(--line);border-radius:3px;
  padding:0 5px;margin-left:7px;line-height:15px;background:var(--bg)}
.infobtn:hover{color:var(--claim);border-color:var(--claim)}
.msg.out .infobtn{background:transparent}
.mention.unknown{color:var(--dim);background:var(--raised);font-weight:400;
  border-bottom:1px dotted var(--dim);cursor:help}

/* --- team and backup notices -------------------------------------------- */
.dupwarn{font-size:12px;color:var(--text);background:var(--accent-soft);
  border:1px solid var(--line);border-left:3px solid var(--signal);
  padding:9px 12px;border-radius:4px;margin:0 0 14px}
.backupbar{display:flex;align-items:center;gap:14px;padding:11px 13px;border-radius:4px;
  font-size:13px;margin-bottom:18px;border:1px solid var(--line);background:var(--panel)}
.backupbar div{display:flex;flex-direction:column;gap:2px}
.backupbar span{color:var(--muted);font-size:12px}
.backupbar button{margin-left:auto;font-size:12px;padding:6px 12px;border-radius:4px;
  border:1px solid var(--claim);background:var(--claim);color:var(--on-accent)}
.backupbar button:disabled{opacity:.6}
