/* app/public/css/chat.css — lote chat (region:chat).
   Sobre base.css (kit). Maqueta: mockups/app/chat.html · spec: spec_chat.md.
   Sin capa: gana a base (capas base/components).  Prefijos propios:
   .chat-*, .turn*, .acts, .variants, .think*, .composer*, .cp-*, .starter*. */

/* ------------------------------------------------------------------ */
/* Esqueleto: el panel ocupa el alto que le deja la barra y no hace    */
/* scroll él mismo; cada columna lleva el suyo.                        */
/* ------------------------------------------------------------------ */
.chat-view { display: flex; flex-direction: column; min-height: 0; min-width: 0; overflow: hidden; }
.chat-view > .chat-split { flex: 1 1 auto; height: auto; min-height: 0; }
.chat-split > .chat-main { display: flex; flex-direction: column; position: relative; min-height: 0; background: rgb(var(--c-bg)); }
.chat-main > * { flex: none; }
.chat-main > .chat-thread { flex: 1 1 auto; }
/* Los .sr-only (absolutos) no deben escapar de las columnas con scroll */
.chat-thread { position: relative; }
@media (min-width: 900px) { .chat-side { position: relative; } }
@media (min-width: 1200px) {
  .chat-panel { position: relative; }
  .chat-split[data-panel-closed] { grid-template-columns: var(--side-w) minmax(0, 1fr); }
  .chat-split[data-panel-closed] > .chat-panel { display: none; }
}
/* Por debajo de 1200 el panel es cajón: sin transición con movimiento reducido
   (base.css ya lo deja instantáneo) y a pantalla completa en el móvil. */
@media (max-width: 599.98px) {
  .chat-panel.side--right { width: 100vw; border-left: 0; }
}
/* Cajones: respetan las zonas seguras del móvil */
@media (max-width: 1199.98px) {
  .chat-panel { padding-top: env(safe-area-inset-top, 0px); padding-bottom: env(safe-area-inset-bottom, 0px); }
}
@media (max-width: 899.98px) {
  .chat-side { padding-top: env(safe-area-inset-top, 0px); padding-bottom: env(safe-area-inset-bottom, 0px); }
}

/* ------------------------------------------------------------------ */
/* Lista de chats                                                      */
/* ------------------------------------------------------------------ */
.chat-side .side__head .btn-line { flex: 1 1 auto; justify-content: flex-start; }
.chat-side .list__meta { max-width: 100%; }
.chat-side .side__foot .btn { width: 100%; justify-content: flex-start; }
.chat-list-note { padding: 10px; color: rgb(var(--c-muted)); font-size: var(--fs-small); line-height: 1.45; }
.chat-list-note.notice { margin: 4px 2px 8px; padding: 10px 12px; font-size: var(--fs-xs); }
.chat-side .list__row.is-menu-open { z-index: 3; }
.chat-side .menu { min-width: 200px; }
.chat-side .menu.menu--up { top: auto; bottom: calc(100% + 6px); }
.chat-side .menu__item.is-armed { background: rgb(var(--c-warn) / 0.12); }
.chat-rename { margin: 2px 0; }
@media (max-width: 899.98px) {
  .chat-side .list__actions { opacity: 1; } /* sin hover: siempre visibles */
}

/* ------------------------------------------------------------------ */
/* Cabecera del hilo                                                   */
/* ------------------------------------------------------------------ */
.chat-head { display: flex; align-items: center; gap: 4px; min-height: 56px; padding: 6px 12px 6px 20px; border-bottom: 1px solid var(--line); min-width: 0; }
.chat-title {
  min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
  font: 600 1.25rem / 1.25 var(--font-serif); color: rgb(var(--c-text)); cursor: text;
}
.chat-head__rename { color: rgb(var(--c-muted)); }
.chat-head__sp { flex: 1 1 auto; }
.chat-head .chat-cfgbtn[aria-expanded='true'] { color: rgb(var(--c-text)); background: rgb(var(--c-line) / 0.08); }
.ct-rename { flex: 1 1 auto; min-width: 0; max-width: 32rem; min-height: 40px; padding: 6px 10px; font: 600 1.125rem / 1.25 var(--font-serif); }

/* Franja «no se guarda en la nube» (data-unsaved) */
.chat-unsaved { margin: 12px 24px 0; }
.chat-unsaved .notice__body p + p { margin-top: 2px; }
.chat-unsaved .chat-unsaved__why { color: rgb(var(--c-muted)); font-size: var(--fs-xs); }
.chat-unsaved > .btn { flex: none; align-self: center; }

/* ------------------------------------------------------------------ */
/* Hilo: el contenedor con scroll es [data-thread]; sus hijos van a la */
/* columna de lectura.                                                 */
/* ------------------------------------------------------------------ */
.chat-thread { overflow: auto; min-height: 0; padding: 32px 24px 24px; scroll-padding-bottom: 24px; overscroll-behavior: contain; }
.chat-thread > * { max-width: var(--read-max); margin-inline: auto; }

.turn + .turn { margin-top: 32px; }
.turn__who { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-bottom: 8px; font: 500 var(--fs-xs) / 1.3 var(--font-sans); color: rgb(var(--c-muted)); font-variant-numeric: tabular-nums; }
.turn__who b { color: rgb(var(--c-soft)); font-weight: 600; }
.turn .body { color: rgb(var(--c-text)); overflow-wrap: break-word; }
.turn--user .body { background: rgb(var(--c-panel)); border: 1px solid var(--line); border-radius: var(--r-md); padding: 14px 18px; }

/* Markdown dentro de un turno (md()): serif de lectura, sin adornos */
.turn .body > :first-child { margin-top: 0; }
.turn .body p { margin: 0; }
.turn .body p + p, .turn .body * + p { margin-top: 0.9em; }
.turn .body h3, .turn .body h4, .turn .body h5, .turn .body h6 { margin: 1.2em 0 0.5em; font: 600 1.05em / 1.3 var(--font-serif); color: rgb(var(--c-text)); }
.turn .body h3 { font-size: 1.15em; }
.turn .body ul, .turn .body ol { margin: 0.9em 0 0; padding-left: 1.4em; }
.turn .body li + li { margin-top: 0.3em; }
.turn .body blockquote { margin: 0.9em 0 0; padding: 2px 0 2px 14px; border-left: 2px solid var(--line-2); color: rgb(var(--c-soft)); }
.turn .body hr { margin: 1.2em 0; border: 0; border-top: 1px solid var(--line-2); }
.turn .body a { color: rgb(var(--c-coral)); text-decoration: underline; text-underline-offset: 3px; }
.turn .body em { font-style: italic; }
.turn .body code { font-family: var(--font-mono); font-size: 0.82em; background: rgb(0 0 0 / 0.18); border: 1px solid var(--line); border-radius: 6px; padding: 0.1em 0.35em; overflow-wrap: anywhere; }
.turn .body pre.code {
  position: relative; margin: 0.9em 0 0; padding: 14px 16px; padding-top: 40px;
  background: rgb(var(--c-code)); border: 1px solid var(--line-2); border-radius: var(--r-md);
  overflow-x: auto; font: 400 var(--fs-code, 0.8125rem) / 1.55 var(--font-mono); color: rgb(var(--c-soft));
}
.turn .body pre.code code { background: none; border: 0; padding: 0; font-size: inherit; white-space: pre; overflow-wrap: normal; }
.copy-code {
  position: absolute; top: 6px; right: 6px; min-height: 28px; padding: 4px 10px;
  background: rgb(var(--c-panel-2)); border: 1px solid var(--line-2); border-radius: 6px;
  color: rgb(var(--c-soft)); font: 500 var(--fs-xs) / 1 var(--font-sans); cursor: pointer;
}
.copy-code:hover { color: rgb(var(--c-text)); border-color: var(--line-hover); }
@media (pointer: coarse) { .copy-code { min-height: var(--tap); } .turn .body pre.code { padding-top: 56px; } }

/* Acciones del turno */
.acts { display: flex; flex-wrap: wrap; align-items: center; gap: 2px 4px; margin: 8px 0 0 -10px; }
.acts .btn-xs { color: rgb(var(--c-muted)); font-weight: 500; }
.acts .btn-xs:hover { color: rgb(var(--c-text)); }
.acts .btn-xs.is-armed { color: rgb(var(--c-warn)); border-color: rgb(var(--c-warn) / 0.45); }
.acts__end { display: inline-flex; align-items: center; gap: 2px; margin-left: auto; }
.variants { display: inline-flex; align-items: center; }
.variants__n { min-width: 4.5em; text-align: center; color: rgb(var(--c-soft)); font: 500 var(--fs-xs) / 1 var(--font-sans); font-variant-numeric: tabular-nums; }
.variants .btn-icon { width: 36px; min-width: 36px; min-height: 36px; }
@media (hover: hover) and (pointer: fine) and (min-width: 900px) {
  .turn:not(.is-last) .acts { opacity: 0; transition: opacity var(--dur) ease; }
  .turn:hover .acts, .turn:focus-within .acts { opacity: 1; }
}
@media (pointer: coarse) { .variants .btn-icon { width: var(--tap); min-width: var(--tap); min-height: var(--tap); } }

/* Notas de razonamiento (dentro de .body: renderReply) */
.turn .body > .think { margin: 0 0 14px; padding-left: 12px; border-left: 2px solid var(--line-2); font-family: var(--font-sans); }
.think > summary {
  display: inline-flex; align-items: center; gap: 8px; min-height: 36px; padding-right: 8px;
  list-style: none; cursor: pointer; border-radius: var(--r-sm);
  color: rgb(var(--c-soft)); font: 500 var(--fs-small) / 1.2 var(--font-sans);
}
.think > summary::-webkit-details-marker { display: none; }
.think > summary .icon { color: rgb(var(--c-muted)); transition: transform var(--dur) ease; }
.think:not([open]) > summary .icon { transform: rotate(-90deg); }
.think > summary:hover { color: rgb(var(--c-text)); }
.think.live > summary { color: rgb(var(--c-text)); }
.think__meta { color: rgb(var(--c-muted)); font-weight: 400; }
.think__body { max-height: 40vh; overflow: auto; padding: 4px 0 8px; color: rgb(var(--c-soft)); font: 400 var(--fs-small) / 1.55 var(--font-sans); }
.turn .body .think__body p + p { margin-top: 0.6em; }
@media (pointer: coarse) { .think > summary { min-height: var(--tap); } }

/* Cursor de escritura (CSS, sin carácter) */
.cursor { display: inline-block; width: 2px; height: 1.05em; margin-left: 2px; vertical-align: -0.15em; background: rgb(var(--c-coral)); }
@media (prefers-reduced-motion: no-preference) { .cursor { animation: chat-blink 1s steps(1) infinite; } }
@keyframes chat-blink { 50% { opacity: 0; } }

/* Edición en sitio */
.edit-box { display: flex; flex-direction: column; gap: 8px; }
.edit-box textarea.field { --grow-max: 60vh; font-size: var(--fs-read); line-height: 1.7; min-height: 120px; }
.edit-box__foot { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.edit-box__hint { margin-left: auto; color: rgb(var(--c-muted)); font-size: var(--fs-xs); }

/* Arranque en frío: sin texto aún, frase fija en el turno */
.turn__wait { display: flex; align-items: flex-start; gap: 10px; color: rgb(var(--c-soft)); font: 400 var(--fs-small) / 1.55 var(--font-sans); }
.turn__wait .spinner { flex: none; margin-top: 0.2em; }
@media (prefers-reduced-motion: reduce) { .turn__wait .spinner, .composer__live .spinner { animation: none; border-right-color: currentColor; opacity: 0.6; } }

/* Mensaje sin respuesta (P-T6), notas bajo el turno (red, error) */
.turn__retry { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-top: 10px; color: rgb(var(--c-muted)); font-size: var(--fs-xs); line-height: 1.45; }
.turn__note { display: flex; align-items: flex-start; gap: 8px; margin-top: 10px; color: rgb(var(--c-soft)); font-size: var(--fs-xs); line-height: 1.45; }
.turn__note > .icon { flex: none; margin-top: 1px; color: rgb(var(--c-warn)); }
.turn__retry > .icon { flex: none; color: rgb(var(--c-warn)); }

/* Botón «Ir al final» */
.chat-scrollbtn { position: absolute; right: 24px; bottom: 150px; z-index: 5; background: rgb(var(--c-panel-2)); }

/* Avisos junto al compositor */
.chat-notices { padding: 0 24px; }
.chat-notices:empty { display: none; }
.chat-notices > * { max-width: var(--read-max); margin: 0 auto 10px; }

/* ------------------------------------------------------------------ */
/* Compositor                                                          */
/* ------------------------------------------------------------------ */
.chat-dock { padding: 8px 24px calc(14px + env(safe-area-inset-bottom, 0px)); }
.composer { display: flex; flex-direction: column; gap: 6px; max-width: var(--read-max); margin-inline: auto; }
.composer__box {
  display: flex; align-items: flex-end; gap: 8px; padding: 6px;
  background: rgb(var(--c-panel)); border: 1px solid var(--line-strong); border-radius: var(--r-md);
  transition: border-color var(--dur) ease;
}
.composer__box:focus-within { border-color: rgb(var(--c-coral)); box-shadow: 0 0 0 1px rgb(var(--c-coral)); }
.composer__box .field { flex: 1 1 auto; min-width: 0; border: 0; background: transparent; padding: 9px 10px; font-size: var(--fs-read); line-height: 1.6; }
.composer__box .field:focus-visible { outline: none; box-shadow: none; }
.composer__box .send { flex: none; }
.composer__box .send--stop { background: transparent; color: rgb(var(--c-text)); border-color: rgb(var(--c-coral)); }
.composer__box .send--stop:hover { background: rgb(var(--c-coral) / 0.1); }
.composer__box .send[aria-disabled='true'] { background: rgb(var(--c-panel-2)); color: rgb(var(--c-muted)); border-color: var(--line-2); cursor: not-allowed; }
.composer__status { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 4px 16px; padding-inline: 4px; color: rgb(var(--c-muted)); font-size: var(--fs-xs); }
.composer__cfg {
  display: inline-flex; align-items: center; gap: 6px; min-height: 32px; padding: 0 6px; margin-left: -6px;
  background: none; border: 0; border-radius: 6px; color: inherit; font: inherit; cursor: pointer; text-align: left;
}
.composer__cfg:hover { color: rgb(var(--c-text)); }
.composer__cfg .icon { flex: none; }
.composer__keys { display: inline-block; line-height: 1.9; }
.composer__live { display: inline-flex; align-items: center; gap: 8px; min-height: 32px; color: rgb(var(--c-soft)); }
@media (pointer: coarse) {
  .composer__cfg { min-height: var(--tap); }
  .composer__keys { display: none; }
  .composer__box:focus-within + .composer__status { display: none; }
  .edit-box__hint { display: none; }
  /* Safari hace zoom por debajo de 16 px */
  .composer__box .field, .ct-rename, .chat-rename { font-size: max(16px, 1em); }
}

/* ------------------------------------------------------------------ */
/* Panel «Ajustes del chat»                                            */
/* ------------------------------------------------------------------ */
.chat-panel .side__head { justify-content: space-between; min-height: 56px; padding: 6px 8px 6px 20px; }
.chat-panel__title { font: 600 var(--fs-ui) / 1.3 var(--font-sans); color: rgb(var(--c-text)); }
/* En columna (≥1200) se cierra con el botón de la cabecera del hilo; la X solo en cajón. */
.chat-panel .side__body { padding: 20px; }
.cp-sect + .cp-sect { margin-top: 22px; padding-top: 20px; border-top: 1px solid var(--line); }
.cp-sect .field-label { display: block; margin-bottom: 8px; }
.cp-sect textarea.field-read { font-size: 1rem; line-height: 1.55; resize: vertical; min-height: 9rem; }
.cp-sect .switch { width: 100%; justify-content: space-between; flex-direction: row-reverse; color: rgb(var(--c-text)); font-weight: 500; }
.cp-ends { display: flex; justify-content: space-between; margin: -6px 0 0; padding-right: calc(3.5ch + 12px); color: rgb(var(--c-muted)); font-size: var(--fs-xs); }
.cp-model { display: flex; align-items: baseline; gap: 8px; color: rgb(var(--c-text)); font: 600 var(--fs-ui) / 1.3 var(--font-sans); }
.cp-sect .kv { margin-bottom: 12px; }
.cp-sect .range { flex: 1 1 auto; width: auto; min-width: 0; }
.cp-sect select.field + .field-help, .cp-model + .field-help { margin-top: 6px; }
.cp-prop { margin-top: 4px; }
.cp-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 16px; }
.cp-actions .btn-danger.is-armed { background: rgb(var(--c-warn)); color: rgb(var(--c-on-coral)); border-color: transparent; }
.cp-sect .meter { margin-bottom: 10px; }

/* ------------------------------------------------------------------ */
/* Estado vacío                                                        */
/* ------------------------------------------------------------------ */
.chat-empty.empty { max-width: var(--read-max); padding-top: 6vh; }
.chat-empty .empty__title { font-size: 1.625rem; }
.starters { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; width: 100%; margin-top: 14px; }
.starter {
  display: flex; flex-direction: column; gap: 6px; min-height: var(--tap); padding: 14px 16px;
  background: rgb(var(--c-panel)); border: 1px solid var(--line-2); border-radius: var(--r-md);
  color: rgb(var(--c-text)); text-align: left; font: inherit; cursor: pointer;
  transition: border-color var(--dur) ease, background-color var(--dur) ease;
}
.starter:hover { border-color: rgb(var(--c-line) / 0.4); background: rgb(var(--c-panel-2)); }
.starter__title { font: 600 var(--fs-small) / 1.3 var(--font-sans); }
.starter__text { color: rgb(var(--c-soft)); font: italic 400 1rem / 1.5 var(--font-serif); }
.chat-empty__more { margin-top: 18px; color: rgb(var(--c-soft)); font-size: var(--fs-small); line-height: 1.5; }
.chat-empty__more .btn { margin-left: 4px; }
.chat-privacy { margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--line); width: 100%; color: rgb(var(--c-muted)); font-size: var(--fs-xs); line-height: 1.5; }
.linkbtn { display: inline; min-height: 0; padding: 0; background: none; border: 0; color: rgb(var(--c-soft)); font: inherit; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; }
.linkbtn:hover { color: rgb(var(--c-text)); }
@media (pointer: coarse) { .linkbtn { padding-block: 12px; } }

/* ------------------------------------------------------------------ */
/* Móvil                                                               */
/* ------------------------------------------------------------------ */
@media (max-width: 899.98px) {
  .chat-head { padding: 6px 4px; }
  .chat-title { font-size: 1.0625rem; }
  .chat-head .btn-label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .chat-head .chat-cfgbtn { width: var(--tap); min-width: var(--tap); padding: 0; }
  .chat-thread { padding: 20px 16px 16px; }
  .chat-unsaved { margin: 10px 16px 0; }
  .chat-notices { padding: 0 12px; }
  .chat-dock { padding: 6px 12px calc(10px + env(safe-area-inset-bottom, 0px)); }
  .composer__box .send { width: var(--tap); min-width: var(--tap); padding: 0; }
  .composer__box .send .btn-label { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
  .turn--user .body { padding: 12px 14px; }
  .acts { margin-left: -8px; }
  .acts__end { margin-left: 0; }
  .chat-scrollbtn { right: 16px; }
  .chat-panel .side__body { padding: 16px; }
  .chat-notices .notice { padding: 10px 12px; }
  .chat-notices .notice__actions { margin-top: 8px; }
}
@media (max-width: 599.98px) {
  .starters { grid-template-columns: minmax(0, 1fr); }
  .chat-empty.empty { padding-top: 8px; }
  .chat-empty .empty__title { font-size: 1.375rem; }
  .edit-box__hint { display: none; }
  .chat-unsaved { flex-wrap: wrap; }
  .chat-unsaved > .notice__body { flex: 1 1 calc(100% - 40px); }
  .chat-unsaved > .btn { margin-left: 28px; }
}

/* Hilo con tabindex itinerante: el turno activo recibe el foco con las flechas */
.turn:focus { outline: none; }
.turn:focus-visible { outline: 2px solid rgb(var(--c-coral)); outline-offset: 6px; border-radius: var(--r-sm); }
