/* La conversation avec l'IA dans le buddy (Buddy/_conversation, _thread, _composer). Chargée partout
   (entrypoint) : le buddy est sur toutes les pages. Les bulles sont celles du buddy (core buddy.css). */

/* Une conversation se lit mieux un peu plus large. */
.menu.buddy-panel:has(.ai-buddy) { width: min(28rem, calc(100dvw - var(--space-account) * 2)); }

/* Une seule colonne, jamais plus large que le panneau : un titre long se coupe, il ne fait pas défiler. */
.ai-buddy, .ai-buddy__frame, .ai-buddy__thread { display: grid; grid-template-columns: minmax(0, 1fr); gap: .875rem; min-width: 0; }

.ai-buddy__question { white-space: pre-wrap; }

/* La réponse : du Markdown, aéré mais compact. */
.ai-buddy__md { display: grid; gap: .5rem; }
.ai-buddy__md > * { margin: 0; }
.ai-buddy__md :is(ul, ol) { display: grid; gap: .25rem; padding-inline-start: 1.125rem; }
.ai-buddy__md ul { list-style: disc; }
.ai-buddy__md ol { list-style: decimal; }
.ai-buddy__md :is(h1, h2, h3, h4) { font-size: .875rem; font-weight: 700; }
.ai-buddy__md a { color: var(--color-accent); text-decoration: underline; text-underline-offset: .15em; }
.ai-buddy__md code { padding: .0625rem .3125rem; border-radius: .3125rem; background: var(--color-canvas); font-size: .8125em; }
.ai-buddy__md pre { overflow-x: auto; padding: .625rem .75rem; border-radius: .625rem; background: var(--color-canvas); font-size: .75rem; line-height: 1.5; }
.ai-buddy__md pre code { padding: 0; background: none; }
.ai-buddy__md blockquote { padding-inline-start: .75rem; border-inline-start: 3px solid var(--color-line); color: var(--color-ink-2); }
.ai-buddy__md table { display: block; overflow-x: auto; border-collapse: collapse; font-size: .8125rem; }
.ai-buddy__md :is(th, td) { padding: .25rem .5rem; border: 1px solid var(--color-line); text-align: start; }

/* L'IA réfléchit : trois points ; elle écrit : un curseur au bout du texte. */
.ai-buddy__typing { display: inline-flex; gap: .3125rem; padding-block: .375rem; }
.ai-buddy__typing span { width: .4375rem; height: .4375rem; border-radius: 50%; background: var(--color-accent); opacity: .3; animation: buddy-dot 1s infinite; }
.ai-buddy__typing span:nth-child(2) { animation-delay: .15s; }
.ai-buddy__typing span:nth-child(3) { animation-delay: .3s; }
/* Le curseur suit le dernier mot, dans le dernier paragraphe ou le dernier point de liste. */
.ai-buddy__answer.is-writing .ai-buddy__md > :last-child:not(ul, ol, pre)::after,
.ai-buddy__answer.is-writing .ai-buddy__md > :is(ul, ol):last-child > li:last-child::after {
    content: ""; display: inline-block; width: .5rem; height: 1em; margin-inline-start: .1875rem; border-radius: 1px;
    background: var(--color-accent); vertical-align: -.125em; animation: ai-buddy-caret 1s steps(2) infinite;
}
@keyframes ai-buddy-caret { 50% { opacity: 0; } }

.ai-buddy__answer.is-failed .buddy-msg__bubble { background: var(--color-warning-soft, #fff4d6); }
.ai-buddy__error { margin: 0; }
.ai-buddy__error i { margin-inline-end: .25rem; color: var(--color-warning, #b7791f); }

/* Sous une réponse finie : la copier. */
.ai-buddy__tools { display: flex; gap: .75rem; margin-top: -.375rem; padding-inline-start: var(--buddy-message-inset); }
.ai-buddy__tool { display: inline-flex; align-items: center; gap: .3125rem; color: var(--color-muted); font-size: .75rem; cursor: pointer; }
.ai-buddy__tool:hover { color: var(--color-accent); }

/* La saisie : une boîte arrondie, le bouton d'envoi dedans, en bas à droite. */
.ai-composer { gap: .5rem; }
.ai-composer__box {
    display: flex; align-items: flex-end; gap: .5rem; padding: .375rem .375rem .375rem .875rem;
    border: 1px solid var(--color-line); border-radius: 1.25rem; background: var(--color-surface);
    transition: border-color .15s, box-shadow .15s;
}
.ai-composer__box:focus-within { border-color: var(--color-accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--color-accent) 18%, transparent); }
.ai-composer__box.is-invalid { border-color: var(--color-danger, #d64545); }
.ai-composer .ai-composer__input {
    flex: 1; min-width: 0; min-height: 2rem; max-height: 10rem; padding: .375rem 0; border: 0; background: none; box-shadow: none;
    color: var(--color-ink); font-size: .875rem; line-height: 1.4; resize: none; overflow-y: auto; outline: none;
}
/* Le bouton de l'IA (son logo), à gauche du champ : qui répond, nouvelle discussion, réglages. */
.ai-composer__ai { flex: none; display: flex; margin-inline-start: -.5rem; }
.ai-composer__ai-trigger {
    display: grid; place-items: center; width: 2rem; height: 2rem; border-radius: 50%; cursor: pointer;
    transition: background-color .15s;
}
.ai-composer__ai-trigger img { width: 1.125rem; height: 1.125rem; }
.ai-composer__ai-trigger:hover, .ai-composer__ai-trigger[aria-expanded="true"] { background: var(--color-tile); }
.ai-composer__menu { width: 17rem; }
.ai-composer__menu .menu-identity-avatar { background: var(--color-tile); }
.ai-composer__menu .menu-identity-avatar img { width: 1.25rem; height: 1.25rem; object-fit: contain; }
.ai-composer__menu .menu-title small { display: block; color: var(--color-muted); font-size: .75rem; font-weight: 400; }

.ai-composer__send, .ai-composer__stop {
    flex: none; display: grid; place-items: center; width: 2rem; height: 2rem; border-radius: 50%;
    background: var(--color-accent); color: var(--color-on-accent, #fff); font-size: .8125rem; cursor: pointer; transition: opacity .15s, transform .15s;
}
.ai-composer__send:hover:not(:disabled), .ai-composer__stop:hover { transform: scale(1.06); }
/* Tant qu'elle répond (is-busy, stamina-ai-buddy), « Arrêter » prend la place d'« Envoyer ». */
.ai-composer:not(.is-busy) .ai-composer__stop, .ai-composer.is-busy .ai-composer__send { display: none; }
.ai-composer__send:disabled { opacity: .35; cursor: default; }
.ai-composer.is-sending .ai-composer__send i::before { content: "\f110"; }
.ai-composer.is-sending .ai-composer__send i { animation: fa-spin 1s linear infinite; }
.ai-composer__error { margin: 0; padding-inline: .875rem; font-size: .6875rem; }

/* Le travail de l'IA dans Stamina : une ligne discrète par suite d'étapes, à déplier pour le détail. */
.ai-buddy__steps { margin: -.375rem 0 -.375rem var(--buddy-message-inset); color: var(--color-muted); font-size: .75rem; line-height: 1.4; }
.ai-buddy__steps summary { display: flex; align-items: center; gap: .5rem; width: fit-content; max-width: 100%; cursor: pointer; list-style: none; }
.ai-buddy__steps summary::-webkit-details-marker { display: none; }
.ai-buddy__steps summary::after { content: "\f107"; font: var(--fa-font-light); font-size: .6875rem; transition: transform .15s; }
.ai-buddy__steps[open] summary::after { transform: rotate(180deg); }
.ai-buddy__steps summary:hover { color: var(--color-ink-2); }
.ai-buddy__steps summary i { flex: none; width: .875rem; text-align: center; color: var(--color-accent); }
.ai-buddy__steps summary .fa-circle-check { color: var(--color-success); }
.ai-buddy__steps summary small { color: var(--color-hint, var(--color-muted)); font-size: .6875rem; }
.ai-buddy__steps ul { display: grid; gap: .25rem; margin: .375rem 0 0 .375rem; padding-inline-start: .875rem; border-inline-start: 1px solid var(--color-line); }
.ai-buddy__steps li { overflow-wrap: anywhere; }
.ai-buddy__steps li em { margin-inline-start: .25rem; color: var(--color-warning, #b7791f); font-style: normal; }

/* « Reprendre » : la discussion précédente, un simple lien sous le bonjour. */
.ai-buddy__resume {
    display: flex; align-items: center; gap: .5rem; min-width: 0; margin: -.375rem 0 0 var(--buddy-message-inset);
    color: var(--color-ink-2); font-size: .75rem; text-decoration: none;
}
.ai-buddy__resume > span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ai-buddy__resume > i { flex: none; color: var(--color-accent); }
.ai-buddy__resume:hover { color: var(--color-accent); }
.ai-buddy__resume:hover > span { text-decoration: underline; }

/* Ses dernières discussions, sous le bonjour (Buddy/_conversation). */
.ai-buddy__recent { display: grid; gap: .375rem; margin-top: -.375rem; }
.ai-buddy__recent .ai-buddy__resume { margin-top: 0; }
.ai-buddy__resume.is-all { color: var(--color-muted); }

/* Qui vous répond, dans le menu du bouton de l'IA (Buddy/_composer). */
.ai-composer__menu form { margin: 0; }
.ai-composer__speaker-logo { flex: none; display: grid; place-items: center; width: 1.75rem; height: 1.75rem; border-radius: .5rem; background: var(--color-tile); }
.ai-composer__speaker-logo img { width: 1rem; height: 1rem; object-fit: contain; }
.ai-composer__speaker-logo.is-dark { background: #111; }
.ai-composer__speaker-logo.is-dark img { filter: invert(1); }

/* Toutes ses discussions (Buddy/_discussions). */
.ai-buddy__discussions { display: grid; gap: .25rem; margin: 0 0 0 var(--buddy-message-inset); padding: 0; list-style: none; }
.ai-buddy__discussions li { display: flex; align-items: center; gap: .25rem; border-radius: .75rem; }
.ai-buddy__discussions li:hover { background: var(--color-tile); }
.ai-buddy__discussions a { flex: 1; min-width: 0; display: grid; gap: .0625rem; padding: .5rem .625rem; color: var(--color-ink); text-decoration: none; }
.ai-buddy__discussions b { overflow: hidden; font-size: .8125rem; font-weight: 600; text-overflow: ellipsis; white-space: nowrap; }
.ai-buddy__discussions small { color: var(--color-muted); font-size: .6875rem; }
.ai-buddy__discussions form { flex: none; margin: 0; }
.ai-buddy__delete { display: grid; place-items: center; min-width: 2rem; height: 2rem; padding: 0 .5rem; border: 0; border-radius: .5rem; background: none; color: var(--color-muted); font-size: .8125rem; cursor: pointer; opacity: 0; }
.ai-buddy__discussions li:hover .ai-buddy__delete, .ai-buddy__delete:focus-visible, .ai-buddy__delete[aria-pressed], .ai-buddy__delete:not(:has(> i:only-child)) { opacity: 1; }
.ai-buddy__delete:hover { color: var(--color-danger, #d64545); }
