/* App-specific components. The palette, type scale and chrome come from
   site.css, which this file must not redefine — two stylesheets competing over
   :root is how a design system quietly stops being one. */

.app{max-width:820px;margin:0 auto;padding:24px 26px 90px}
.app h1{font-size:clamp(1.8rem,4vw,2.5rem);margin-bottom:14px}

.panel{background:var(--surface);border:1px solid var(--rule);border-radius:5px;padding:22px}
label{display:block;font-family:ui-monospace,monospace;font-size:10.5px;letter-spacing:.13em;
  text-transform:uppercase;color:var(--muted);margin:16px 0 6px}
label:first-of-type{margin-top:0}
input[type=text]{width:100%;padding:11px 13px;border:1px solid var(--rule);border-radius:4px;
  background:var(--bg);color:var(--ink);font:inherit;font-size:15px}
input:focus-visible{outline:2px solid var(--signal);outline-offset:2px}
button{padding:10px 20px;border:1px solid var(--signal);background:var(--signal);color:var(--bg);
  border-radius:4px;font:inherit;font-size:14.5px;font-weight:550;cursor:pointer}
button.ghost{background:transparent;color:var(--signal)}
button:disabled{opacity:.45;cursor:not-allowed}
button:focus-visible{outline:2px solid var(--signal);outline-offset:3px}

/* A flex item will not shrink below its content unless min-width is cleared;
   without this the second field overflowed a 390px viewport and the send button
   wrapped onto its own line. */
.row{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}
.row input{flex:1 1 auto;min-width:0}
.row>div{min-width:0}

/* The composer is one row at every width: an input that shrinks, and two
   controls that do not. */
#composer{flex-wrap:nowrap;gap:8px}
#composer #text{flex:1 1 auto;min-width:0}
#composer .attach,#composer #send{flex:0 0 auto}

/* Below this the two invite fields cannot sit side by side without one of them
   leaving the screen, so they stack. */
@media(max-width:560px){
  .invite-row{display:block}
  #messages{height:min(56vh,460px)}
  .invite-row>div{width:100%}
  .invite-row #invite{width:100%;margin-top:12px}
}

.bar{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:14px;
  font-family:ui-monospace,monospace;font-size:12px;color:var(--muted)}
.bar b{color:var(--ink-2)}

#messages{background:var(--surface);border:1px solid var(--rule);border-radius:5px;
  height:min(50vh,430px);overflow-y:auto;padding:15px;display:flex;flex-direction:column;gap:9px}
.msg{max-width:82%;padding:9px 13px;border-radius:13px;background:var(--surface-2);
  align-self:flex-start;overflow-wrap:anywhere;font-size:15px}
.msg a{color:var(--signal);word-break:break-all}
.msg.mine{background:var(--signal-bg);align-self:flex-end}
.msg .who{display:block;font-family:ui-monospace,monospace;font-size:9.5px;letter-spacing:.11em;
  text-transform:uppercase;color:var(--muted);margin-bottom:3px}

#log{margin-top:16px;font-family:ui-monospace,monospace;font-size:11.5px;max-height:120px;overflow-y:auto}
.entry{padding:3px 0;color:var(--muted);border-bottom:1px solid var(--rule)}
.entry.ok{color:var(--signal)}
.entry.bad{color:var(--amber)}

.hint{font-size:14px;color:var(--ink-2);max-width:64ch}

/* conversation list beside the thread */
.split{display:grid;grid-template-columns:minmax(0,210px) minmax(0,1fr);gap:16px;align-items:start}
@media(max-width:700px){.split{grid-template-columns:1fr}}
.convs{display:flex;flex-direction:column;gap:6px}
.conv{display:block;width:100%;text-align:left;padding:11px 13px;border-radius:5px;cursor:pointer;
  background:var(--surface);border:1px solid var(--rule);color:var(--ink);font:inherit}
.conv:hover{border-color:var(--signal)}
.conv.on{background:var(--signal-bg);border-color:var(--signal)}
.conv b{display:block;font-size:14.5px;font-weight:600}
.conv span{display:block;font-family:ui-monospace,monospace;font-size:10.5px;color:var(--muted);margin-top:2px}
.attach{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;
  border-radius:4px;cursor:pointer;border:1px solid var(--rule-2);color:var(--signal);
  font-size:20px;line-height:1;white-space:nowrap;flex:0 0 auto}
.attach:hover{border-color:var(--signal)}
.msg .meta{display:block;font-family:ui-monospace,monospace;font-size:10px;color:var(--muted);margin-top:5px}

/* The ID card: the one thing a new user has to hand to somebody else, so it is
   large enough to read across a table and copyable in one tap. */
.idcard{display:flex;justify-content:space-between;align-items:center;gap:14px;flex-wrap:wrap;
  background:var(--signal-bg);border:1px solid var(--signal);border-radius:6px;
  padding:14px 16px;margin-bottom:14px}
.idlabel{display:block;font-family:ui-monospace,monospace;font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--signal);margin-bottom:5px}
#myid{font-family:ui-monospace,monospace;font-size:22px;font-weight:600;letter-spacing:.06em;color:var(--ink)}
.idbtns{display:flex;gap:8px;flex-wrap:wrap}
.idbtns button{padding:8px 14px;font-size:13px}
#account{font-family:ui-monospace,monospace;font-size:17px;letter-spacing:.06em}
