/* console_discussion.css — the Discussion block's interior, declared ONCE for every ticket
   page (the conversation discussion ADR, 2026-09-08, Decision 6).

   One note stream per conversation — comments, replies, the ticket's ask, and every staff
   act on the record (close, reopen, block, unblock, rename) — rendered by ONE module,
   `workspaces/console_discussion.js`, ABOVE the transcript in the scroll flow. These rules
   lived in analysis_workspace.css while the block was Analysis's alone; they are unscoped
   here because the block is the same bytes on Support, AI Ralph and Analysis, and they are
   NOT in console_render.css because that sheet is the TRANSCRIPT's single origin, every
   rule rooted at `.msgs` and guarded as such (`_verify_transcript_single_origin.py`). The
   ask leads the block, then the stream, then the composer, then a rule and the transcript
   (ask-and-discussion-first, analysis console support-parity rebuild ADR, Decision 30).

   Linked from the shell document after panel.css, before any workspace sheet, for the same
   reason as the other two shared interiors: a workspace rule may win where a station
   legitimately differs (Analysis's gutter cards restyle the comment card's actions). */
.discussion { max-width:820px; margin:0 auto 26px; border-bottom:2px solid var(--border-strong); padding-bottom:18px; }
/* The thread's two HEADINGS — the block's label (Discussion) and the transcript's
   (Conversation, the line the block's markup ends with) — take ONE type rule, so the two
   cannot drift: centred, sentence case, bold, on the label rung, never an uppercase eyebrow
   (the conversation discussion ADR, dated note 2026-10-04; Connor: "middle aligned, Sentence
   case and a thicker font … 2px bigger"). Only where each sits is its own: the block's label
   above the stream, the transcript's on the transcript's measure, under the block's rule. */
.discussion .dlbl, .tlbl { font-family:var(--font-display); font-size:var(--text-label); font-weight:700; text-align:center; color:#000; }
.discussion .dlbl { margin-bottom:10px; }
.tlbl { max-width:820px; margin:0 auto 14px; }
.discussion textarea { width:100%; box-sizing:border-box; min-height:64px; resize:vertical; border:1px solid var(--border-strong); border-radius:var(--radius-control); padding:9px 11px; font:inherit; font-size:var(--text-label); color:var(--ink-900); background:var(--ink-0); margin-top:10px; }
.discussion textarea:focus { outline:none; border-color:var(--flex-blue-500); }
.discussion .drow { display:flex; gap:8px; align-items:center; margin-top:8px; }
.dnote { font-size:var(--text-label); color:var(--ink-400); }
/* Inline write-failure text at the site of the action, under the button row that failed —
   never a native alert(), which blocks the page AND its poll. */
.werr { color:#b91c1c; font-size:var(--text-label); margin:6px 0 0; }
/* The strip BELOW the thread head where a refused head act says so, on every ticket page
   (the write-failure line, `createWriteErrorLine` in workspaces/ticket_page_thread.js). A
   sibling of the head, never a child: `.thread .head` is a non-wrapping flex row whose height
   sets the divider line the zones align on, so a child would squeeze the title and break
   that line the moment an error appeared. Moved here from analysis_workspace.css 2026-10-05,
   when AI Ralph's head began to report too. */
.werr.wbanner { flex:0 0 auto; margin:0; padding:8px 22px; background:#fef2f2;
    border-bottom:1px solid var(--border); }
/* No horizontal rule on a stream item. The card's top hairline came from the Analysis
   comments block, when the stream was cards alone; with the quiet event lines in the same
   stream it drew only above a comment, so it read as a divider between the events and the
   next comment (Connor, 2026-09-09: "a gray line appears … preceding every comment"). The
   bold name line opens a card; a reply keeps its left rule. */
.cmt { position:relative; padding:12px 0; }
/* Replies NEST under the comment they answer, by an indent alone (the conversation discussion
   ADR, Amendment 2026-10-04, Decision 20, superseding the flat render of 2026-09-09: a thread
   sorts at its root's instant, so a flat reply to an older comment sat above a newer comment
   with nothing saying it was a reply — Connor, 2026-10-04: "that reply becomes a flat item …
   these replies should also be nested"). The container carries the indent; a reply's own
   card is an ordinary `.cmt`, so there is still no `.creply` rule. ⚠ Space is the whole
   signal: no rule beside the replies (design rule 7) and no "↳ Name" label. */
.creplies { margin-left:28px; }
/* The quiet text button of the block: a thread's fold control (Show N replies / Show
   fewer — a thread folds to its newest reply, same amendment, Decision 21) and a station's
   own control in a thread's lead. Sentence case and the meta rung: a label of a few words.
   Its top margin keeps it clear of the card above it (design rule 9). */
.cbtn { font-family:inherit; font-size:var(--text-meta); font-weight:600; padding:3px 10px; border:1px solid var(--border-strong); border-radius:var(--radius-control); background:var(--ink-0); color:var(--ink-900); cursor:pointer; white-space:nowrap; }
.cbtn:hover { border-color:var(--ink-900); }
.cfold { margin:2px 0 4px; }
/* The reply box: clear of the button row above it, and on the SAME left edge as the card it
   answers — never indented (design rule 9: distinct elements never touch; Connor, 2026-09-09,
   on the Analysis gutter card: "the reply input field should not be hugging the reply button
   … left-aligned with the reply button, not indented"). */
.creply-box { margin:10px 0 12px 0; }
.creply-box textarea { min-height:56px; margin-top:0; }
.cmt .by { font-size:var(--text-meta); font-weight:700; color:var(--ink-800); margin:0 0 4px; }
.cmt .by .when { color:var(--ink-400); font-weight:400; }
.cmt .body { white-space:pre-wrap; margin:0; font-size:var(--text-prose); color:var(--ink-800); }
.cedit { font-style:italic; font-weight:400; color:var(--ink-400); }
.cacts { display:flex; gap:6px; position:absolute; top:8px; right:0; opacity:0; transition:opacity .12s; }
.cmt:hover .cacts, .cmt:focus-within .cacts { opacity:1; }
.cmt:has(.cedit-box) .cacts { position:static; opacity:1; margin-top:8px; }
/* The block's outlined buttons read in sentence case, on the fold control's own type (a
   button's label is sentence case and one to three words, CONSOLE.md § 6.3). */
.cact { font-size:var(--text-meta); font-weight:600; padding:3px 10px; border:1px solid var(--border); border-radius:var(--radius-inset); background:var(--ink-0); color:var(--ink-600); cursor:pointer; }
.cact:hover { border-color:var(--ink-900); color:var(--ink-900); }
.cact.danger:hover { border-color:var(--danger); color:var(--danger); }
.cact.danger.arm { border-color:var(--danger); color:var(--danger); font-weight:700; opacity:1; }
.cmt .cacts:has(.arm) { opacity:1; }
.cedit-box textarea { min-height:56px; margin:2px 0 0; }
/* A quiet centered line — a `kind='event'` comment row (the system narrating a re-route or
   a ticket close) or a conversation event (close, reopen, block, unblock, rename), whose
   TEXT the renderer's kind→line table supplies (`lifecycleEventText`) — never an attributed
   card, and never the transcript's `.sys-line` wrapper. */
.devent { text-align:center; font-size:var(--text-meta); color:var(--ink-400); padding:8px 0; }
.anch-miss { font-size:var(--text-meta); font-style:italic; color:var(--ink-400); margin:4px 0 0; }
/* ── Mentions (console mentions and notifications ADR, 2026-10-04) ──────────────────────
   A mention in a comment is BOLD and nothing else: it is not a link, so it carries no
   underline and no colour of its own (design rule 10). */
.cmt .body .mention { font-weight:700; }
/* The picker: the list that opens when a person types "@" in any box that writes a comment
   (the picker is the Discussion module's, Decision 5). It is placed by the module directly
   under the box it serves, never over it (design rule 11), and it FLOATS over what is below,
   so it takes the capped lift (design rule 8). Each of its hosts is the containing block the
   module's `offsetTop` arithmetic assumes. */
.discussion, .creply-box, .cedit-box { position:relative; }
.mention-pick { position:absolute; z-index:20; min-width:200px; max-width:280px; box-sizing:border-box; padding:4px; display:flex; flex-direction:column; gap:2px; background:var(--ink-0); border:1px solid var(--border-strong); border-radius:var(--radius-control); box-shadow:0 2px 14px rgba(0,0,0,.13); }
.mpick { display:flex; align-items:baseline; gap:8px; width:100%; box-sizing:border-box; text-align:left; font:inherit; font-size:var(--text-label); color:var(--ink-900); padding:7px 10px; border:0; border-radius:var(--radius-inset); background:none; cursor:pointer; }
/* A member's address, drawn only beside a name another row shares (two people named Hannah):
   small and grey, a label to tell the rows apart, never the thing being read. It keeps its
   weight when its row is the chosen one, and gives way with an ellipsis before the name does. */
.mpick-email { flex:1; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:var(--text-meta); font-weight:400; color:var(--ink-400); }
/* The row Enter would pick is a fill and a weight — never a stripe on one edge (design rule 7). */
.mpick:hover, .mpick.on { background:var(--ink-50); }
.mpick.on { font-weight:600; }
.mpick-note { margin:0; padding:7px 10px; font-size:var(--text-prose); color:var(--ink-500); }
/* The comment a notification linked to wears a soft fill for a moment after the page lands
   on it (a notification opens its conversation at the comment, Decision 13). A fill on the
   whole card, set out from its text by its own padding; no rule on any edge. */
.cmt.landed { background:var(--ink-50); border-radius:var(--radius-control); margin:0 -10px; padding:12px 10px; }
.cmt.landed .cacts { right:10px; }
