/* Общие части помощников (/dashboard, /support): текст ответа, карточки
   предложения и результата, вложения, подписи ожидания. Оболочка карточки
   помощника (фокальная поверхность, раскрытие, форма) живёт на страницах.

   Сообщения без аватаров, как в чате: ширина уходит тексту. Карточки —
   стандартные панели (14px, 1px ink-alpha, тихая тень): свечение на
   странице одно, и оно у самого помощника. */

.assistant-message{max-width:min(92%,640px)}
.assistant-body{display:flex;flex-direction:column;gap:8px;min-width:0}
.assistant-message[data-kind="user"] .assistant-body{align-items:flex-end}
.assistant-bubble{min-width:0;overflow-wrap:anywhere}
.assistant-bubble :is(p,ul,ol){margin:0;font-size:.9rem;line-height:1.55;color:#311D1C}
.assistant-bubble :is(p,ul,ol)+:is(p,ul,ol){margin-top:8px}
.assistant-bubble :is(ul,ol){padding-left:1.25em}
.assistant-bubble li+li{margin-top:3px}
.assistant-bubble p[data-heading]{font-weight:750}
.assistant-bubble .as-table{max-width:100%;overflow-x:auto;margin-top:8px;border:1px solid rgba(49,29,28,.12);border-radius:10px}
.assistant-bubble .as-table:first-child{margin-top:0}
.assistant-bubble table{border-collapse:collapse;min-width:100%;font-size:.8rem;line-height:1.4;font-variant-numeric:tabular-nums}
.assistant-bubble :is(th,td){padding:6px 10px;text-align:left;white-space:nowrap;border-top:1px solid rgba(49,29,28,.1)}
.assistant-bubble thead th{border-top:0;background:rgba(49,29,28,.04);color:#7C665C;font-weight:650}
.assistant-bubble .as-table+:is(p,ul,ol){margin-top:8px}
.assistant-bubble strong{font-weight:700}
.assistant-bubble code{padding:1px 5px;border-radius:6px;background:rgba(49,29,28,.07);font:560 .82em 'Geist Mono',monospace}
.assistant-bubble a{color:#B94319;font-weight:650;text-decoration:underline;text-decoration-color:rgba(185,67,25,.4);text-underline-offset:2px}
.assistant-bubble a:hover{text-decoration-color:currentColor}
/* Статус работы помощника (вместо точек): текст семьи Ember, как точки
   ожидания чата, но с контрастом AA (#B94319 на тёплом фоне ≥4.6:1); по
   буквам раз в цикл проходит узкая светлая полоса.
   Полоса — градиент фона, обрезанный по глифам; сам текст не двигается и не
   мигает, размер строки постоянный. Точки чата с голыми моделями не трогаются. */
.as-status{--as-status:#B94319;--as-status-glint:#F2A07C;display:flex;align-items:center;min-height:24px;padding:2px 15px}
.as-status[hidden]{display:none}
.as-status-text{font-size:.84rem;font-weight:600;line-height:1.4;letter-spacing:.005em;color:var(--as-status);
  background:linear-gradient(100deg,var(--as-status) 0%,var(--as-status) 44%,var(--as-status-glint) 50%,var(--as-status) 56%,var(--as-status) 100%);
  background-size:300% 100%;background-position:100% 0;-webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;animation:as-status-sweep 2.8s cubic-bezier(.4,0,.6,1) infinite}
@keyframes as-status-sweep{0%{background-position:100% 0}62%,100%{background-position:0 0}}
@media (prefers-reduced-motion:reduce){
  .as-status-text{animation:none;background:none;-webkit-text-fill-color:currentColor}
}
.assistant-message[data-tone="error"] .assistant-bubble{border-color:rgba(179,59,27,.34);background:rgba(179,59,27,.06)}

/* Кнопки внутри разговора: компактный контрол 10px. */
.as-actions{display:inline-flex;flex-wrap:wrap;align-items:center;gap:8px}
.as-btn{display:inline-flex;align-items:center;justify-content:center;min-height:36px;padding:7px 13px;border:1px solid rgba(49,29,28,.24);border-radius:10px;background:#FFFDF9;color:#311D1C;font:680 .8rem/1.2 inherit;text-decoration:none;white-space:nowrap;cursor:pointer;transition:background-color .15s ease,border-color .15s ease,box-shadow .15s ease}
.as-btn:is(:hover,:focus-visible):not(:disabled){border-color:#EA6029;background:rgba(234,96,41,.07)}
.as-btn-primary{border-color:#EA6029;background:#EA6029;color:#FFF8F0}
.as-btn-primary:is(:hover,:focus-visible):not(:disabled){border-color:#F37847;background:#F37847;box-shadow:0 8px 20px rgba(234,96,41,.22)}
.as-btn:disabled{opacity:.55;cursor:default}
.as-btn:focus-visible{outline:3px solid rgba(234,96,41,.32);outline-offset:2px}

/* Карточка предложения генерации. */
.as-card{display:flex;flex-direction:column;gap:10px;width:min(100%,460px);padding:14px 16px;border:1px solid rgba(49,29,28,.16);border-radius:14px;background:#FFFDF9;box-shadow:0 1px 2px rgba(49,29,28,.035)}
.as-card[data-card="proposal"][data-status="pending_confirmation"]{border-color:rgba(234,96,41,.5)}
.as-card[data-status]:not([data-status="pending_confirmation"]):not([data-status="confirmed"]){opacity:.72}
.as-card-head{display:flex;flex-direction:column;gap:2px}
.as-card-kicker{font:620 .72rem/1.3 'Geist Mono',monospace;color:#7C665C}
.as-card-title{font-size:1rem;font-weight:750;letter-spacing:-.01em;color:#311D1C}
.as-card-note{margin:0;padding:6px 10px;border-radius:8px;background:rgba(234,96,41,.07);color:rgba(49,29,28,.78);font-size:.8rem;line-height:1.45}
.as-card-prompt{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;margin:0;font-size:.85rem;line-height:1.5;color:rgba(49,29,28,.78)}
.as-rows{display:grid;grid-template-columns:auto 1fr;gap:0;margin:0;font-size:.8rem;line-height:1.4}
.as-rows :is(dt,dd){margin:0;padding:6px 0;border-top:1px solid rgba(49,29,28,.1)}
.as-rows dt{color:#7C665C}
.as-rows dd{padding-left:14px;color:#311D1C;font-weight:620;text-align:right}
.as-card-foot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding-top:10px;border-top:1px solid rgba(49,29,28,.1)}
.as-price{font-size:.8rem;font-weight:620;line-height:1;color:#7C665C;font-variant-numeric:tabular-nums}
.as-price b{font-size:1.1rem;font-weight:780;letter-spacing:-.01em;color:#311D1C}
.as-card-state{font-size:.78rem;font-weight:640;color:#7C665C}
.as-card-note{margin:0;font-size:.85rem;line-height:1.5;color:#311D1C}
.as-card-error{margin:0;font-size:.8rem;line-height:1.45;color:#B33B1B}
.as-gen{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding-top:10px;border-top:1px solid rgba(49,29,28,.1);font-size:.8rem;color:#7C665C}
.as-gen[data-state="ready"]{flex-direction:column;align-items:flex-start}
.as-gen-media{display:block;max-width:100%;border-radius:6px;overflow:hidden;background:rgba(49,29,28,.05)}
/* Превью изображения — кнопка просмотра: без системной рамки, курсор
   увеличения, кольцо фокуса с клавиатуры. */
button.as-gen-media{padding:0;border:0;font:inherit;color:inherit;cursor:zoom-in}
button.as-gen-media:focus-visible{outline:3px solid rgba(234,96,41,.32);outline-offset:3px}
.as-gen-media img,video.as-gen-media{display:block;max-width:100%;max-height:320px;object-fit:contain}
.as-gen audio{width:100%}
.as-gen-id{font:600 .72rem/1.3 'Geist Mono',monospace}

/* Вложения: в сообщении человека и над строкой ввода. */
.as-attached{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}
.as-chip{display:inline-flex;align-items:center;gap:6px;max-width:100%;min-height:28px;padding:4px 10px;border:1px solid rgba(49,29,28,.18);border-radius:10px;background:#FFFDF9;color:#311D1C;font-size:.75rem;font-weight:620}
.as-chip>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.as-chip[data-state="uploading"]{color:#7C665C}
.as-chip[data-state="error"]{border-color:rgba(179,59,27,.4);color:#B33B1B}
.as-chip button{display:grid;place-items:center;width:24px;height:24px;margin-right:-6px;padding:0;border:0;border-radius:6px;background:transparent;color:inherit;font-size:1rem;line-height:1;cursor:pointer}
.as-chip button:is(:hover,:focus-visible){background:rgba(49,29,28,.07)}
[data-assistant-files]{display:flex;flex-wrap:wrap;gap:6px;margin:0 2px 8px}
[data-assistant-files][hidden],[data-assistant-filepick]{display:none!important}
[data-assistant-attach]{display:grid;place-items:center;width:36px;height:36px;flex:0 0 auto;margin:0 -8px 0 -8px;padding:0;border:0;border-radius:10px;background:transparent;color:#7C665C;cursor:pointer}
[data-assistant-attach]:is(:hover,:focus-visible){background:rgba(49,29,28,.06);color:#311D1C}
[data-assistant-attach] svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}

/* «Очистить» — текстовая кнопка рядом со «Свернуть», той же высоты. Словом,
   а не «+»: знак плюса читался как «добавить», а действие начинает разговор
   заново. Прежний разговор не удаляется — сервер лишь открывает новый. */
[data-assistant-new]{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:44px;margin-left:auto;padding:0 13px;border:1px solid rgba(49,29,28,.2);border-radius:10px;background:transparent;color:#311D1C;font:680 .78rem/1 Geist,system-ui,sans-serif;white-space:nowrap;cursor:pointer;transition:background-color .15s ease,border-color .15s ease}
[data-assistant-new]:is(:hover,:focus-visible):not(:disabled){background:rgba(49,29,28,.055);border-color:#EA6029}
[data-assistant-new]:disabled{opacity:.45;cursor:default}
[data-assistant-new]+[data-assistant-close]{margin-left:0}
[data-assistant-resume]{display:inline-flex;align-items:center;gap:7px;min-height:40px;padding:7px 12px;border:1px solid rgba(234,96,41,.5);border-radius:10px;background:rgba(234,96,41,.08);color:#311D1C;font-size:.75rem;font-weight:700;cursor:pointer}
[data-assistant-resume] svg{width:14px;height:14px;flex:0 0 auto;fill:none;stroke:#EA6029;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
[data-assistant-resume]:is(:hover,:focus-visible){border-color:#EA6029}

@media(max-width:620px){
  .assistant-message{max-width:100%}
  .as-card{padding:12px 13px}
  .as-card-foot .as-actions{width:100%}
  .as-card-foot .as-btn{flex:1}
}
@media(pointer:coarse){.as-btn,[data-assistant-resume]{min-height:44px}[data-assistant-attach]{width:44px;height:44px;margin:0 -12px 0 -12px}}
/* Лента прижата к низу: первое «Думаю» стоит у поля ввода, там, где появится
   ответ, а не у верхнего края пустой ленты. margin-top:auto у первого
   сообщения, а не justify-content:flex-end, — прокрутка вверх сохраняется. */
[data-assistant-log]>:first-child{margin-top:auto}
[data-assistant-log]>[data-assistant-empty]{align-self:center;max-width:24ch;margin:auto 0;padding:12px;text-align:center;font-size:clamp(1.25rem,2.5vw,1.625rem);font-weight:750;line-height:1.25;letter-spacing:-.018em;color:#7C665C;text-wrap:balance}
/* Шапка разговора на узком экране: кнопки не сжимаются, заголовок уступает
   место и обрезается многоточием, а не наезжает на «Очистить». */
[data-chat-head] [data-assistant-new],[data-chat-head] [data-assistant-close]{flex:0 0 auto}
[data-chat-head]>span:not([data-chat-mark]){flex:1 1 auto;min-width:0}
[data-chat-head] [data-chat-mark]{flex:0 0 auto}
@media(max-width:480px){
  [data-chat-head]{gap:9px}
  [data-chat-head] [data-chat-mark]{width:32px;height:32px}
  [data-chat-head] h1,[data-chat-head] h2{font-size:1.15rem!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
}
@media(max-width:360px){[data-assistant-new]{padding:0 10px}[data-chat-head] [data-chat-mark]{display:none}}

/* A narrow proposal keeps names and amounts readable; the log is bounded
   so typing and confirmation stay next to the conversation. */
.as-rows{grid-template-columns:auto minmax(0,1fr)}
.as-rows dd,.as-card-title{overflow-wrap:anywhere}
@media(pointer:coarse){
  .as-chip button{width:44px;height:44px;flex:0 0 44px}
  [data-assistant-send]{width:44px!important;height:44px!important}
  [data-assistant-prompt]{min-height:44px}
}
@media(max-width:620px){
  .as-btn{white-space:normal;text-align:center;overflow-wrap:anywhere}
  [data-assistant-log]{max-height:min(54dvh,calc(var(--rf-viewport-height,100dvh) - 180px))}
  [data-assistant-input]{min-width:0;font-size:16px!important}
}
