@import './ann-chat-run.css';
@import './ann-borg-look.css';
/* The assistant's panel (Ann's panel), moved whole out of house-shell.css on its planned seam (docs/SEAMS.md,
   September 27). It loads right after house-shell.css, and no selector here is also written there, so the move
   changes no rule's outcome. */
/* Ann uses one 16px content inset and a 12px row gap, including continuity
   labels, setup messages and Retry. Framed controls keep their own inner pad.
   Mark, October 30: open up the padding and remove the suggestion pills. */
.house-ann{--ann-pad:calc(var(--s3) * 2);--ann-gap:var(--s5);
  flex:1;min-height:0;margin:0 var(--s3) var(--s4);border:var(--bd) solid var(--edge);border-radius:var(--r-14);
  display:flex;flex-direction:column;overflow:hidden;}
.house-ann-head{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s3);padding:var(--ann-pad);}
.house-ann-face{width:36px;height:36px;border-radius:var(--r-round);object-fit:cover;flex:none;background:var(--sel);}
/* HER FACE IS THE DOOR TO HER CARD (Mark, 2026-08-31), so it wears the
   affordance the gear used to: a ring on hover, and a real focus ring for the
   keyboard. The button is only a frame around the portrait — no padding, no
   background — because what is pressed IS the picture, not a control with a
   picture in it. */
.house-ann-facebtn{flex:none;display:block;padding:0;border:0;background:none;
  border-radius:var(--r-round);cursor:pointer;line-height:0;}
.house-ann-facebtn .house-ann-face{transition:box-shadow .18s ease,opacity .18s ease;}
.house-ann-facebtn:hover .house-ann-face{box-shadow:0 0 0 2px var(--accent);opacity:.9;}
.house-ann-facebtn:focus:not(:focus-visible){outline:none;}
.house-ann-facebtn:focus-visible .house-ann-face{box-shadow:0 0 0 2px var(--accent);}
.house-ann-init{display:grid;place-items:center;font-weight:var(--w-semi);color:var(--muted);}
.house-ann-who{min-width:0;flex:1 1 7rem;overflow-wrap:anywhere;}
.house-ann-head-end{display:flex;align-items:center;justify-content:flex-end;gap:var(--s2);margin-left:auto;min-width:0;max-width:100%;}
.house-ann-head-end:has(.ann-pending){flex:1 1 12rem;}
.house-ann-fresh{flex:none;min-width:44px;min-height:32px;}
.house-ann-speech{justify-content:flex-end;flex-wrap:wrap;}
.house-ann-speech .house-ann-btn{flex:none;width:32px;height:32px;}
.house-ann-speech .house-ann-live,.house-ann-speech .house-ann-clear{min-height:32px;}
.house-ann-speech .house-ann-live-state{min-width:0;overflow-wrap:anywhere;}
.house-ann-name{font-size:var(--t-body);font-weight:var(--w-semi);}
.house-ann-role{font-size:var(--t-label);color:var(--muted);}
.house-ann-gear{margin-left:auto;flex:none;}
.house-ann-log{flex:1;min-height:0;overflow:auto;padding:0 var(--ann-pad) var(--ann-pad);
  display:flex;flex-direction:column;gap:var(--ann-gap);}
/* HER ANSWER RUNS ON THE PANEL (Mark, October 30, 2026): plain flowing text in the theme's text colour, with no
   border, fill, shadow or rounded box in any theme or look. Cards inside it keep their own frame.
   chat-plain-answers-check fails if a rule boxes it again. */
.house-ann-her{color:var(--text);font-size:var(--t-small);line-height:1.55;overflow-wrap:anywhere;}
/* Her paragraphs breathe (2026-08-25, "SHE NEEDS TO NOT TALK IN BLOCKS"):
   the answer draws one div per paragraph now, and this is the air between
   them. Direct children only — the facts fold inside keeps its own layout. */
.house-ann-her>div+div{margin-top:.55em;}
.house-ann-her b{color:var(--accent);font-weight:var(--w-semi);}
/* ---------- WHAT MARKDOWN LOOKS LIKE IN A 200px PANEL ----------
   Her answers go through platform-ui markdown.mjs, so an answer holds
   headings, lists, quotes and code.
   Everything here is sized to the thread rather than to the page: this is a
   side panel at --t-small, so a subhead is bold body text one step up and
   nothing in it is ever page-title sized. The first and last thing in an
   answer lose their outer margin so it starts and ends flush. */
.house-ann-her>:first-child{margin-top:0;}
.house-ann-her>:last-child{margin-bottom:0;}
.house-ann-her p{margin:0 0 .55em;}
.house-ann-her h3,.house-ann-her h4{
  margin:.9em 0 .35em;font-size:var(--t-small);font-weight:var(--w-semi);
  color:var(--text);letter-spacing:0;line-height:1.35;}
.house-ann-her h4{color:var(--ink2);}
.house-ann-her ul,.house-ann-her ol{margin:0 0 .55em;padding-left:1.35em;}
.house-ann-her li{margin:0 0 .2em;}
.house-ann-her li>ul,.house-ann-her li>ol{margin:.2em 0 0;}
.house-ann-her strong{color:var(--text);font-weight:var(--w-semi);}
.house-ann-her blockquote{
  margin:0 0 .55em;padding:0 0 0 .7em;
  border-left:2px solid var(--edge);color:var(--muted);}
/* A LINK SHE WROTE LOOKS LIKE A LINK, so nobody presses one by accident and
   nobody misses one that matters. */
.house-ann-her a{color:var(--accent);text-decoration:underline;}
/* CODE IS THE ONE PLACE MONO TYPE BELONGS in this panel: it is content, not
   a label on an instrument, and the spacing is what makes it readable. */
.house-ann-her code{
  padding:1px 3px;border-radius:var(--r-sm);background:var(--inset);
  font-family:var(--font-mono);font-size:.92em;}
.house-ann-her pre{
  margin:0 0 .55em;padding:var(--s3) var(--s4);overflow-x:auto;
  border:var(--bd) solid var(--edge);border-radius:var(--r-md);background:var(--inset);}
.house-ann-her pre code{padding:0;background:none;line-height:var(--lh-body);}
/* SOMEBODY ELSE'S LINE IN HER THREAD: a crew seat, or a Council expert. It
   wears a face and a name where hers wears neither, because the moment a
   third voice is in the panel a reader needs telling whose sentence it is.
   The head is not a paragraph, so it opts out of the paragraph air above. */
.house-ann-seat-head{display:flex;align-items:center;gap:6px;margin-bottom:4px;}
.house-ann-her>.house-ann-seat-head+div{margin-top:0;}
.house-ann-seat-face{width:20px;height:20px;flex:none;border-radius:var(--r-round);object-fit:cover;
  background:var(--sel);font-size:var(--t-label);}
.house-ann-seat-name{font-family:inherit;font-size:var(--t-label);letter-spacing:var(--ls-label);
  color:var(--accent);text-transform:uppercase;}
/* ---------- THE DEMO'S TWO PRESSES AND ITS COUNT ----------
   Mark's ruling, 2026-09-02: the conversation is on the right and only there,
   so the way past a teach step stands under the line that was just said. Back
   and Skip wear .house-ann-dig, the house chip the Next chip already wears,
   and this only lays the pair out in a row rather than stacked.

   THE COUNT IS READ, NOT PRESSED, so it is small and muted at the end of the
   line's head and wears no mono and no caps: a step number is a number, not
   an instrument label. */
.house-ann-teach-feet{display:flex;gap:6px;}
.house-ann-teach-feet .house-ann-dig{margin-top:6px;}
.house-ann-teach-count{margin-left:auto;font-size:var(--t-label);color:var(--muted);}
/* A HELD MONEY LINE'S TWO PRESSES (Q45, October 9), under the newest answer in Chat and in this panel: Yes wears the
   dig chip because it is the offer, Don't record the plain clear pill. Laid out in a row like the pair above. */
.house-ann-held{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px;}
.house-ann-held .house-ann-dig{margin-top:0;}
/* WHAT THE PERSON SAID KEEPS ITS SHAPE (item A1). The ask box holds a whole
   brief now, so the row that echoes it has to draw the paragraphs the way
   they were typed. HTML collapses every run of whitespace to one space, which
   is the same flattening her own answer was fixed for; pre-wrap keeps the
   breaks and the indenting and still wraps a long line at the bubble's edge. */
.house-ann-you{align-self:flex-end;max-width:90%;padding:6px 10px;border-radius:var(--r-10);background:var(--raised);color:var(--text);
  font-size:var(--t-small);line-height:1.4;white-space:pre-wrap;overflow-wrap:anywhere;}
.house-ann-wait{font-size:var(--t-small);color:var(--accent);}
.ann-pending{min-width:0;flex:1;font-size:var(--t-small);color:var(--accent);text-align:right;overflow-wrap:anywhere;animation:ann-wait-glow 2.8s ease-in-out infinite;}
.ann-answer-usage{font-size:var(--t-small);color:var(--muted);margin-top:var(--s2);}
.ann-answer-usage summary{cursor:pointer;}
@keyframes ann-wait-glow{0%,100%{opacity:1}50%{opacity:.65}}
@media(prefers-reduced-motion:reduce){.ann-pending{animation:none;}}
/* a line the app says rather than a line she says: centred, quiet, and
   wearing no bubble, so it cannot be read as one of her answers */
.house-ann-kept{align-self:center;max-width:90%;padding:4px 10px;
  font-size:var(--t-small);line-height:1.4;color:var(--muted);text-align:center;}
/* ---------- COMING BACK TO A PUT-AWAY CONVERSATION ----------
   docs/ANN-SLICE-2.md section 1.1. Quiet, in the house face, above an empty
   area: an offer, never an alarm. The menu of earlier ones sits under the
   press that opens it and scrolls on its own rather than pushing the log off
   the screen. */
.house-ann-resume-bar{display:flex;flex-wrap:wrap;gap:6px;
  margin:0 var(--ann-pad) var(--ann-gap);}
.house-ann-resume,.house-ann-resume-more,.house-ann-resume-row{
  border:1px solid var(--edge);background:transparent;color:var(--muted);
  border-radius:var(--r-full);padding:4px 12px;cursor:pointer;
  font:inherit;font-size:var(--t-small);line-height:1.4;text-align:left;}
.house-ann-resume:hover,.house-ann-resume-more:hover,.house-ann-resume-row:hover{color:var(--ink);border-color:var(--accent);}
.house-ann-resume-menu{flex:0 0 100%;display:flex;flex-direction:column;gap:4px;
  max-height:180px;overflow-y:auto;}
/* ---------- WHAT WAS BROUGHT IN AS EARLIER MATERIAL ----------
   section 1.2. A quiet divider and a heading, so the pulled conversation is
   plainly apart from the one being had now and is never mistaken for it. */
.house-ann-earlier-head{align-self:stretch;margin:var(--ann-gap) 0 4px;
  padding-top:var(--ann-gap);border-top:1px solid var(--edge);
  font-size:var(--t-small);color:var(--muted);}
.house-ann-earlier{opacity:.72;}
/* THE INPUT IS AT THE TOP (Mark, 2026-08-21), directly under her head and
   directly above the newest thing she said. It sat at the foot for months
   while the log above it read newest-first, so you typed at the far end of
   the panel from the line you were answering. */
.house-ann-top .house-ann-ask{margin:0 var(--ann-pad) var(--ann-gap);}
/* HER LIVE PRESS AND WHAT SHE IS DOING (Mark, 2026-09-02, the voice ladder).
   A word rather than an icon, because End has to read as End. Same height as
   the two round buttons beside it so the bar stays one line, and the accent
   is the only thing that changes when the line is open. */
.house-ann-live{display:inline-flex;align-items:center;justify-content:center;height:26px;
  padding:0 10px;border:var(--bd) solid var(--edge);border-radius:var(--r-pill);
  background:var(--inset);color:var(--muted);font:inherit;font-size:var(--t-tiny);cursor:pointer;}
.house-ann-live:hover{color:var(--ink);border-color:var(--accent-line);}
.house-ann-live.on{color:var(--accent);border-color:var(--accent);}
.house-ann-live[disabled]{opacity:.5;cursor:default;}
.house-ann-live-state{color:var(--muted);font-size:var(--t-tiny);}
/* The quiet line at the foot: what she reads, what she will not do. */
.house-ann-note{padding:0 var(--ann-pad) var(--ann-gap);color:var(--muted);font-size:var(--t-tiny);line-height:1.4;}
/* Inside the resume bar, which keeps the 16px inset itself, its Loading chats... note takes no second inset. */
.house-ann-resume-bar .house-ann-note{padding:0;}
/* Ann without AI's quiet line (rooms/ann-without-ai.js): what turns her answers on, muted, its press a link. */
.house-ann-line{margin:0;padding:0 var(--ann-pad) var(--ann-gap);color:var(--muted);font-size:var(--t-small);line-height:1.4;}
/* Its press reads at full contrast in Day and Night (button-contrast-browser-check), a link by its underline. */
.house-ann-line button{padding:0;border:0;background:none;color:var(--text);font:inherit;text-decoration:underline;text-underline-offset:2px;cursor:pointer;}
/* Said once in the thread: answers here aren't saved. Part of the conversation, so it sits where her lines do. */
.house-ann-unsaved{margin:0;color:var(--muted);font-size:var(--t-tiny);line-height:1.4;}
/* A draft grows from two rows to twice its empty height, then scrolls.
   Dispatch fits both direct input and a draft restored after rendering. */
.house-ann-ask{--ann-ask-min:calc(2.8em + var(--s5) * 2 + var(--bd) * 2);
  width:auto;margin:0 var(--ann-pad) var(--ann-gap);padding:var(--s5);
  border:var(--bd) solid var(--edge);border-radius:var(--r-10);font-size:var(--t-small);
  font-family:inherit;line-height:1.4;resize:none;overflow-y:auto;
  min-height:var(--ann-ask-min);max-height:calc(var(--ann-ask-min) * 2);}
.house-ann-empty{padding:var(--s3) var(--ann-pad);color:var(--muted);font-size:var(--t-small);}

/* The waiting line occupies the placeholder, never the editable draft. */
.assistant-composer{position:relative;display:grid;flex:none;margin:0 var(--ann-pad) var(--ann-gap)}
.house-ann .assistant-composer .house-ann-ask{width:100%;margin:0;box-sizing:border-box}
.assistant-composer-status{position:absolute;inset:var(--s5) var(--s5) auto;pointer-events:none;font-size:var(--t-small);line-height:1.4;color:var(--container-ink,var(--text))}
.assistant-composer .assistant-thinking{margin:0;font-size:var(--t-small);line-height:1.4}
.assistant-composer textarea:not(:placeholder-shown)~.assistant-composer-status{display:none}
[data-waiting-continue][hidden]{display:none}
.house-ann>.continuity-controls{margin:0 var(--ann-pad) var(--ann-gap)}
.house-ann>.continuity-controls{gap:var(--ann-gap)}
.house-ann>.continuity-controls:first-child{margin-top:var(--ann-pad)}

.titan-waiting-composer{margin:0;min-height:64px}
.titan-waiting-composer .assistant-composer-status{inset:var(--s3) var(--s3) auto}
[data-titan-waiting-continue][hidden]{display:none}

/* Ann's watch while the person is out (lib/ann-watch.js): one line under the speech bar, and the recap card. */
.ann-watch{display:flex;align-items:center;flex-wrap:wrap;gap:var(--s2);color:var(--text)}
.ann-watch>span{flex:1 1 160px;min-width:0}
.ann-watch-icon{flex:none;color:var(--accent)}
.ann-watch-recap{margin:var(--s2) var(--ann-pad)}
.ann-watch-lines{list-style:none;margin:var(--s2) 0;padding:0;display:grid;gap:var(--s2)}
.ann-watch-recap p{font-size:var(--t-small);margin:var(--s2) 0}
.ann-watch-lines li{display:grid;grid-template-columns:1fr auto;grid-template-areas:"time open" "text text";gap:var(--s1) var(--s2);align-items:center;font-size:var(--t-small)}
.ann-watch-lines li>.ann-watch-time{grid-area:time}
.ann-watch-lines li>.ann-watch-text{grid-area:text}
.ann-watch-lines li>a{grid-area:open}
.ann-watch-lines small{color:var(--muted)}
.ann-watch-time{color:var(--muted);font-size:var(--t-tiny);white-space:nowrap}
.ann-watch-recap .ann-watch-promise{color:var(--muted);font-size:var(--t-tiny)}

/* The Borg and Ann (lib/ann-peer.js): one line under the speech bar with Show or Hide and Stop, and the conversation
   at the top of the log. It runs on the panel like the chat: no card, no inner scroll, no dashed box (Mark, November 2).
   The Borg's words sit on the left with its name over them, so they never read as the person's own (the right, filled
   bubble) or as Ann's. */
.ann-peer-head{display:flex;align-items:center;flex-wrap:wrap;gap:var(--s2);color:var(--text)}
.ann-peer-head>span{flex:1 1 160px;min-width:0}
.ann-peer-icon{flex:none;color:var(--accent)}
.ann-peer{display:flex;flex-direction:column;gap:var(--ann-gap)}
.ann-peer-line{display:flex;flex-direction:column;gap:2px;max-width:92%;min-width:0;font-size:var(--t-small);line-height:1.4;overflow-wrap:anywhere}
.ann-peer-who{font-size:var(--t-tiny);color:var(--muted);font-weight:600}
.ann-peer-time{font-weight:400}
.ann-peer-words{white-space:pre-wrap}
.ann-peer-ann .ann-peer-words{white-space:normal}
.ann-peer-them{align-self:flex-start}
.ann-peer-you{align-self:flex-end;padding:6px 10px;border-radius:var(--r-10);background:var(--sel)}
.ann-peer-ann{align-self:flex-start}
.ann-peer-wait{margin:0;color:var(--muted);font-size:var(--t-tiny)}
.titan-you.ann-peer-them{align-self:flex-start;border:0;padding:0}
.titan-you.ann-peer-them .titan-you-content{border:0;padding:0;background:transparent}
