/* ===================================================================== *
 *  UNIVERSA · Gestión de Prácticas — Hoja de estilos corporativa        *
 *  Color institucional UNIZAR (#223d71) + tipografía Myriad Pro.        *
 * ===================================================================== */

:root {
  --primary-color: #223d71;
  --primary-dark: #1a2f57;
  --primary-light: #e9eef7;
  --accent: #c8102e;            /* rojo institucional para acentos */
  --bg: #f5f6f9;
  --surface: #ffffff;
  --border: #e2e6ee;
  --text: #1f2733;
  --text-muted: #6b7280;
  --ok: #1e7e34;
  --ok-bg: #e4f3e8;
  --no-bg: #f1f1f4;
  --radius: 10px;
  --shadow-sm: 0 1px 2px rgba(0,0,0,.05);
  --shadow-md: 0 4px 12px rgba(0,0,0,.08);
  --sidebar-w: 250px;
  --header-h: 84px;
  --footer-h: 64px;             /* hueco que reserva el pie fijo (dos líneas), como en Ágora */
}

/* ---- Fuentes ---- */
@font-face { font-family:'Myriad Pro'; src:url("/static/fonts/MyriadPro-Regular.d75d7f70aa16.otf") format('opentype'); font-weight:normal; }
@font-face { font-family:'Myriad Pro'; src:url("/static/fonts/MyriadPro-Semibold.86bb1295004f.otf") format('opentype'); font-weight:600; }
@font-face { font-family:'Myriad Pro'; src:url("/static/fonts/MyriadPro-Bold.bfc84fcb6a1c.otf") format('opentype'); font-weight:bold; }

* { box-sizing: border-box; }
html, body { margin:0; padding:0; }
/* El color de fondo va en <html> para que la marca de agua (#unizar-logo,
   z-index:-1) sea visible por detrás del contenido. */
html { background: var(--bg); }
body {
  font-family:'Myriad Pro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
  background: transparent;
  color: var(--text);
  display: flex;
  flex-direction: column;
  min-height: 100vh;
  /* Reserva espacio para el pie fijo (2 líneas) para que no tape el contenido. */
  padding-bottom: var(--footer-h);
}

/* Ilustración corporativa de fondo (sello UNIZAR), fija en la esquina inferior
   derecha y presente en todas las páginas. */
#unizar-logo {
  position: fixed;
  bottom: 8px;            /* pegada al pie, sin hueco (el footer la solapa por z-index) */
  right: 0;
  width: 600px;
  height: auto;
  z-index: -1;
  opacity: 0.30;
  pointer-events: none;
  user-select: none;
}
a { color: var(--primary-color); text-decoration: none; }
a:hover { text-decoration: underline; }

/* ===================== Cabecera ===================== */
/* La cabecera es estática: hace scroll con la página (no se queda fija). */
.cabecera {
  height: var(--header-h);
  background: var(--surface);
  border-bottom: 1px solid var(--border);
  display: flex;
  align-items: center;
  padding: 0 24px;
  gap: 18px;
  position: relative;
  z-index: 30;
}
.logo-container img { max-height: 64px; width: auto; display: block; }
.title-container h1 {
  margin: 0; color: var(--primary-color);
  font-size: 1.9rem; font-weight: bold; letter-spacing: .5px;
}
.title-container .subtitulo { margin: 0; color: var(--text-muted); font-size: .85rem; }
.header-actions { margin-left: auto; }
.user-box { display: flex; align-items: center; gap: 14px; }
.user-name { display: flex; align-items: center; gap: 7px; font-size: .9rem; color: var(--text); font-weight: 600; }
.user-name svg { color: var(--primary-color); }
.logout-btn {
  display: flex; align-items: center; gap: 7px; padding: 7px 14px;
  border: 1px solid var(--border); background: var(--surface); border-radius: 8px;
  color: var(--primary-color); font-family: inherit; font-size: .85rem; font-weight: 600;
  cursor: pointer; transition: background .15s ease;
}
.logout-btn:hover { background: var(--primary-light); }

/* botón hamburguesa (móvil) */
.menu-toggle { display:none; flex-direction:column; gap:4px; background:none; border:none; cursor:pointer; padding:6px; }
.menu-toggle span { width:22px; height:2px; background:var(--primary-color); border-radius:2px; }

/* ===================== Layout ===================== */
.layout { flex: 1 0 auto; display: flex; align-items: stretch; }

.sidebar {
  width: var(--sidebar-w);
  flex-shrink: 0;
  background: var(--surface);
  border-right: 1px solid var(--border);
}
/* El contenido del menú se mantiene pegado arriba (sticky) sin forzar la altura
   del layout: así no aparece scroll vertical innecesario en páginas cortas. */
.sidebar-inner {
  position: sticky;
  top: 0;
  padding: 18px 12px;
  max-height: 100vh;
  overflow-y: auto;
}
.nav-grupo {
  font-size: .72rem; text-transform: uppercase; letter-spacing: .8px;
  color: var(--text-muted); margin: 16px 12px 6px;
}
.nav-item {
  display: flex; align-items: center; gap: 10px;
  padding: 9px 12px; border-radius: 8px;
  color: var(--text); font-size: .92rem;
  transition: background .15s ease, color .15s ease;
}
.nav-item:hover { background: var(--primary-light); text-decoration: none; }
.nav-item.activo { background: var(--primary-color); color: #fff; }
.nav-item.activo .icono { color: #fff; }
.nav-item .icono { color: var(--primary-color); flex-shrink: 0; }
.nav-item.activo .icono { color: #fff; }

.contenido { flex: 1 1 auto; padding: 28px 32px; min-width: 0; }

/* --- Colapsar / expandir la barra lateral --- */
.sidebar { transition: width .2s ease; }
.sidebar-toggle {
  display: flex; align-items: center; justify-content: center;
  width: 32px; height: 32px; margin: 0 0 10px auto;
  border: 1px solid var(--border); background: var(--surface); border-radius: 8px;
  color: var(--primary-color); cursor: pointer; transition: background .15s ease;
}
.sidebar-toggle:hover { background: var(--primary-light); }
.sidebar-toggle .icono { transition: transform .2s ease; }
html.sidebar-colapsada .sidebar { width: 68px; }
html.sidebar-colapsada .sidebar-inner { padding-left: 10px; padding-right: 10px; }
html.sidebar-colapsada .nav-grupo { display: none; }
html.sidebar-colapsada .nav-item { justify-content: center; padding-left: 0; padding-right: 0; }
html.sidebar-colapsada .nav-item span { display: none; }
html.sidebar-colapsada .sidebar-toggle { margin: 0 auto 10px; }
html.sidebar-colapsada .sidebar-toggle .icono { transform: rotate(180deg); }

/* ===================== Pie ===================== */
/* El pie es fijo: siempre visible en la parte inferior de la ventana. */
/* Mismas medidas que el pie de Ágora, para que las dos aplicaciones del
   vicerrectorado se sirvan igual. */
.pie {
  background: var(--primary-color); color: #fff;
  text-align: center; padding: 12px 0;
  position: fixed; left: 0; bottom: 0; width: 100%;
  z-index: 1000;
  /* Texto claro sobre fondo oscuro: sin esto macOS lo engorda y el pie se ve
     más pesado que el de Ágora, que lleva el suavizado en el <body>. */
  -webkit-font-smoothing: antialiased;
}
.pie-contenido { max-width: 1200px; margin: 0 auto; padding: 0 20px; }
.pie p { margin: 0 0 3px; }
.pie p:last-child { margin-bottom: 0; }
.pie-principal { font-size: 0.8em; }
.pie-linea { font-size: 0.7em; }
/* La universidad y el contacto van en la misma línea; el guion es adorno, así
   que se dibuja aquí y no en el texto, con su aire a los dos lados. */
.pie-separador { padding: 0 0.5em; }
.pie a { color: #fff; text-decoration: underline; }
.pie a:hover { text-decoration: none; }

/* ===================== Tipografía de página ===================== */
.page-head { display:flex; align-items:center; justify-content:space-between; gap:16px; margin-bottom:22px; flex-wrap:wrap; }
.page-head h2 { margin:0; color:var(--primary-color); font-size:1.6rem; display:flex; align-items:center; gap:10px; }
.breadcrumb { font-size:.85rem; color:var(--text-muted); margin-bottom:6px; }
.breadcrumb a { color:var(--text-muted); }

/* ===================== Botones ===================== */
.btn {
  display:inline-flex; align-items:center; gap:7px;
  padding:9px 16px; border-radius:8px; border:1px solid transparent;
  font-size:.9rem; font-weight:600; cursor:pointer; transition:all .18s ease;
  font-family:inherit;
}
.btn:hover { text-decoration:none; transform: translateY(-1px); }
.btn-primary { background:var(--primary-color); color:#fff; }
.btn-primary:hover { background:var(--primary-dark); color:#fff; }
.btn-secondary { background:var(--surface); color:var(--primary-color); border-color:var(--border); }
.btn-secondary:hover { background:var(--primary-light); }
.btn-danger { background:var(--accent); color:#fff; }
.btn-danger:hover { background:#a50d26; color:#fff; }
.btn-sm { padding:5px 10px; font-size:.82rem; }

/* ===================== Tarjetas / KPIs ===================== */
.card {
  background:var(--surface); border:1px solid var(--border);
  border-radius:var(--radius); box-shadow:var(--shadow-sm);
}
.card-pad { padding:22px; }

.kpi-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(190px,1fr)); gap:16px; margin-bottom:28px; }
.kpi {
  background:var(--surface); border:1px solid var(--border); border-radius:var(--radius);
  padding:18px 20px; box-shadow:var(--shadow-sm); display:flex; align-items:flex-start; gap:14px;
  transition:box-shadow .18s ease, transform .18s ease;
}
.kpi:hover { box-shadow:var(--shadow-md); transform:translateY(-2px); text-decoration:none; }
.kpi-icono {
  width:46px; height:46px; flex-shrink:0; border-radius:10px;
  background:var(--primary-light); color:var(--primary-color);
  display:flex; align-items:center; justify-content:center;
}
.kpi-valor { font-size:1.7rem; font-weight:bold; color:var(--primary-color); line-height:1; }
/* El icono (46px) mide justo lo mismo que el valor + una línea de etiqueta,
   así queda centrado con el texto; si la etiqueta necesita más líneas crecen
   hacia abajo y el número se mantiene a la misma altura en todas las tarjetas. */
.kpi-label { font-size:.82rem; color:var(--text-muted); margin-top:3px; line-height:1.25; }

.grid-2 { display:grid; grid-template-columns:2fr 1fr; gap:20px; align-items:start; }

/* Paneles del dashboard (cabecera + cuerpo, marco homogéneo y top alineado) */
.panel { background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); box-shadow:var(--shadow-sm); overflow:hidden; }
.panel-head { padding:12px 18px; font-size:1rem; font-weight:bold; color:var(--primary-color); background:var(--primary-light); border-bottom:1px solid var(--border); }
.panel-body { padding:8px 18px 14px; }
.panel .dataTables_wrapper { padding:14px 16px 6px; }

/* --- Vista a pantalla completa (panel de control) ---
   La página no hace scroll: el contenido se reparte en el alto disponible y,
   si algún bloque no cabe, el scroll queda dentro de su propio panel. */
body.pagina-sin-scroll { height:100vh; overflow:hidden; }
body.pagina-sin-scroll .layout { flex:1 1 auto; min-height:0; }
body.pagina-sin-scroll .contenido { display:flex; flex-direction:column; min-height:0; overflow:hidden; }
.dashboard { flex:1 1 auto; min-height:0; display:flex; flex-direction:column; gap:18px; }
.dashboard .page-head { margin-bottom:0; }
/* KPIs más estrechos para que quepan en una sola fila (auto-fit: sin fijar
   cuántos son, las columnas sobrantes se colapsan). */
.dashboard .kpi-grid {
  flex:0 0 auto; margin-bottom:0; gap:14px;
  grid-template-columns:repeat(auto-fit, minmax(150px,1fr));
}
.dashboard .kpi { padding:14px 16px; gap:12px; }
.dashboard .grid-2 { flex:1 1 auto; min-height:0; align-items:stretch; }
.dashboard .panel { display:flex; flex-direction:column; min-height:0; }
.dashboard .panel-body,
.dashboard .panel .dataTables_wrapper { flex:1 1 auto; min-height:0; overflow:auto; }
/* En pantallas pequeñas o muy bajas se recupera el scroll normal de página. */
@media (max-width:900px), (max-height:620px) {
  body.pagina-sin-scroll { height:auto; overflow:visible; }
  body.pagina-sin-scroll .contenido { display:block; overflow:visible; }
  .dashboard .panel-body,
  .dashboard .panel .dataTables_wrapper { overflow:visible; }
}

/* ===================== Tablas ===================== */
.tabla-wrap { background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); overflow:hidden; box-shadow:var(--shadow-sm); }
table.tabla { width:100%; border-collapse:collapse; font-size:.9rem; }
table.tabla thead th {
  background:var(--primary-light); color:var(--primary-color);
  text-align:left; padding:11px 14px; font-weight:600; white-space:nowrap;
  border-bottom:1px solid var(--border);
}
table.tabla tbody td { padding:10px 14px; border-bottom:1px solid var(--border); }
table.tabla tbody tr { transition:background .12s ease; }
table.tabla tbody tr:hover { background:#fafbfd; }
table.tabla tbody tr:last-child td { border-bottom:none; }
.tabla-acciones { display:flex; gap:6px; justify-content:flex-end; }
.icon-btn {
  display:inline-flex; align-items:center; justify-content:center;
  width:30px; height:30px; border-radius:7px; color:var(--primary-color);
  border:1px solid var(--border); background:var(--surface); cursor:pointer; transition:all .15s ease;
}
.icon-btn:hover { background:var(--primary-light); text-decoration:none; }
.icon-btn.danger { color:var(--accent); }
.icon-btn.danger:hover { background:#fdecef; }

.vacio { text-align:center; padding:48px 20px; color:var(--text-muted); }

/* ===================== Empty states (placeholders sin datos) ============== */
td.dataTables_empty { padding:0 !important; }
.empty-state {
  display:flex; flex-direction:column; align-items:center; gap:10px;
  padding:48px 20px; text-align:center; color:var(--text-muted);
}
.empty-icono {
  width:72px; height:72px; border-radius:50%; flex-shrink:0;
  background:var(--primary-light); color:var(--primary-color);
  display:flex; align-items:center; justify-content:center;
}
.empty-state h3 { margin:6px 0 0; color:var(--text); font-size:1.05rem; }
.empty-state p { margin:0; font-size:.9rem; }
.empty-state .btn { margin-top:6px; }
.empty-state.empty-sm { padding:30px 16px; }
.empty-state.empty-sm .empty-icono { width:54px; height:54px; }
.dt-sinresultados { padding:38px 20px; text-align:center; color:var(--text-muted); font-size:.92rem; }

/* ===================== DataTables (estética corporativa, estilo UEZ) ===== */
/* La tabla DataTables se envuelve en .tabla-wrap para mantener el marco. */
.tabla-wrap .dataTables_wrapper { padding:14px 16px 6px; font-family:inherit; }

/* Controles superiores: "Mostrar N registros" y "Buscar" */
.dataTables_length, .dataTables_filter { margin-bottom:12px; }
.dataTables_length label, .dataTables_filter label { font-size:.86rem; color:var(--text-muted); display:flex; align-items:center; gap:8px; }
/* El <select> nativo solo se ve como respaldo si pickers.js no ha cargado. */
.dataTables_length select:not(.cs-native),
.dataTables_filter input {
  border:1px solid var(--border) !important; border-radius:8px !important;
  padding:7px 12px !important; background:var(--surface) !important;
  font-size:.88rem !important; color:var(--text) !important; outline:none !important;
  font-family:inherit !important; transition:border-color .15s ease, box-shadow .15s ease !important;
}
.dataTables_filter input { min-width:240px; }
.dataTables_length select:not(.cs-native):focus,
.dataTables_filter input:focus {
  border-color:var(--primary-color) !important;
  box-shadow:0 0 0 3px rgba(34,61,113,.12) !important;
}

/* Select personalizado (pickers.js) aplicado al "Mostrar N registros":
   versión compacta del widget de los formularios. */
.dataTables_length .cs-wrap { width:auto; min-width:104px; }
.dataTables_length .cs-trigger { min-height:34px; padding:6px 10px; font-size:.86rem; }
.dataTables_length .cs-menu { min-width:100%; }
.dataTables_length .cs-option { padding:8px 12px; font-size:.86rem; }
/* Los contenedores del listado recortan el desbordamiento (overflow:hidden), así
   que el panel se despliega siempre hacia abajo, donde queda la tabla. */
.dataTables_length .cs-wrap.drop-up .cs-menu { top:calc(100% + 4px); bottom:auto; }

/* Cabecera de la tabla con el azul corporativo claro */
table.dataTable { width:100% !important; border-collapse:collapse; font-size:.9rem; margin:0 !important; }
table.dataTable thead th {
  background:var(--primary-light) !important; color:var(--primary-color) !important;
  text-align:left; padding:11px 14px !important; font-weight:600;
  border-bottom:1px solid var(--border) !important;
}
/* Alineación por columna: cabeceras (data-align) y celdas (.col-* de DataTables) */
table.dataTable thead th[data-align="center"] { text-align:center; }
table.dataTable thead th[data-align="right"] { text-align:right; }
table.dataTable td.col-center { text-align:center !important; }
table.dataTable td.col-right { text-align:right !important; }
table.dataTable td.col-center .tabla-acciones { justify-content:center; }
table.dataTable tbody td { padding:10px 14px; border-bottom:1px solid var(--border); }
table.dataTable tbody tr { transition:background .12s ease; }
table.dataTable tbody tr:hover { background:#fafbfd; }
table.dataTable.no-footer { border-bottom:1px solid var(--border) !important; }
/* Quita el subrayado naranja por defecto de la columna ordenada */
table.dataTable thead .sorting:before, table.dataTable thead .sorting:after,
table.dataTable thead .sorting_asc:after, table.dataTable thead .sorting_desc:after { opacity:.4; }
/* Hueco para las flechas de ordenación: DataTables las coloca en absoluto contra
   el borde derecho del <th> y reserva el sitio con un padding-right propio, que
   el padding de arriba (con !important) estaba pisando. Sin ese hueco las
   flechas se montan sobre el texto de la cabecera (p. ej. «Estado»). */
table.dataTable thead > tr > th.sorting,
table.dataTable thead > tr > th.sorting_asc,
table.dataTable thead > tr > th.sorting_desc { padding-right:30px !important; }
/* En las columnas centradas se compensa por la izquierda: si no, el texto queda
   descentrado justo lo que ocupa la flecha. */
table.dataTable thead > tr > th[data-align="center"].sorting,
table.dataTable thead > tr > th[data-align="center"].sorting_asc,
table.dataTable thead > tr > th[data-align="center"].sorting_desc { padding-left:30px !important; }

/* Información (1 a N de M) */
.dataTables_info { color:var(--text-muted) !important; font-size:.82rem !important; padding-top:14px !important; }

/* Paginación */
.dataTables_paginate { padding-top:12px !important; }
.dataTables_paginate .paginate_button {
  border-radius:7px !important; border:1px solid var(--border) !important;
  background:var(--surface) !important; margin-left:4px !important;
  font-size:.85rem !important; font-weight:600 !important; padding:6px 13px !important;
  color:var(--text) !important; transition:all .15s ease !important;
}
.dataTables_paginate .paginate_button.current,
.dataTables_wrapper .dataTables_paginate .paginate_button.current {
  background:var(--primary-color) !important; color:#fff !important; border-color:var(--primary-color) !important;
}
.dataTables_paginate .paginate_button:hover {
  background:var(--primary-light) !important; color:var(--primary-color) !important; border-color:#cbd5e1 !important;
}
.dataTables_paginate .paginate_button.disabled,
.dataTables_paginate .paginate_button.disabled:hover {
  background:var(--bg) !important; color:#9aa3b2 !important; border-color:var(--border) !important; cursor:default !important;
}

/* ===================== Roles y panel de administración ===================== */
/* Acceso al panel de usuarios (solo administradores) */
.panel-btn {
  display:flex; align-items:center; gap:7px; padding:7px 14px;
  border:1px solid var(--border); background:var(--surface); border-radius:8px;
  color:var(--primary-color); font-size:.85rem; font-weight:600; transition:all .15s ease;
}
.panel-btn:hover { background:var(--primary-light); text-decoration:none; }
.badge.rol-admin { background:var(--primary-light); color:var(--primary-color); }
.badge.rol-usuario { background:var(--no-bg); color:var(--text-muted); }
/* Acción no disponible (p. ej. eliminarse a uno mismo) */
.icon-btn.desactivado { color:#c3c8d2; background:var(--bg); cursor:not-allowed; }
/* Formulario a una sola columna (alta/edición de usuario) */
.form-grid-1 { grid-template-columns:1fr; }
/* Sin rejilla de dos columnas, la casilla no necesita alinearse con nada. */
.form-grid-1 .campo.form-check { padding-top:4px; }

/* Pantallas de una sola tarjeta (usuarios, confirmaciones): la columna se
   centra en el área de contenido en lugar de quedar pegada a la izquierda. */
.pagina-estrecha { max-width:560px; margin:0 auto; }

/* ===================== Modal de confirmación ===================== */
.modal-overlay {
  /* Por encima del pie fijo (z-index:1000), que si no taparía el modal. */
  position:fixed; inset:0; z-index:1100; display:flex; align-items:center; justify-content:center;
  padding:20px; background:rgba(15,23,42,.45); backdrop-filter:blur(2px);
  animation:modal-fade .16s ease;
}
.modal-overlay[hidden] { display:none; }
body.modal-abierto { overflow:hidden; }
.modal {
  background:var(--surface); border-radius:14px; box-shadow:0 18px 48px rgba(15,23,42,.28);
  width:100%; max-width:430px; padding:26px 26px 20px; text-align:center;
  animation:modal-in .18s ease;
}
.modal-icono {
  display:inline-flex; align-items:center; justify-content:center; width:56px; height:56px;
  border-radius:50%; background:#fdecef; color:var(--accent); margin-bottom:14px;
}
.modal h3 { margin:0 0 8px; font-size:1.12rem; color:var(--text); }
.modal p { margin:0; font-size:.92rem; color:var(--text-muted); line-height:1.5; }
.modal p strong { color:var(--text); }
.modal-acciones { display:flex; gap:10px; justify-content:center; margin-top:22px; }
@keyframes modal-fade { from { opacity:0; } to { opacity:1; } }
@keyframes modal-in { from { opacity:0; transform:translateY(-10px) scale(.97); } to { opacity:1; transform:none; } }

/* ===================== Badges ===================== */
.badge { display:inline-block; padding:2px 10px; border-radius:999px; font-size:.78rem; font-weight:600; }
.badge-si { background:var(--ok-bg); color:var(--ok); }
.badge.tipo-est { background:var(--primary-light); color:var(--primary-color); }
.badge.tipo-tit { background:#fff3cd; color:#8a5a00; }
.badge.tipo-int { background:#e0f2f1; color:#00695c; }

/* Chips de filtro rápido (encima de los listados) */
.filtros-chips { display:flex; gap:8px; margin-bottom:14px; flex-wrap:wrap; }
.chip {
  padding:6px 15px; border-radius:999px; border:1px solid var(--border);
  background:var(--surface); color:var(--text); font-size:.85rem; font-weight:600;
  transition:background .15s ease, color .15s ease;
}
.chip:hover { background:var(--primary-light); text-decoration:none; }
.chip.activo { background:var(--primary-color); color:#fff; border-color:var(--primary-color); }
.badge-no { background:var(--no-bg); color:var(--text-muted); }
.text-muted { color:var(--text-muted); }

/* ===================== Barra de herramientas / búsqueda ===================== */
.toolbar { display:flex; gap:12px; align-items:center; justify-content:space-between; margin-bottom:16px; flex-wrap:wrap; }
.buscador { display:flex; align-items:center; gap:8px; background:var(--surface); border:1px solid var(--border); border-radius:8px; padding:6px 12px; min-width:280px; }
.buscador input { border:none; outline:none; font-family:inherit; font-size:.9rem; width:100%; background:transparent; }
.buscador .icono { color:var(--text-muted); }
.contador { font-size:.85rem; color:var(--text-muted); }

/* ===================== Paginación ===================== */
.paginacion { display:flex; gap:6px; align-items:center; justify-content:center; margin-top:20px; }
.paginacion a, .paginacion span {
  padding:6px 12px; border-radius:7px; border:1px solid var(--border);
  background:var(--surface); color:var(--text); font-size:.88rem;
}
.paginacion a:hover { background:var(--primary-light); text-decoration:none; }
.paginacion .actual { background:var(--primary-color); color:#fff; border-color:var(--primary-color); }

/* ===================== Fichas de detalle ===================== */
.ficha-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(320px,1fr)); gap:18px; }
.ficha-bloque { background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); box-shadow:var(--shadow-sm); overflow:hidden; }
.ficha-bloque h3 { margin:0; padding:12px 18px; font-size:.95rem; color:var(--primary-color); background:var(--primary-light); border-bottom:1px solid var(--border); }
.ficha-bloque dl { margin:0; padding:8px 18px 14px; }
.ficha-fila { display:grid; grid-template-columns:46% 54%; gap:8px; padding:6px 0; border-bottom:1px dashed var(--border); }
.ficha-fila:last-child { border-bottom:none; }
.ficha-fila dt { color:var(--text-muted); font-size:.86rem; }
.ficha-fila dd { margin:0; font-size:.9rem; word-break:break-word; }

/* Claves foráneas de la ficha: llevan a la ficha de la entidad relacionada.
   Se subrayan con un trazo tenue para que se distingan del texto sin gritar,
   igual que los enlaces de las tablas. */
.enlace-ficha { color:var(--primary-color); text-decoration:underline; text-decoration-color:var(--border); text-underline-offset:3px; }
.enlace-ficha:hover { text-decoration-color:currentColor; }

/* Fichas que llegaron del Access sin nombre (ver main/incompletos.py). Se marcan
   en ámbar, no en rojo: no son un error del sistema, son datos que faltan y hay
   que ir a completar. El punto de delante las hace localizables de un vistazo en
   una columna larga sin depender solo del color. */
.dato-incompleto {
  display:inline-flex; align-items:center; gap:7px;
  color:#8a5a00; font-style:italic;
}
.dato-incompleto::before {
  content:""; flex:0 0 auto; width:7px; height:7px; border-radius:50%;
  background:#e0a106; box-shadow:0 0 0 3px rgba(224,161,6,.18);
}

/* Tablas de lo que cuelga de una ficha (las prácticas de un alumno, los tutores
   de una empresa). Se separan del bloque de datos para que se lean como otra
   cosa, no como una sección más de la ficha. */
.panel-relacionado { margin-top:22px; }
.panel-relacionado .tabla-wrap { border:none; border-radius:0; box-shadow:none; }

/* ===================== Formularios ===================== */
.form-card { background:var(--surface); border:1px solid var(--border); border-radius:var(--radius); box-shadow:var(--shadow-sm); padding:26px 28px; }
/* Secciones del formulario (fieldsets con cabecera) */
.form-seccion {
  background:var(--surface); border:1px solid var(--border); border-radius:var(--radius);
  box-shadow:var(--shadow-sm); padding:10px 22px 22px; margin:0 0 18px;
}
.form-seccion legend {
  color:var(--primary-color); font-weight:bold; font-size:1.02rem;
  padding:0 10px; margin-left:-10px;
}
.form-grid { display:grid; grid-template-columns:repeat(auto-fill, minmax(280px,1fr)); gap:16px 22px; align-items:start; }
.campo { display:flex; flex-direction:column; gap:5px; }
.campo.ancho-total { grid-column:1 / -1; }
.campo label { font-size:.85rem; font-weight:600; color:var(--text); }
.campo .ayuda { font-size:.78rem; color:var(--text-muted); }
.campo .error { font-size:.8rem; color:var(--accent); }
.form-control, .form-select {
  padding:9px 12px; border:1px solid var(--border); border-radius:8px;
  font-size:.92rem; font-family:inherit; background:var(--surface); color:var(--text);
  transition:border-color .15s ease, box-shadow .15s ease; width:100%;
}
.form-control:focus, .form-select:focus { outline:none; border-color:var(--primary-color); box-shadow:0 0 0 3px rgba(34,61,113,.12); }
textarea.form-control { resize:vertical; }
.form-check { display:flex; align-items:center; gap:9px; }
.campo.form-check { flex-direction:row; align-items:center; padding-top:24px; }
/* El aspecto de la casilla está en pickers.css (control totalmente propio). */
.form-check label { font-weight:500; }
.form-actions { display:flex; gap:10px; margin-top:22px; padding-top:18px; border-top:1px solid var(--border); }

/* checkbox múltiple (ODS) */
ul#id_ods { list-style:none; margin:0; padding:0; display:grid; grid-template-columns:repeat(auto-fill,minmax(260px,1fr)); gap:8px 18px; }
ul#id_ods li { margin:0; }
ul#id_ods li label { display:flex; align-items:center; gap:8px; font-weight:500; font-size:.9rem; cursor:pointer; }
ul#id_ods input[type="checkbox"] { width:18px; height:18px; accent-color:var(--primary-color); cursor:pointer; flex-shrink:0; }

/* ===================== Alertas ===================== */
.mensajes { margin-bottom:18px; display:flex; flex-direction:column; gap:8px; }
.alerta { padding:11px 16px; border-radius:8px; font-size:.9rem; border:1px solid transparent; }
.alerta-success { background:var(--ok-bg); color:var(--ok); border-color:#bfe3c9; }
.alerta-error, .alerta-danger { background:#fdecef; color:var(--accent); border-color:#f4c7cf; }
.alerta-info { background:var(--primary-light); color:var(--primary-dark); border-color:#cdd9ee; }
.alerta-warning { background:#fff6e5; color:#8a5a00; border-color:#ffe1a8; }

.icono { display:inline-block; vertical-align:middle; }

/* ===================== Responsive ===================== */
@media (max-width: 900px) {
  .grid-2 { grid-template-columns:1fr; }
}
@media (max-width: 768px) {
  .menu-toggle { display:flex; }
  .sidebar-toggle { display:none; }   /* en móvil el menú es un overlay, no se colapsa */
  .title-container h1 { font-size:1.4rem; }
  .logo-container img { max-height:48px; }
  .sidebar {
    position:fixed; left:0; top:var(--header-h); z-index:25;
    height:calc(100vh - var(--header-h));
    transform:translateX(-100%); transition:transform .22s ease;
    box-shadow:var(--shadow-md);
  }
  body.menu-abierto .sidebar { transform:translateX(0); }
  /* En móvil el estado "colapsado" no aplica: la sidebar mantiene su ancho completo */
  html.sidebar-colapsada .sidebar { width:var(--sidebar-w); padding:18px 12px; }
  html.sidebar-colapsada .nav-grupo { display:block; }
  html.sidebar-colapsada .nav-item { justify-content:flex-start; padding:9px 12px; }
  html.sidebar-colapsada .nav-item span { display:inline; }
  .contenido { padding:20px 16px; }
  #unizar-logo { width:340px; bottom:8px; opacity:0.22; }
}

@media (prefers-reduced-motion: reduce) {
  * { transition:none !important; }
}
