.smart-bot-examples{display:flex;flex-wrap:wrap;gap:8px;margin:14px 0 2px}.smart-bot-example{border:1px solid var(--line);background:transparent;padding:8px 10px;font-size:.68rem;color:var(--muted);text-align:left;transition:border-color .18s ease,color .18s ease}.smart-bot-example:hover,.smart-bot-example:focus-visible{border-color:var(--ink);color:var(--ink)}.smart-bot-active .confident-governance{display:none!important}.smart-bot-panel{margin-top:22px;border-top:1px solid var(--line);padding-top:18px}.smart-bot-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}.smart-bot-state,.smart-bot-mode{display:inline-flex;align-items:center;min-height:28px;padding:0 9px;border:1px solid var(--line);font-size:.6rem;letter-spacing:.09em;text-transform:uppercase}.smart-bot-state{font-weight:700}.smart-bot-state.state-established{border-color:var(--ink);background:var(--ink);color:#fff}.smart-bot-state.state-strong_signal{border-color:#57575f;color:#323239}.smart-bot-state.state-hypothesis{border-style:dashed}.smart-bot-state.state-unknown{color:var(--focus);border-color:var(--focus)}.smart-bot-mode{color:var(--muted)}.smart-bot-irony{margin:20px 0;padding-left:12px;border-left:2px solid var(--focus);font-size:clamp(1rem,1.5vw,1.25rem);font-weight:620;letter-spacing:-.025em}.smart-bot-adjacent{margin:22px 0;padding:18px;border:1px solid var(--line);background:rgba(0,0,0,.018)}.smart-bot-adjacent-top{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:14px}.smart-bot-adjacent-kicker{font-size:.61rem;letter-spacing:.11em;font-weight:700}.smart-bot-adjacent-text{margin:0;font-size:clamp(.98rem,1.4vw,1.18rem);line-height:1.45;font-weight:620}.smart-bot-next-proof{margin:12px 0 0;padding-top:12px;border-top:1px solid var(--line);color:var(--muted);font-size:.78rem;line-height:1.5}.smart-bot-details{border-top:1px solid var(--line);padding:12px 0}.smart-bot-details summary{cursor:pointer;font-size:.72rem;font-weight:620;list-style:none}.smart-bot-details summary::-webkit-details-marker{display:none}.smart-bot-details summary::after{content:'+';float:right;color:var(--muted)}.smart-bot-details[open] summary::after{content:'−'}.smart-bot-detail-copy{margin:14px 0 0;color:#393941;white-space:pre-line;font-size:.92rem;line-height:1.55}.smart-bot-evidence,.smart-bot-limits ul{list-style:none;margin:14px 0 0;padding:0}.smart-bot-evidence li,.smart-bot-limits li{display:grid;grid-template-columns:1fr auto;gap:14px;padding:9px 0;border-top:1px solid var(--line);font-size:.78rem}.smart-bot-evidence small{color:var(--muted);font-size:.6rem;letter-spacing:.04em;text-transform:uppercase}.smart-bot-evidence a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}.smart-bot-foot{margin:18px 0 0;color:var(--muted);font-size:.67rem;line-height:1.5}.smart-bot-local-fallback{margin-top:16px}.smart-bot-available #talkForm[aria-busy=true]{opacity:.72}.smart-bot-available #talkForm[aria-busy=true] button[type=submit]{cursor:wait}@media(max-width:620px){.smart-bot-examples{display:grid}.smart-bot-example{width:100%}.smart-bot-adjacent-top{align-items:flex-start;flex-direction:column}.smart-bot-evidence li,.smart-bot-limits li{grid-template-columns:1fr}.smart-bot-evidence small{margin-top:-8px}}@media(prefers-reduced-motion:reduce){.smart-bot-example{transition:none}}

/* ══ LOT 6 — Assistant drawer ══════════════════════════════════════════════
   Desktop: a right-hand drawer between 480 and 560px. The page stays visible
   and usable beside it, so it is not modal and there is no scrim and no focus
   trap. Mobile: the same surface goes full-screen and does behave as a modal.
   The JS switches aria-modal, the trap and the scroll lock on that boundary. */
.assistant-drawer{position:fixed;z-index:140;top:0;right:0;bottom:0;width:min(560px,100vw);max-width:100vw;
  display:flex;background:var(--paper);border-left:1px solid var(--line);
  box-shadow:-24px 0 60px rgba(16,16,20,.10);transform:translateX(100%);transition:transform .24s var(--ease)}
.assistant-drawer.is-open{transform:none}
.assistant-drawer[hidden]{display:none}
.assistant-scrim{position:fixed;inset:0;z-index:139;background:rgba(16,16,20,.42)}
.assistant-scrim[hidden]{display:none}
body.assistant-open{overflow:hidden}

.assistant-panel{display:grid;grid-template-rows:auto minmax(0,1fr);width:100%;min-width:0}
.assistant-head{display:flex;align-items:center;justify-content:space-between;gap:16px;
  padding:18px 22px;border-bottom:1px solid var(--line)}
.assistant-kicker{margin:0;font-size:.85rem;letter-spacing:.09em;text-transform:uppercase;font-weight:620}
.assistant-close{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;
  margin-right:-10px;border:1px solid transparent;background:transparent;font-size:1.5rem;line-height:1;color:var(--ink)}
.assistant-close:hover,.assistant-close:focus-visible{border-color:var(--line)}
.assistant-body{overflow-y:auto;overscroll-behavior:contain;padding:22px 22px calc(28px + env(safe-area-inset-bottom))}
.assistant-body .talk-box{margin:0}

/* The Home section keeps its heading and hands off to the drawer. */
.talk-open{margin:0}
.assistant-drawer-ready .talk-grid .talk-box{display:none}
html:not(.assistant-drawer-ready) .talk-open{display:none}

@media(max-width:820px){
  .assistant-drawer{width:100vw;border-left:0;height:100svh}
  .assistant-body{padding:20px 20px calc(28px + env(safe-area-inset-bottom))}
}
@media(prefers-reduced-motion:reduce){
  .assistant-drawer{transition:none}
}

/* ── answer hierarchy: state first, then answer, then evidence, then limits ── */
.smart-bot-stateblock{margin:0 0 14px}
.smart-bot-stateblock[hidden]{display:none}
.smart-bot-stateblock .smart-bot-meta{margin-bottom:0}

/* The four states differ by fill, border style and label, never by colour
   alone: solid fill, solid outline, dashed, dotted. */
.smart-bot-state,.smart-bot-mode{min-height:30px;font-size:.75rem;letter-spacing:.06em}
.smart-bot-state.state-unknown{border-style:dotted;border-width:2px}
.smart-bot-state.state-hypothesis{border-width:2px}

/* A limit is a product element here, so it carries the same weight as the
   evidence block instead of being folded away. */
.smart-bot-limits{margin:20px 0 0;padding:16px 18px;border:1px solid var(--ink)}
.smart-bot-limits-label{margin:0 0 10px;font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;font-weight:620}
.smart-bot-limits ul{list-style:none;margin:0;padding:0}
.smart-bot-limits li{padding:8px 0;border-top:1px solid var(--line);font-size:.9rem;line-height:1.5;color:#26262c}
.smart-bot-limits li:first-child{border-top:0;padding-top:0}

/* Legibility floor inside the Assistant. */
.smart-bot-example{font-size:.85rem;min-height:44px}
.smart-bot-details summary{font-size:.85rem;min-height:44px;display:flex;align-items:center}
.smart-bot-evidence li,.smart-bot-limits li{font-size:.88rem}
.smart-bot-evidence small{font-size:.75rem}
.smart-bot-foot{font-size:.8rem}
.smart-bot-adjacent-kicker{font-size:.78rem}

/* One honest loading state: the envelope reports no progress, so none is drawn. */
#talkForm.is-asking .talk-actions button[type=submit]{opacity:1}
#talkForm.is-asking .talk-note{color:var(--ink)}

/* LOT 6b — the answer outranks its own label. "Réponse OXANN" is a generic
   heading; it should not be the largest thing in the drawer while the answer
   sits under it in muted body type. */
.smart-bot-active #confidentTitle{font-size:clamp(.95rem,1.1vw,1.05rem);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:620;margin-bottom:10px}
.smart-bot-active #confidentSummary{font-size:clamp(1.1rem,1.5vw,1.35rem);line-height:1.42;color:var(--ink);font-weight:520}
.smart-bot-active #confidentDirection:empty{display:none}

/* LOT 6c — the form was typeset for a wide two-column section. Inside a 560px
   drawer the placeholder outweighed its own label. Rebalance without changing
   a single word. */
.assistant-body .talk-box{border-top:0;padding-top:0;margin-top:0}
.assistant-body .talk-box label{font-size:.85rem;color:var(--ink);display:block;margin-bottom:10px}
.assistant-body .talk-box textarea{min-height:132px;padding:14px 0;font-size:1.05rem;line-height:1.45}
.assistant-body .talk-actions{display:grid;gap:14px;margin-top:16px}
.assistant-body .talk-note{font-size:.8rem;line-height:1.5}
.assistant-body .smart-bot-examples{margin:0 0 18px}
.assistant-body .callback-form{margin-top:20px}

/* ── LOT 6d — founder acceptance on the Assistant ──────────────────────────
   The epistemic state outranks the mode. The mode says how the answer was
   produced; the state says how far it can be trusted, and only the second one
   governs what the reader should do with it. */
.smart-bot-meta{align-items:center;gap:12px}
.smart-bot-state{min-height:34px;padding:0 12px;font-size:.85rem;letter-spacing:.07em;font-weight:700}
.smart-bot-mode{min-height:24px;padding:0;border:0;font-size:.75rem;letter-spacing:.06em;color:var(--muted);font-weight:500}
.smart-bot-mode::before{content:"";display:inline-block;width:14px;height:1px;margin-right:9px;vertical-align:middle;background:var(--line)}

/* The disclosure toggles carried a typed + and − as their only affordance. */
.smart-bot-details summary::after{content:none}
.smart-bot-details[open] summary::after{content:none}
.smart-bot-details summary{position:relative;padding-right:26px}
.smart-bot-details summary::before{content:"";position:absolute;right:6px;top:50%;width:8px;height:8px;
  margin-top:-5px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;
  transform:rotate(45deg);transition:transform .18s var(--ease)}
.smart-bot-details[open] summary::before{transform:rotate(-135deg);margin-top:-2px}
@media(prefers-reduced-motion:reduce){.smart-bot-details summary::before{transition:none}}

/* ── LOT 2A — one Assistant entry surface, local and remote ────────────────
   The three starting situations are markup now, so they exist in both profiles
   and need to read as scenarios rather than tags: a 560px drawer cannot wrap a
   full sentence into a chip. Stack them, give each one a rail that only appears
   under the pointer or the focus ring, and let the question above them carry the
   weight the placeholder used to carry. */
.assistant-body .talk-box label{font-size:clamp(1.15rem,1.6vw,1.4rem);font-weight:620;letter-spacing:-.02em;color:var(--ink);margin-bottom:12px}

/* The first draft framed each situation in its own box, and the box outranked
   the field: the three suggestions looked like the inputs and the real textarea,
   an underline in the house style, looked like a caption. Suggestions are a
   list, not a form. Hairline rows, a rail that arrives under the pointer or the
   focus ring, and a mark on the right that says the row can be taken. */
.assistant-body .talk-examples{display:grid;gap:0;margin:0 0 22px;border-top:1px solid var(--line)}
.assistant-body .talk-examples .smart-bot-example{position:relative;display:grid;grid-template-columns:1fr auto;
  align-items:center;gap:14px;border:0;border-bottom:1px solid var(--line);border-radius:0;
  padding:12px 4px 12px 12px;line-height:1.4;text-wrap:pretty;color:#3f3f46;
  transition:color .18s var(--ease),background-color .18s var(--ease)}
.assistant-body .talk-examples .smart-bot-example::before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;
  background:var(--focus);transform:scaleY(0);transform-origin:top;transition:transform .2s var(--ease)}
.assistant-body .talk-examples .smart-bot-example::after{content:"→";color:var(--muted);font-size:.85rem;transition:color .18s var(--ease)}
.assistant-body .talk-examples .smart-bot-example:hover,
.assistant-body .talk-examples .smart-bot-example:focus-visible{color:var(--ink);background:rgba(16,16,20,.022)}
.assistant-body .talk-examples .smart-bot-example:hover::before,
.assistant-body .talk-examples .smart-bot-example:focus-visible::before{transform:scaleY(1)}
.assistant-body .talk-examples .smart-bot-example:hover::after,
.assistant-body .talk-examples .smart-bot-example:focus-visible::after{color:var(--ink)}

/* The field has to look like the field. It keeps the house underline and gains a
   top hairline, so it reads as one bounded region instead of a floating caption. */
.assistant-body .talk-box textarea{min-height:96px;border-top:1px solid var(--line);padding:14px 2px;font-size:1.02rem}
.assistant-body .talk-box textarea::placeholder{color:var(--muted);opacity:1;font-size:.92rem}

/* Once an answer is on screen the starting situations have done their work and
   only cost vertical room. Browsers without :has() simply keep them. */
.talk-box:has(#confidentResult:not([hidden])) .talk-examples{display:none}

/* The boundary statement was floating in the middle of a tall empty panel.
   It is the last thing the surface says, so it sits at the bottom edge and the
   drawer stops looking half-built. */
/* min-height:0 belongs to panes that scroll, not to a composer. Here it let the
   form shrink below its own content once an answer appeared underneath, and the
   state chips, the answer and the field ended up painted over each other. The
   column still distributes the empty state; it is simply not allowed to compress
   anything below what it contains. */
.assistant-body{display:flex;flex-direction:column}
.assistant-body .talk-box{display:flex;flex-direction:column;flex:1 1 auto}
.assistant-body .confident-ask{display:flex;flex-direction:column;flex:1 1 auto}
/* Anchoring the action at the bottom edge only moved the void from under the
   panel to under the field. The room belongs to the writing surface: the reader
   came here to describe a situation, so the field takes what is left and the
   action stays where the sentence ends. */
.assistant-body .talk-box textarea{flex:1 1 auto;max-height:min(42vh,360px)}
.assistant-body .talk-actions{margin-top:auto;padding-top:18px}
.assistant-body .talk-note{padding-top:14px;border-top:1px solid var(--line)}
/* Once a result is on screen the surface is a document, not a composer: the
   field returns to its own height so the answer keeps the room. */
.talk-box:has(#confidentResult:not([hidden])) textarea{flex:0 0 auto}

/* A little more width for the result object, still deliberately not the page. */
.assistant-drawer{width:min(620px,100vw)}

@media(prefers-reduced-motion:reduce){
  .assistant-body .talk-examples .smart-bot-example,
  .assistant-body .talk-examples .smart-bot-example::before,
  .assistant-body .talk-examples .smart-bot-example::after{transition:none}
}

/* ── LOT 2A — one result object, whichever engine produced it ──────────────
   The remote answer opened on a state and a mode; the local checkpoint opened
   on a small-caps kicker. Same drawer, same reader, two grammars. The local
   header now uses the same shape with words that stay truthful for it: it
   reports how it worked, not how far it can be trusted. */
.confident-meta{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px}
.confident-meta[hidden]{display:none}
.confident-meta-state{display:inline-flex;align-items:center;min-height:34px;padding:0 12px;
  border:1px solid var(--ink);font-size:.85rem;letter-spacing:.07em;font-weight:700;text-transform:uppercase}
.confident-meta-mode{font-size:.75rem;letter-spacing:.06em;color:var(--muted);text-transform:uppercase}
.confident-meta-mode::before{content:"";display:inline-block;width:14px;height:1px;margin-right:9px;
  vertical-align:middle;background:var(--line)}
/* The remote client owns the header when it answers. */
.smart-bot-active .confident-meta{display:none}
.assistant-body .confident-kicker{display:none}
#confidentDirection:empty{display:none}

/* Three columns of 190px in a 620px drawer turned the epistemic split into three
   narrow gutters of .72rem type. The split is the point, the columns are not:
   one column, one hairline each, and the text at a size a human reads. */
.assistant-body .confident-state-grid{grid-template-columns:1fr;border-bottom:0}
.assistant-body .confident-state-grid>section{padding:16px 0}
.assistant-body .confident-state-grid>section+section{padding-left:0;border-left:0;border-top:1px solid var(--line)}
.assistant-body .confident-state-grid li{font-size:.9rem;line-height:1.5}
.assistant-body .confident-state-label{font-size:.72rem!important}
.assistant-body .confident-plan-box>#confidentPlan{font-size:1rem}

/* The proof rail: one line down the answer ties the sections into a single
   object instead of a stack of blocks. It carries no information of its own,
   so it stays a hairline and never becomes red. */
.assistant-body .confident-result{position:relative;padding-left:18px}
.assistant-body .confident-result::before{content:"";position:absolute;left:0;top:6px;bottom:6px;
  width:1px;background:var(--line)}
.assistant-body .smart-bot-panel{margin-top:20px}

/* ── LOT 2A — asking, and the shapes that survive a 320px screen ───────────
   The envelope reports one thing: whether a request is open. It reports no
   steps, no percentage and no reasoning, so none is drawn — naming a stage the
   service cannot confirm would be a fabricated success, and a spinner that
   claims progress is the same lie with better manners. What is drawn is a
   hairline that says a request is open and nothing else: one segment, one slow
   pass, no percentage, no stages, and nothing at all when the reader has asked
   for reduced motion. */
.assistant-body #talkForm{position:relative}
.assistant-body #talkForm::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;
  background:var(--line);opacity:0;transition:opacity .2s var(--ease)}
.assistant-body #talkForm.is-asking::after{opacity:1;
  background:linear-gradient(90deg,var(--line) 0%,var(--line) 34%,var(--focus) 50%,var(--line) 66%,var(--line) 100%);
  background-size:280% 100%;animation:oxann-asking 2.4s var(--ease) infinite}
@keyframes oxann-asking{from{background-position:120% 0}to{background-position:-20% 0}}
#talkForm.is-asking button[type=submit]{cursor:progress}

/* The suggestions are the entry surface: they must survive a 320px screen
   without wrapping their affordance onto a second line, and stay a 44px target. */
@media(max-width:400px){
  .assistant-body .talk-box label{font-size:1.1rem}
  .assistant-body .talk-examples .smart-bot-example{padding:12px 2px 12px 11px;gap:10px;font-size:.9rem}
  .assistant-body .talk-actions .button.primary{width:100%;justify-content:center}
  .assistant-body .smart-bot-limits{padding:14px}
  .assistant-body .confident-result{padding-left:14px}
}

/* Focus has to be visible on a row that is otherwise flat. */
.assistant-body .talk-examples .smart-bot-example:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}

@media(prefers-reduced-motion:reduce){
  .assistant-body #talkForm::after{transition:none}
  .assistant-body #talkForm.is-asking::after{animation:none;background:var(--focus)}
}

/* ══ LOT 2A.1 — HUMAN FIRST · ANSWER FIRST · PROOF ON DEMAND ═══════════════
   The Assistant was a 560px full-height panel with square corners: a second
   page bolted to the first. It read as a governance console — correct, and
   colder than the thing it describes. The proof model underneath is untouched;
   what changes is how much of it a stranger has to walk through before getting
   a sentence in their own language.

   The rounded language is OXANN's own, borrowed from the OBD instrument: a
   20px card, 14px surfaces, pill controls, one soft shadow. None of OBD's
   indigo or gradient comes with it — paper, ink, muted and the restrained red
   stay exactly as they are. */

/* ── desktop: a card that sits in the corner, not a panel that owns the edge ── */
.assistant-drawer{
  top:auto;left:auto;right:22px;bottom:22px;
  width:min(452px,calc(100vw - 44px));
  height:auto;max-height:min(74vh,720px);
  border:1px solid var(--line);border-radius:20px;overflow:hidden;
  box-shadow:0 20px 52px rgba(16,16,20,.16),0 2px 10px rgba(16,16,20,.05);
  transform:translateY(14px);opacity:0;
  transition:transform .2s var(--ease),opacity .2s var(--ease);
}
.assistant-drawer.is-open{transform:none;opacity:1}
.assistant-panel{min-height:0}
.assistant-head{padding:16px 18px}
.assistant-kicker{font-size:.78rem;letter-spacing:.1em}
.assistant-close{width:34px;height:34px;margin-right:-4px;border-radius:999px;font-size:1.2rem}
.assistant-close:hover,.assistant-close:focus-visible{background:rgba(16,16,20,.05);border-color:transparent}
.assistant-body{padding:18px 18px 20px}

/* ── mobile: a bottom sheet, still a real modal ──
   This block is deliberately the last word on the drawer geometry. The previous
   lot left a width rule after the mobile media query, and at equal specificity
   the later rule won: at 768 and 820px the sheet was 620px wide, carrying a
   scrim and aria-modal without covering the screen. */
@media(max-width:820px){
  .assistant-drawer{
    left:0;right:0;bottom:0;top:auto;width:100vw;max-width:100vw;
    height:auto;max-height:92svh;
    border:1px solid var(--line);border-bottom:0;border-radius:20px 20px 0 0;
    box-shadow:0 -12px 40px rgba(16,16,20,.18);
    transform:translateY(100%);opacity:1;
  }
  .assistant-drawer.is-open{transform:none}
  .assistant-body{padding:18px 18px calc(22px + env(safe-area-inset-bottom))}
}

/* ── empty state: a question, three soft choices, a writing surface ── */
.assistant-body .talk-box label{font-size:clamp(1.12rem,1.5vw,1.28rem);font-weight:620;
  letter-spacing:-.02em;color:var(--ink);margin-bottom:14px;line-height:1.25}
.assistant-body .talk-examples{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 16px;border-top:0}
.assistant-body .talk-examples .smart-bot-example{
  display:inline-flex;align-items:center;min-height:44px;padding:10px 16px;
  border:1px solid var(--line);border-radius:999px;
  background:transparent;color:#3f3f46;font-size:.86rem;line-height:1.3;text-align:left;
  transition:border-color .18s var(--ease),color .18s var(--ease),background-color .18s var(--ease)}
.assistant-body .talk-examples .smart-bot-example::before,
.assistant-body .talk-examples .smart-bot-example::after{content:none}
.assistant-body .talk-examples .smart-bot-example:hover,
.assistant-body .talk-examples .smart-bot-example:focus-visible{
  border-color:var(--ink);color:var(--ink);background:rgba(16,16,20,.03)}
.assistant-body .talk-examples .smart-bot-example:focus-visible{outline:2px solid var(--focus);outline-offset:2px}

.assistant-body .talk-box textarea{
  flex:0 0 auto;min-height:104px;max-height:none;
  border:1px solid var(--line);border-radius:14px;padding:13px 14px;
  font-size:1rem;line-height:1.5;background:var(--paper);
  transition:border-color .18s var(--ease)}
.assistant-body .talk-box textarea:focus{border-color:var(--ink)}
.assistant-body .talk-box textarea::placeholder{color:var(--muted);opacity:1;font-size:.95rem}

.assistant-body .talk-actions{display:flex;flex-direction:column;align-items:flex-start;gap:12px;margin-top:14px;padding-top:0}
.assistant-body .talk-actions .button.primary{
  align-self:flex-start;border-radius:999px;padding:11px 22px;min-height:44px}
.assistant-body .talk-note{padding-top:0;border-top:0;color:var(--muted);font-size:.76rem;line-height:1.5}

/* ── answer first ──
   The state, the counts and the mode read as one quiet line under the answer,
   never as a header the reader has to clear before reading a sentence. */
.assistant-body .confident-result{padding-left:0}
.assistant-body .confident-result::before{content:none}
.smart-bot-active #confidentTitle{font-size:.74rem;letter-spacing:.1em;margin-bottom:8px}
.smart-bot-active #confidentSummary{font-size:clamp(1.05rem,1.4vw,1.2rem);line-height:1.5;font-weight:500}
.smart-bot-stateblock{margin:14px 0 0}
.smart-bot-meta{gap:10px;margin:0;align-items:center}
.smart-bot-state{min-height:26px;padding:0 10px;border-radius:999px;font-size:.68rem;letter-spacing:.08em}
.smart-bot-count{font-size:.74rem;color:var(--muted)}
.smart-bot-count+.smart-bot-count::before{content:"·";margin-right:9px;color:var(--line)}
.smart-bot-mode{min-height:auto;font-size:.68rem;color:var(--muted);opacity:.82;border:0;padding:0}

/* ── proof on demand: soft disclosures, never a hidden warning ── */
.smart-bot-panel{margin-top:16px;border-top:0;padding-top:0}
.smart-bot-details,.smart-bot-limits{
  border:1px solid var(--line);border-radius:14px;padding:0;margin-top:10px;overflow:hidden}
.smart-bot-details summary,.smart-bot-limits summary{
  padding:11px 14px;min-height:44px;font-size:.86rem;font-weight:560;border-top:0}
.smart-bot-details summary::before,.smart-bot-limits summary::before{right:14px}
.smart-bot-details[open] summary,.smart-bot-limits[open] summary{border-bottom:1px solid var(--line)}
.smart-bot-detail-copy{margin:0;padding:12px 14px}
.smart-bot-evidence,.smart-bot-limits ul{margin:0;padding:4px 14px 12px;list-style:none}
.smart-bot-evidence li,.smart-bot-limits li{border-top:0;padding:8px 0}
.smart-bot-evidence li+li,.smart-bot-limits li+li{border-top:1px solid var(--line)}
.smart-bot-limits-label{margin:0;text-transform:none;letter-spacing:0;font-size:.86rem;font-weight:560}
.smart-bot-limits[open]{border-color:var(--ink)}
.smart-bot-adjacent{border-radius:14px;padding:14px;margin:14px 0;background:rgba(16,16,20,.02)}
.smart-bot-adjacent-kicker{font-size:.66rem;letter-spacing:.1em;color:var(--muted)}
.smart-bot-adjacent-text{font-size:1rem;font-weight:560}
.smart-bot-irony{font-size:1.02rem;margin:14px 0}
.smart-bot-foot{font-size:.72rem;margin-top:14px}
.smart-bot-local-fallback{border-radius:999px;padding:10px 20px;min-height:44px}

/* ── local checkpoint in human words ── */
.assistant-body .confident-state-grid{border-top:0;border-bottom:0;gap:0;margin-top:14px}
.assistant-body .confident-state-grid>section{padding:12px 0}
.assistant-body .confident-state-grid>section+section{border-top:1px solid var(--line)}
.assistant-body .confident-state-label{font-size:.86rem!important;letter-spacing:0;text-transform:none;
  color:var(--ink)!important;font-weight:600;margin:0 0 8px!important}
.assistant-body .confident-state-grid li{font-size:.9rem}
.assistant-body .confident-plan-box{padding:14px;margin-top:12px;border:1px solid var(--line);border-radius:14px}
.assistant-body .confident-boundary span{border-radius:999px;font-size:.7rem}
.assistant-body .confident-controls{gap:10px;margin-top:14px}
.assistant-body .confident-controls .button.primary{border-radius:999px;min-height:44px;padding:10px 20px}
.assistant-body .callback-form input{border-radius:12px}
.assistant-body .callback-form .button.primary{border-radius:999px;min-height:44px}
.assistant-body .confident-clarify textarea{border:1px solid var(--line);border-radius:14px;padding:12px 14px}

/* the asking rail keeps the card corners */
.assistant-body #talkForm::after{left:2px;right:2px;border-radius:999px}

@media(max-width:400px){
  .assistant-body .talk-examples .smart-bot-example{font-size:.84rem;padding:8px 12px}
  .assistant-body .talk-actions .button.primary{align-self:stretch;justify-content:center}
}
@media(prefers-reduced-motion:reduce){
  .assistant-drawer{transition:none}
  .assistant-body .talk-examples .smart-bot-example,
  .assistant-body .talk-box textarea{transition:none}
}

/* ── LOT 2A.1 · valeur d'abord : le statut parle français, l'action clôt ──
   The state chip carries a sentence now, not a code, so it stops being a pill
   and becomes a quiet mark; « Je ne peux pas l'établir » cannot be squeezed into
   the same shape as « Établi ». The technical pair keeps its place at the very
   end, where a reader who wants it will look and a reader who wants an answer
   never has to. */
.smart-bot-state{border-radius:999px;padding:3px 12px;min-height:26px;font-size:.72rem;
  letter-spacing:0;text-transform:none;font-weight:600;line-height:1.3;text-align:left}
.smart-bot-state.state-established{background:var(--ink);border-color:var(--ink);color:#fff}
.smart-bot-state.state-strong_signal{background:transparent;border-color:var(--ink);color:var(--ink);border-width:1px}
.smart-bot-state.state-unknown{border-color:var(--focus);color:var(--focus);border-width:1px;border-style:solid}
.smart-bot-meta{flex-wrap:wrap;row-gap:6px}

.smart-bot-next{margin:16px 0 0;padding:14px;border:1px solid var(--ink);border-radius:14px}
.smart-bot-next-label{margin:0 0 6px;font-size:.86rem;font-weight:620;color:var(--ink)}
.smart-bot-next .smart-bot-next-proof{margin:0;padding-top:0;border-top:0;color:#26262c;
  font-size:.95rem;line-height:1.5}

.smart-bot-technical{margin:8px 0 0;color:var(--muted);font-size:.66rem;letter-spacing:.08em;
  text-transform:uppercase;opacity:.75}

/* The limits block became a <details> in this lot, and the disclosure styling
   was written when only .smart-bot-details existed: the limits summary kept the
   browser's native triangle and had no chevron of its own. Same control, same
   affordance. */
.smart-bot-limits summary{cursor:pointer;list-style:none;position:relative;padding-right:26px}
.smart-bot-limits summary::-webkit-details-marker{display:none}
.smart-bot-limits summary::before{content:"";position:absolute;right:14px;top:50%;width:8px;height:8px;
  margin-top:-5px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;
  transform:rotate(45deg);transition:transform .18s var(--ease)}
.smart-bot-limits[open] summary::before{transform:rotate(-135deg);margin-top:-2px}
@media(prefers-reduced-motion:reduce){.smart-bot-limits summary::before{transition:none}}

/* ── LOT 2A.1 · micro-passe : moins de rapport, plus de réponse ─────────────
   The composer folds once an answer exists, and the three uncertainty buckets
   stop being three open lists. What folds is their content; the line above them
   always says how many points are understood, how many wait for confirmation
   and how many are missing, so nothing material disappears behind a click. */
.talk-reopen{display:none;align-items:center;min-height:44px;padding:11px 18px;margin:0 0 4px;
  border:1px solid var(--line);border-radius:999px;background:transparent;color:#3f3f46;
  font-size:.86rem;transition:border-color .18s var(--ease),color .18s var(--ease)}
.talk-reopen:hover,.talk-reopen:focus-visible{border-color:var(--ink);color:var(--ink)}
.talk-box.is-answered .talk-reopen{display:inline-flex}
.talk-box.is-answered .confident-ask>label,
.talk-box.is-answered .talk-examples,
.talk-box.is-answered .confident-ask>textarea,
.talk-box.is-answered .talk-actions{display:none}
.talk-box.is-answered #confidentResult{margin-top:14px}

.confident-summary-line{margin:14px 0 10px;padding:9px 12px;border:1px solid var(--line);
  border-radius:999px;display:inline-block;color:#3f3f46;font-size:.8rem;letter-spacing:0}

.assistant-body .confident-state-grid{margin-top:2px}
.assistant-body .confident-state-grid>section{padding:0}
.assistant-body .confident-state-grid>section+section{border-top:0}
.confident-bucket{border:1px solid var(--line);border-radius:14px;overflow:hidden;margin-top:8px}
.confident-bucket>summary{position:relative;cursor:pointer;list-style:none;
  padding:11px 34px 11px 14px;min-height:44px;display:flex;align-items:center}
.confident-bucket>summary::-webkit-details-marker{display:none}
.confident-bucket>summary::before{content:"";position:absolute;right:14px;top:50%;width:8px;height:8px;
  margin-top:-5px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;
  transform:rotate(45deg);transition:transform .18s var(--ease)}
.confident-bucket[open]>summary::before{transform:rotate(-135deg);margin-top:-2px}
.confident-bucket[open]>summary{border-bottom:1px solid var(--line)}
.assistant-body .confident-bucket ul{margin:0;padding:8px 14px 12px}
.assistant-body .confident-bucket li{font-size:.9rem;line-height:1.5;padding:5px 0}

@media(prefers-reduced-motion:reduce){
  .confident-bucket>summary::before,.talk-reopen{transition:none}
}
