/* table.css — the shared grid table plus the ticket/user column layouts.
 *
 * A platform list rather than a spreadsheet: separators are hairlines between
 * rows and nothing is drawn between columns, the header is a quiet label strip
 * instead of a filled bar, and a row answers the pointer by changing its fill
 * rather than lifting off the page. Rows do not float — a list whose lines rise
 * under the cursor reads as a stack of cards, and there are eighteen of them. */
.table{overflow:hidden}
.thead,.row{display:grid;gap:14px;align-items:center}
.thead{padding:12px 20px;border-bottom:1px solid var(--line-mid);background:var(--surface-alt);font-size:11px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--muted)}
.row{padding:15px 20px;border-bottom:1px solid var(--line-soft);cursor:pointer;font-size:13.5px;letter-spacing:-.006em;position:relative;background:var(--raised);animation:rowIn 320ms var(--ease-out) both}
.row:hover{background:var(--hover-soft)}
.row:active{transform:scale(.996)}
/* The card clips its own corners, so the last hairline would be drawn across
   the rounded bottom edge with nothing under it. */
.row:last-child{border-bottom:0}

/* Ticket rows are tinted by status. Only the queue: the roster has no status
   and keeps the plain surface. Each tint states its own hover, or the rule
   above would repaint the row grey under the cursor and lose the colour.
   The mobile card below 720px is the same element, so it inherits all of it. */
.tickets .row.s-open{background:var(--row-open)}
.tickets .row.s-open:hover{background:var(--row-open-hover)}
.tickets .row.s-prog{background:var(--row-prog)}
.tickets .row.s-prog:hover{background:var(--row-prog-hover)}
.tickets .row.s-res{background:var(--row-res)}
.tickets .row.s-res:hover{background:var(--row-res-hover)}
.tickets .row.s-clo{background:var(--row-clo)}
.tickets .row.s-clo:hover{background:var(--row-clo-hover)}
.tickets .thead,.tickets .row{grid-template-columns:68px minmax(0,2.6fr) minmax(0,1.2fr) 100px 116px 92px}
.tickets.agent .thead,.tickets.agent .row{grid-template-columns:68px minmax(0,2.4fr) minmax(0,1.1fr) minmax(0,1.1fr) 100px 116px 92px}
.users .thead,.users .row{grid-template-columns:minmax(0,1.9fr) minmax(0,1.2fr) 72px 72px 216px;padding-left:22px;padding-right:22px;cursor:default}
.users .row:active{transform:none}

.code{font-family:var(--font-mono);font-size:12px;color:var(--muted);letter-spacing:0}
.ell{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.subj{font-weight:550;letter-spacing:-.012em}
.subline{font-size:12px;color:var(--muted);margin-top:3px}
.cell-soft{font-size:13px;color:var(--ink-3)}
.num{text-align:right;font-variant-numeric:tabular-nums}
.updated{text-align:right;font-size:12.5px;color:var(--muted);white-space:nowrap}
.empty{padding:64px 20px;text-align:center;color:var(--muted);font-size:14px;line-height:1.5}
