/* PatrimonIA — info popovers (escala riesgo / ética).
 * CSS aislado para evitar overrides de Tailwind/DaisyUI sobre [popover].
 * Compatible con CSP estricto: cero JS, solo HTML5 Popover API + estos estilos.
 */

[popover].patrimonia-popover {
  position: fixed;
  inset: 0;
  margin: auto;
  width: min(540px, calc(100vw - 32px));
  max-height: calc(100vh - 64px);
  padding: 0;
  border: 1px solid #1f2937;
  border-radius: 14px;
  background: #0f172a;
  color: #e2e8f0;
  box-shadow: 0 30px 80px -20px rgba(0, 0, 0, 0.7),
              0 8px 24px -8px rgba(0, 0, 0, 0.5);
  overflow: hidden;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
}

[popover].patrimonia-popover::backdrop {
  background: rgba(0, 0, 0, 0.55);
  backdrop-filter: blur(2px);
}

.patrimonia-popover .popover-header {
  padding: 18px 22px 14px;
  border-bottom: 1px solid #1e293b;
  background: linear-gradient(180deg, #111827 0%, #0f172a 100%);
}

.patrimonia-popover .popover-header h3 {
  margin: 0 0 6px 0;
  font-size: 16px;
  font-weight: 600;
  color: #f1f5f9;
  display: flex;
  align-items: center;
  gap: 10px;
}

.patrimonia-popover .popover-range {
  display: inline-block;
  padding: 2px 8px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.05em;
  background: #1e293b;
  color: #fbbf24;
  border-radius: 6px;
}

.patrimonia-popover .popover-header p {
  margin: 0;
  font-size: 12px;
  line-height: 1.5;
  color: #94a3b8;
}

.patrimonia-popover .popover-list {
  list-style: none;
  margin: 0;
  padding: 8px 0;
  max-height: 60vh;
  overflow-y: auto;
}

.patrimonia-popover .popover-list li {
  display: flex;
  align-items: flex-start;
  gap: 14px;
  padding: 10px 22px;
  border-bottom: 1px solid #1e293b;
}

.patrimonia-popover .popover-list li:last-child {
  border-bottom: none;
}

.patrimonia-popover .popover-bullet {
  flex: 0 0 32px;
  width: 32px;
  height: 32px;
  border-radius: 50% !important;
  display: flex !important;
  align-items: center;
  justify-content: center;
  font-weight: 700;
  font-size: 13px;
  color: #1f2937 !important;
  font-family: 'JetBrains Mono', ui-monospace, monospace;
  border: 1px solid rgba(0, 0, 0, 0.15);
  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
  /* Color por nivel inyectado vía CSS variable inline, ej:
   * <span class="popover-bullet" style="--bullet-bg:#86efac;">1</span>
   * !important porque DaisyUI/Tailwind reset tiene mayor especificidad
   * que estilos inline simples (probablemente :where() de DaisyUI). */
  background-color: var(--bullet-bg, #475569) !important;
}

.patrimonia-popover .popover-text {
  display: flex;
  flex-direction: column;
  gap: 3px;
  flex: 1;
  min-width: 0;
}

.patrimonia-popover .popover-text strong {
  font-size: 13px;
  font-weight: 600;
  color: #f1f5f9;
}

.patrimonia-popover .popover-text span {
  font-size: 12px;
  line-height: 1.45;
  color: #94a3b8;
}

.patrimonia-popover .popover-foot {
  margin: 0;
  padding: 12px 22px 16px;
  font-size: 11px;
  line-height: 1.5;
  color: #64748b;
  font-style: italic;
  background: #0a1120;
  border-top: 1px solid #1e293b;
}

/* Donut score overlay (riesgo / ética en el dashboard).
 * El score grande y el target van como overlay HTML centrado para
 * evitar que las labels nativas de ApexCharts se solapen con el target.
 */
.score-donut-wrap {
  position: relative;
  width: 100%;
  min-height: 280px;
}

.score-donut-chart {
  position: relative;
  width: 100%;
  min-height: 280px;
}

.score-donut-overlay {
  position: absolute;
  top: 0;
  left: 0;
  right: 0;
  /* Anclado al centro vertical del donut (no del legend de abajo). */
  height: 220px;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  pointer-events: none;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
}

.score-donut-overlay .score-value {
  font-size: 28px;
  font-weight: 700;
  color: #f1f5f9;
  line-height: 1.1;
  letter-spacing: -0.02em;
}

.score-donut-overlay .score-target {
  margin-top: 4px;
  font-size: 11px;
  font-weight: 500;
  color: #fbbf24;
  letter-spacing: 0.02em;
}

.score-donut-overlay .score-target.no-target {
  color: #64748b;
  font-style: italic;
}

/* Tesis form: bordes visibles para textareas, inputs y selects.
 * En el dark theme los bordes por defecto son casi invisibles. Esto
 * los hace claramente delimitados sin perder la estética del producto.
 */
.tesis-form textarea,
.tesis-form input[type="text"],
.tesis-form input[type="number"],
.tesis-form input[type="date"],
.tesis-form select {
  background-color: #0f172a !important;
  color: #e2e8f0 !important;
  border: 1px solid #334155 !important;
  border-radius: 8px !important;
  padding: 8px 12px !important;
  font-size: 13px !important;
  width: 100%;
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}

.tesis-form textarea {
  min-height: 100px;
  resize: vertical;
  line-height: 1.5;
  font-family: 'Inter', system-ui, -apple-system, sans-serif;
}

.tesis-form textarea:focus,
.tesis-form input:focus,
.tesis-form select:focus {
  outline: none !important;
  border-color: #fbbf24 !important;
  box-shadow: 0 0 0 3px rgba(251, 191, 36, 0.15) !important;
}

.tesis-form textarea::placeholder,
.tesis-form input::placeholder {
  color: #64748b;
  opacity: 0.7;
}

.tesis-form .form-control {
  display: flex;
  flex-direction: column;
  gap: 4px;
}

.tesis-form .form-control .label {
  padding: 0;
  margin-bottom: 2px;
}

.tesis-form .form-control .label-text {
  font-size: 12px;
  font-weight: 500;
  color: #cbd5e1;
}

/* Snapshot list — popover de notas en hover (CSS-only).
   Reemplaza el DaisyUI tooltip-left/multiline que se cortaba arriba
   en filas cercanas al top del viewport cuando las notas eran largas. */
.snapshot-notas-popover {
  position: relative;
  display: inline-flex;
  align-items: center;
  cursor: help;
  outline: none;
}

.snapshot-notas-trigger {
  display: inline-block;
}

.snapshot-notas-popover .snapshot-notas-content {
  position: absolute;
  right: calc(100% + 6px);
  top: 0;
  width: 22rem;
  max-width: calc(100vw - 2rem);
  max-height: 60vh;
  overflow-y: auto;
  padding: 0.75rem 1rem;
  background: #1f2937;
  border: 1px solid rgba(255, 255, 255, 0.12);
  border-radius: 0.5rem;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.5);
  font-size: 0.8125rem;
  line-height: 1.45;
  color: #f5f5f7;
  white-space: normal;
  text-align: left;
  z-index: 50;
  /* Hidden by default; revealed on hover/focus. opacity + visibility para
     que la transición sea suave y el contenido no robe foco al inicio. */
  opacity: 0;
  visibility: hidden;
  transition: opacity 120ms ease, visibility 0s linear 120ms;
}

.snapshot-notas-popover:hover .snapshot-notas-content,
.snapshot-notas-popover:focus-within .snapshot-notas-content {
  opacity: 1;
  visibility: visible;
  transition: opacity 120ms ease;
}

/* Sidebar collapse — togglable en lg+ (mobile usa drawer-toggle nativo).
   Estado persistido en localStorage; clase aplicada en <html> antes del paint
   por un script inline en <head> para evitar flash.

   La transición anima `width` (0 → 16rem) en lugar de `display: none` para
   conseguir un slide suave. `overflow: hidden` evita que el contenido del
   sidebar se vea durante la animación cuando el ancho es pequeño. El botón
   "expand" entra con un fade discreto. */
.sidebar-expand-btn {
  display: none;
  opacity: 0;
  transition: opacity 200ms ease 200ms;
}

@media (min-width: 1024px) {
  .drawer-side {
    transition: width 200ms ease;
    overflow: hidden;
  }

  html.sidebar-collapsed .drawer-side,
  html.sidebar-collapsed .drawer-side > aside {
    width: 0 !important;
    min-width: 0;
  }

  html.sidebar-collapsed .sidebar-expand-btn {
    display: inline-flex;
    opacity: 1;
  }

  /* El botón flotante de expandir (fixed top-3 left-3, ~44px) tapaba el
     texto del breadcrumb. Con padding-left: 3.5rem el texto queda libre. */
  html.sidebar-collapsed .breadcrumbs-bar {
    padding-left: 3.5rem !important;
  }

}

/* Tesis wizard asistente IA — loading states.
   HTMX añade `.htmx-request` al elemento marcado con `hx-indicator` mientras
   la petición está en vuelo. Aprovechamos eso para alternar entre el
   contenido normal y el contenido "loading" sin JS adicional. */
.asistente-trigger .asistente-icon-loading,
.asistente-trigger .asistente-label-loading {
  display: none;
}

.asistente-trigger.htmx-request .asistente-icon-idle,
.asistente-trigger.htmx-request .asistente-label-idle {
  display: none;
}

.asistente-trigger.htmx-request .asistente-icon-loading,
.asistente-trigger.htmx-request .asistente-label-loading {
  display: inline-flex;
}

.asistente-form .asistente-loader {
  display: none;
}

.asistente-form.htmx-request .asistente-loader {
  display: inline-flex;
}

/* Mientras la petición está en vuelo, atenuamos el form para señalar
   que está desactivado (hx-disabled-elt ya bloquea la interacción). */
.asistente-form.htmx-request {
  opacity: 0.65;
  pointer-events: none;
}
