/* logbook.css — what this receiver caught, one line per reception.

   A column layout rather than a table: the columns must stay put as lines arrive, because
   a reception in progress is rewritten in place and a width that reflows on every update
   would make the whole book twitch. Dense and monospaced like every other reading here. */
.logbook{display:flex; flex-direction:column; height:100%; min-height:0; margin-top:6px;}
/* Scope, search and count on one line above the columns. It keeps its line whatever the
   widget's height: a book dragged short must lose history, never the way to search it. */
.lbbar{display:flex; align-items:center; gap:8px; flex:0 0 auto; padding-bottom:4px;}
.lbq{flex:1 1 auto; min-width:0; background:var(--panel2); color:var(--ink);
  border:1px solid var(--line); border-radius:2px; padding:1px 5px;
  font-family:var(--mono); font-size:11px;}
.lbq:focus{outline:none; border-color:var(--teal);}
.lbn{color:var(--dim2); font-family:var(--mono); font-size:10px; white-space:nowrap;}
/* The time column holds a clock, and a date as well on a line from another day. It is sized
   for the pair, since the book is served back on connection and reaches across days -- a
   column that fits only today would push the date out on exactly the lines that need it. */
.lbhead, .lbrow{display:grid; gap:0 8px; font-family:var(--mono); font-size:11px;
  grid-template-columns:82px 46px 44px 1fr 64px 38px;}
.lbhead{color:var(--dim2); font-size:9px; letter-spacing:.08em; text-transform:uppercase;
  padding:0 2px 3px; border-bottom:1px solid var(--line); flex:0 0 auto;}
/* A column header is a control: it says so by behaving like one, and the column in force
   is marked rather than merely remembered. */
.lbhead span{cursor:pointer; user-select:none; white-space:nowrap;}
.lbhead span:hover{color:var(--ink);}
.lbhead span.act{color:var(--teal);}
/* The book takes the room and scrolls, newest at the top: an operator coming back looks at
   what just happened, not at what opened the session. */
.lblist{flex:1 1 auto; min-height:0; overflow-y:auto; overflow-x:hidden; padding-top:2px;}
.lbrow{padding:1px 2px; cursor:pointer; border-radius:2px; align-items:baseline;}
.lbrow:hover{background:var(--panel2);}
.lbt{color:var(--dim2);}
/* The date of a line that is not today's. Smaller and dimmer than the clock, so a book that
   spans a week still reads as a column of times with the day noted, and not the reverse. */
.lbday{font-style:normal; font-size:9px; color:var(--dim2); opacity:.75; margin-right:5px;}
.lbf{color:var(--teal); text-align:right;}
.lbpi{color:var(--amber);}
/* The mark on an unproven code: shown, never hidden -- an operator judges the candidate,
   and cannot judge what is not there. Dimmed, so the code reads first. */
.lbpi i{font-style:normal; color:var(--dim2);}
.lbps{color:var(--ink); overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.lbd{color:var(--dim); text-align:right;}
/* How many runs the reception took. A detail of texture, not a value: it says the RDS came
   in pieces, which is worth seeing and never worth reading first. */
.lbd i{font-style:normal; color:var(--dim2);}
.lbl{color:var(--dim); text-align:right;}
/* A reception that named nobody. It stays in the book -- something came through -- and it
   reads quieter than the ones that did. */
.lbrow.anon .lbpi{color:var(--dim2);}
.lbempty{color:var(--dim2); font-family:var(--mono); font-size:11px; padding:6px 2px;}
