/**
 * Campus Latino Real — Componentes globales reutilizables.
 * Un mismo componente sirve para todas las pantallas; no se duplica por
 * módulo. Reutilizado responsablemente desde CAMPUS LATINO MOCK
 * (identidad visual únicamente — sin datos ni lógica simulada). Se
 * omiten deliberadamente los componentes fuera de alcance de
 * CAMPUS-REAL 1.0A (kanban, stepper de admisión, tarjetas de acceso
 * rápido de demostración, carga documental).
 */

/* ---- Botones ---- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-3xs);
  border: 1px solid transparent;
  border-radius: var(--radius-md);
  padding: 0.65rem 1.1rem;
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
  line-height: 1;
  transition: background var(--transition-base), border-color var(--transition-base), color var(--transition-base);
  min-height: 44px;
}
.btn:hover { text-decoration: none; }
.btn svg { width: 18px; height: 18px; flex-shrink: 0; }

.btn--primary { background: var(--color-blue); color: var(--color-text-on-blue); }
.btn--primary:hover { background: var(--color-blue-deep); }

.btn--accent { background: var(--color-green-deep); color: #fff; }
.btn--accent:hover { background: #3c6b13; }

.btn--outline { background: transparent; border-color: var(--color-border-strong); color: var(--color-text); }
.btn--outline:hover { border-color: var(--color-blue); color: var(--color-blue); }

.btn--ghost { background: transparent; color: var(--color-text-secondary); }
.btn--ghost:hover { background: var(--color-surface-muted); color: var(--color-text); }

.btn--danger { background: var(--color-danger); color: #fff; }
.btn--danger:hover { background: #8f1e18; }

.btn--sm { padding: 0.4rem 0.75rem; min-height: 36px; font-size: var(--font-size-xs); }
.btn--block { width: 100%; }
.btn:disabled { opacity: 0.5; cursor: not-allowed; }

.icon-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: var(--radius-md);
  border: 1px solid transparent;
  background: transparent;
  color: var(--color-text-secondary);
}
.icon-btn:hover { background: var(--color-surface-muted); color: var(--color-text); }
.icon-btn svg { width: 20px; height: 20px; }

/* ---- Tags / estados ---- */
.tag {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
  padding: 0.25rem 0.6rem;
  border-radius: var(--radius-pill);
  border: 1px solid transparent;
  white-space: nowrap;
}
.tag svg { width: 14px; height: 14px; }
.tag--neutral { background: var(--color-neutral-bg); color: var(--color-text-secondary); }
.tag--info { background: var(--color-info-bg); color: var(--color-info); }
.tag--success { background: var(--color-success-bg); color: var(--color-success); }
.tag--warning { background: var(--color-warning-bg); color: var(--color-warning); }
.tag--danger { background: var(--color-danger-bg); color: var(--color-danger); }
.tag--blue { background: var(--color-blue-soft); color: var(--color-blue); }
.tag--green { background: var(--color-green-soft); color: var(--color-green-deep); }
.tag--sm { font-size: 0.7rem; padding: 0.15rem 0.5rem; }

/* ---- Tarjetas ---- */
.card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
}
.card__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-sm);
  padding: var(--space-sm) var(--space-md);
  border-bottom: 1px solid var(--color-border);
}
.card__title { font-size: var(--font-size-md); font-weight: var(--font-weight-semibold); color: var(--color-text); }
.card__body { padding: var(--space-md); }
.card__header-actions { display: flex; align-items: center; gap: var(--space-2xs); flex-wrap: wrap; }

/* CAMPUS-REAL 1.0B.2C.1 — importación académica (preview) */
.link-button {
  background: none;
  border: none;
  padding: 0;
  font: inherit;
  color: var(--color-blue);
  cursor: pointer;
  text-align: left;
  text-decoration: underline;
}
.link-button:hover,
.link-button:focus-visible { color: var(--color-blue-deep); }
.import-file-row { display: flex; flex-direction: column; gap: var(--space-3xs); }
.import-validate-row { display: flex; align-items: center; gap: var(--space-xs); flex-wrap: wrap; margin-top: var(--space-sm); }
.card--pad-sm .card__body { padding: var(--space-sm); }
.card--flat { box-shadow: none; }

/* CAMPUS-REAL 1.0B.2C.1.2 — panel de revisión de fila */
.review-panel-summary { padding: var(--space-sm); border-radius: var(--radius-md); background: var(--color-surface-alt); }
.review-panel-summary p { margin: 0 0 var(--space-3xs); }
.review-panel-summary p:last-child { margin-bottom: 0; }
fieldset.review-panel-section {
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-md);
  padding: var(--space-sm);
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: var(--space-2xs);
}
fieldset.review-panel-section legend {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
  padding: 0 var(--space-2xs);
}
.field--inline { flex-direction: row; align-items: center; gap: var(--space-2xs); }
.field--inline input[type="radio"] { width: auto; }

/* ---- Estructura académica: ciclo → nivel → grado → grupos ---- */
.structure-level { display: flex; flex-direction: column; gap: var(--space-xs); }
.structure-level__title {
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--color-text-secondary);
}
.structure-level__grades { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: var(--space-sm); }
.structure-grade {
  background: var(--color-surface-alt);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-sm);
  display: flex;
  flex-direction: column;
  gap: var(--space-2xs);
}
.structure-grade__header { display: flex; align-items: center; justify-content: space-between; gap: var(--space-2xs); }
.structure-grade__name { font-weight: var(--font-weight-medium); }
.structure-grade__empty { font-size: var(--font-size-sm); margin: 0; }
.structure-grade__groups { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--space-2xs); }
.structure-group-item {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-2xs);
  font-size: var(--font-size-sm);
  padding: var(--space-3xs) 0;
}

/* Tarjeta de estado (métrica) */
.stat-card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: var(--space-sm) var(--space-md);
  display: flex;
  flex-direction: column;
  gap: var(--space-3xs);
}
.stat-card__label { font-size: var(--font-size-xs); color: var(--color-text-secondary); font-weight: var(--font-weight-medium); }
.stat-card__value { font-size: var(--font-size-2xl); font-weight: var(--font-weight-bold); color: var(--color-blue-deep); line-height: 1; }
.stat-card__meta { font-size: var(--font-size-xs); color: var(--color-text-muted); }
.stat-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: var(--space-sm); }
@media (max-width: 1279px) and (min-width: 900px) { .stat-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 899px) and (min-width: 640px) { .stat-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 639px) { .stat-grid { grid-template-columns: minmax(0, 1fr); } }

/* ---- Tablas ---- */
.data-table-wrap { overflow-x: auto; border: 1px solid var(--color-border); border-radius: var(--radius-lg); background: var(--color-surface); }
.data-table { width: 100%; min-width: 560px; }
.data-table th {
  text-align: left;
  font-size: var(--font-size-xs);
  text-transform: uppercase;
  letter-spacing: 0.03em;
  color: var(--color-text-muted);
  padding: var(--space-xs) var(--space-sm);
  background: var(--color-surface-alt);
  border-bottom: 1px solid var(--color-border);
  white-space: nowrap;
}
.data-table td { padding: var(--space-xs) var(--space-sm); border-bottom: 1px solid var(--color-border); font-size: var(--font-size-sm); vertical-align: middle; }
.data-table tr:last-child td { border-bottom: none; }
.data-table tr:hover td { background: var(--color-surface-alt); }

/* Tabla → tarjetas en móvil */
@media (max-width: 640px) {
  .data-table--cards thead { display: none; }
  .data-table--cards, .data-table--cards tbody, .data-table--cards tr, .data-table--cards td { display: block; width: 100%; }
  .data-table--cards tr { border: 1px solid var(--color-border); border-radius: var(--radius-md); margin-bottom: var(--space-sm); padding: var(--space-2xs) var(--space-sm); }
  .data-table--cards td { border-bottom: none; display: flex; justify-content: space-between; gap: var(--space-sm); padding: 0.4rem 0; }
  .data-table--cards td::before { content: attr(data-label); font-weight: var(--font-weight-semibold); color: var(--color-text-muted); font-size: var(--font-size-xs); }
}

/* ---- Filtros y buscador ---- */
.filter-bar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--space-2xs); margin-bottom: var(--space-sm); }
.filter-bar select,
.filter-bar input[type="search"] {
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-md);
  padding: 0.5rem 0.75rem;
  font-size: var(--font-size-sm);
  background: var(--color-surface);
  min-height: 40px;
}
.search-input { position: relative; flex: 1 1 220px; min-width: 180px; }
.search-input svg { position: absolute; left: 0.7rem; top: 50%; transform: translateY(-50%); width: 16px; height: 16px; color: var(--color-text-muted); }
.search-input input { width: 100%; padding-left: 2.2rem; }

/* ---- Paginación ---- */
.pagination { display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); padding: var(--space-sm); font-size: var(--font-size-xs); color: var(--color-text-secondary); flex-wrap: wrap; }
.pagination__pages { display: flex; gap: 0.3rem; }
.pagination__pages button { min-width: 32px; height: 32px; border-radius: var(--radius-sm); border: 1px solid var(--color-border); background: var(--color-surface); font-size: var(--font-size-xs); }
.pagination__pages button[aria-current="page"] { background: var(--color-blue); border-color: var(--color-blue); color: #fff; }

/* ---- Modal / Toast ---- */
.overlay-backdrop { position: fixed; inset: 0; background: rgba(10, 20, 40, 0.45); z-index: var(--z-modal); display: flex; align-items: center; justify-content: center; padding: var(--space-sm); }
.modal { background: var(--color-surface); border-radius: var(--radius-lg); box-shadow: var(--shadow-lg); width: min(560px, 100%); max-height: 88vh; display: flex; flex-direction: column; }
.modal__header { display: flex; align-items: center; justify-content: space-between; padding: var(--space-sm) var(--space-md); border-bottom: 1px solid var(--color-border); }
.modal__title { font-size: var(--font-size-md); font-weight: var(--font-weight-semibold); }
.modal__body { padding: var(--space-md); overflow-y: auto; }
.modal__footer { display: flex; justify-content: flex-end; gap: var(--space-2xs); padding: var(--space-sm) var(--space-md); border-top: 1px solid var(--color-border); }

.toast-region { position: fixed; bottom: var(--space-md); right: var(--space-md); display: flex; flex-direction: column; gap: var(--space-2xs); z-index: var(--z-toast); max-width: 340px; }
.toast { background: var(--color-blue-deep); color: #fff; border-radius: var(--radius-md); padding: var(--space-xs) var(--space-sm); font-size: var(--font-size-sm); box-shadow: var(--shadow-md); display: flex; align-items: flex-start; gap: var(--space-2xs); }
.toast--success { background: var(--color-success); }
.toast--warning { background: var(--color-warning); }
.toast--danger { background: var(--color-danger); }

/* ---- Alertas ---- */
.alert { display: flex; gap: var(--space-2xs); align-items: flex-start; padding: var(--space-xs) var(--space-sm); border-radius: var(--radius-md); border: 1px solid transparent; font-size: var(--font-size-sm); }
.alert svg { width: 20px; height: 20px; flex-shrink: 0; margin-top: 0.1rem; }
.alert--info { background: var(--color-info-bg); border-color: #c6d9f7; color: #123a70; }
.alert--success { background: var(--color-success-bg); border-color: #bfe5cb; color: #164a2a; }
.alert--warning { background: var(--color-warning-bg); border-color: #eeddb0; color: #5c4108; }
.alert--danger { background: var(--color-danger-bg); border-color: #eeccca; color: #6c1712; }

/* ---- Tabs ---- */
.tabs__list { display: flex; flex-wrap: wrap; gap: 0.2rem; border-bottom: 1px solid var(--color-border); margin-bottom: var(--space-md); overflow-x: auto; }
.tabs__tab { padding: 0.65rem 0.9rem; font-size: var(--font-size-sm); font-weight: var(--font-weight-medium); color: var(--color-text-secondary); border-bottom: 2px solid transparent; white-space: nowrap; }
.tabs__tab[aria-selected="true"] { color: var(--color-blue); border-color: var(--color-blue); font-weight: var(--font-weight-semibold); }

/* ---- Personas académicas (#/servicios-escolares/personas) ----
   El listado/tabla reutiliza .data-table + .data-table--cards (ya
   resuelve el degradado a tarjetas en móvil, ver arriba) y las
   etiquetas de estado reutilizan .tag--success/neutral/warning ya
   existentes. Lo único genuinamente nuevo: el contenedor de las
   pestañas fuera de una .card (necesita su propio padding lateral) y un
   modificador de .tag para "Acceso" — informativo, nunca un estado real
   ni un botón — visualmente distinto de un estado real para que no se
   confunda con Activo/Inactivo. */
.academic-people-tabs { padding: var(--space-sm) var(--space-md) 0; }
.academic-people-tabs .tabs__list { margin-bottom: 0; }
.tag--access-info { background: transparent; border: 1px dashed var(--color-border-strong); color: var(--color-text-muted); }

/* ---- Acordeón ---- */
.accordion-item { border: 1px solid var(--color-border); border-radius: var(--radius-md); margin-bottom: var(--space-2xs); overflow: hidden; }
.accordion-trigger { width: 100%; display: flex; justify-content: space-between; align-items: center; gap: var(--space-sm); padding: var(--space-xs) var(--space-sm); background: var(--color-surface); text-align: left; font-weight: var(--font-weight-semibold); font-size: var(--font-size-sm); }
.accordion-trigger svg { width: 18px; height: 18px; transition: transform var(--transition-base); flex-shrink: 0; color: var(--color-text-muted); }
.accordion-trigger[aria-expanded="true"] svg { transform: rotate(180deg); }
.accordion-panel { padding: 0 var(--space-sm) var(--space-sm); font-size: var(--font-size-sm); color: var(--color-text-secondary); }

/* ---- Perfil resumido ---- */
.profile-summary { display: flex; align-items: center; gap: var(--space-sm); }
.avatar { display: inline-flex; align-items: center; justify-content: center; border-radius: 50%; background: var(--color-blue-soft); color: var(--color-blue); font-weight: var(--font-weight-bold); flex-shrink: 0; overflow: hidden; }
.avatar--sm { width: 32px; height: 32px; font-size: var(--font-size-xs); }
.avatar--md { width: 48px; height: 48px; font-size: var(--font-size-sm); }
.avatar--lg { width: 72px; height: 72px; font-size: var(--font-size-lg); }
.profile-summary__name { font-weight: var(--font-weight-semibold); }
.profile-summary__meta { font-size: var(--font-size-xs); color: var(--color-text-muted); }

/* ---- Historial (auditoría, actividad reciente) ---- */
.history-list { display: flex; flex-direction: column; gap: 0.5rem; }
.history-row { display: flex; justify-content: space-between; gap: var(--space-sm); font-size: var(--font-size-sm); padding: 0.5rem 0; border-bottom: 1px dashed var(--color-border); }
.history-row:last-child { border-bottom: none; }

/* ---- Estados vacíos / carga / acceso denegado / próximamente ---- */
.empty-state { text-align: center; padding: var(--space-xl) var(--space-md); color: var(--color-text-secondary); }
.empty-state svg { width: 48px; height: 48px; margin: 0 auto var(--space-2xs); color: var(--color-text-muted); }
.empty-state__title { font-weight: var(--font-weight-semibold); color: var(--color-text); margin-bottom: 0.25rem; }

.skeleton {
  background: linear-gradient(90deg, var(--color-surface-muted) 25%, var(--color-border) 37%, var(--color-surface-muted) 63%);
  background-size: 400% 100%;
  animation: skeleton-shine 1.4s ease infinite;
  border-radius: var(--radius-sm);
}
@keyframes skeleton-shine { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }
@media (prefers-reduced-motion: reduce) { .skeleton { animation: none; background: var(--color-surface-muted); } }

.access-denied { text-align: center; padding: var(--space-2xl) var(--space-md); max-width: 480px; margin-inline: auto; }
.access-denied svg { width: 56px; height: 56px; color: var(--color-danger); margin: 0 auto var(--space-sm); }

.coming-soon-tag {
  display: inline-flex;
  align-items: center;
  gap: 0.3rem;
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
  color: var(--color-text-muted);
  background: var(--color-surface-muted);
  border: 1px dashed var(--color-border-strong);
  padding: 0.25rem 0.6rem;
  border-radius: var(--radius-pill);
}
.coming-soon-tag .ui-icon { width: 14px; height: 14px; }

/* ---- Formularios ---- */
.field { display: flex; flex-direction: column; gap: 0.3rem; margin-bottom: var(--space-sm); }
.field label { font-size: var(--font-size-sm); font-weight: var(--font-weight-semibold); color: var(--color-text); }
.field .hint { font-size: var(--font-size-xs); color: var(--color-text-muted); }
.field input[type="text"],
.field input[type="email"],
.field input[type="password"],
.field input[type="date"],
.field input[type="tel"],
.field input[type="number"],
.field select,
.field textarea {
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-md);
  padding: 0.65rem 0.8rem;
  font-size: var(--font-size-base);
  background: var(--color-surface);
  min-height: 44px;
  width: 100%;
}
.field textarea { min-height: 96px; resize: vertical; }
.field input:focus-visible,
.field select:focus-visible,
.field textarea:focus-visible { border-color: var(--color-blue); }
.field[data-invalid="true"] input,
.field[data-invalid="true"] select { border-color: var(--color-danger); }
.field__error { font-size: var(--font-size-xs); color: var(--color-danger); }
.field-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 0 var(--space-sm); }
.checkbox-row, .radio-row { display: flex; align-items: flex-start; gap: 0.5rem; font-size: var(--font-size-sm); }
.password-field { position: relative; }
.password-field button { position: absolute; right: 0.4rem; top: 50%; transform: translateY(-50%); }

/* ---- Sección genérica ---- */
.section-heading { display: flex; align-items: center; justify-content: space-between; gap: var(--space-sm); margin-bottom: var(--space-sm); flex-wrap: wrap; }
.section-heading h2 { font-size: var(--font-size-lg); font-weight: var(--font-weight-bold); color: var(--color-blue-deep); }
.section-heading p { color: var(--color-text-secondary); font-size: var(--font-size-sm); }

.legend-box { border: 1px dashed var(--color-border-strong); border-radius: var(--radius-md); padding: var(--space-sm); font-size: var(--font-size-sm); color: var(--color-text-secondary); background: var(--color-surface-alt); }

/* ---- Estado de carga de página completa ---- */
.route-loading { display: flex; align-items: center; justify-content: center; min-height: 40vh; gap: var(--space-2xs); color: var(--color-text-secondary); font-size: var(--font-size-sm); }
.route-loading__spinner {
  width: 22px;
  height: 22px;
  border-radius: 50%;
  border: 3px solid var(--color-border);
  border-top-color: var(--color-blue);
  animation: route-spin 0.7s linear infinite;
}
@keyframes route-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .route-loading__spinner { animation-duration: 1.6s; } }

/* =====================================================================
   CAMPUS-REAL 1.0B.2E.4 — Dashboard Operativo de Servicios Escolares
   ===================================================================== */
.stat-card--clickable {
  text-decoration: none;
  color: inherit;
  transition: border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease;
}
.stat-card--clickable:hover {
  text-decoration: none;
  border-color: var(--color-blue);
  box-shadow: var(--shadow-sm);
  transform: translateY(-1px);
}
.stat-card--clickable:focus-visible {
  outline: 3px solid var(--color-blue);
  outline-offset: 2px;
}
.dashboard-section { gap: var(--space-sm); }
.dashboard-cycle-layout {
  display: grid;
  grid-template-columns: minmax(260px, 1fr) minmax(280px, 1fr);
  gap: var(--space-md);
  align-items: end;
}
.dashboard-cycle-select { min-width: 0; }
.dashboard-cycle-select .field { margin-bottom: var(--space-2xs); }
.dashboard-quick-actions {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: var(--space-2xs);
}
.dashboard-actions-row {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  gap: var(--space-2xs);
}
.dashboard-domain-summary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-sm);
  margin-bottom: var(--space-sm);
  padding-bottom: var(--space-sm);
  border-bottom: 1px solid var(--color-border);
}
.dashboard-attention-list {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-2xs);
}
.dashboard-attention-item {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-sm);
  min-height: 48px;
  padding: var(--space-xs) var(--space-sm);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface);
  color: var(--color-text);
  text-decoration: none;
}
.dashboard-attention-item:hover {
  text-decoration: none;
  border-color: var(--color-blue);
  background: var(--color-surface-alt);
}
.dashboard-access-grid {
  display: grid;
  gap: var(--space-md);
}
@media (max-width: 899px) {
  .dashboard-cycle-layout { grid-template-columns: minmax(0, 1fr); }
  .dashboard-quick-actions { align-items: flex-start; }
  .dashboard-actions-row { justify-content: flex-start; }
  .dashboard-attention-list { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 639px) {
  .dashboard-domain-summary { align-items: flex-start; flex-direction: column; }
}

/* =====================================================================
   CAMPUS-REAL 1.0B.2F.0 — Finanzas y pagos
   ===================================================================== */
.finance-workspace-head { overflow: hidden; }
.finance-workspace-head .card__body { padding-bottom: var(--space-sm); }
.finance-tabs { padding: 0 var(--space-md); margin-bottom: 0; }
.finance-cycle-row {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--space-md);
  flex-wrap: wrap;
}
.finance-cycle-field { min-width: min(100%, 360px); margin-bottom: 0; }
.finance-scope-note {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2xs);
  color: var(--color-text-muted);
  font-size: var(--font-size-xs);
  max-width: 520px;
}
.finance-scope-note svg { width: 18px; height: 18px; flex-shrink: 0; }
.finance-stat-row { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.finance-stat-card--attention { border-color: #eeddb0; background: var(--color-warning-bg); }
.finance-result-count {
  margin-bottom: var(--space-2xs);
  font-size: var(--font-size-xs);
  color: var(--color-text-muted);
  text-align: right;
}
.finance-table-wrap { border-radius: var(--radius-md); }
.finance-table { min-width: 1320px; }
.finance-payment-table { min-width: 1500px; }
.finance-row--attention td { background: color-mix(in srgb, var(--color-warning-bg) 55%, var(--color-surface)); }
.finance-row--attention:hover td { background: var(--color-warning-bg); }
.finance-inline-note {
  display: inline-block;
  margin-top: 0.3rem;
  max-width: 260px;
  color: var(--color-text-muted);
  font-size: 0.72rem;
  line-height: 1.25;
}
.finance-modal-grid { margin-top: var(--space-sm); }
.finance-period-filter { margin-bottom: 0; align-items: flex-end; }
.finance-period-field { min-width: min(100%, 420px); margin-bottom: 0; }
.finance-period-help { flex: 1 1 280px; padding-bottom: 0.55rem; }
.finance-period-summary > p:first-child { margin-top: 0; }
.finance-window-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: var(--space-2xs);
  margin-top: var(--space-sm);
}
.finance-window-item {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  padding: var(--space-xs);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface-alt);
  font-size: var(--font-size-xs);
}
.finance-window-item strong { color: var(--color-text); }

@media (max-width: 899px) {
  .finance-stat-row { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 640px) {
  .finance-cycle-row { align-items: stretch; }
  .finance-cycle-field { width: 100%; min-width: 0; }
  .finance-tabs { padding-inline: var(--space-sm); }
  .finance-stat-row { grid-template-columns: minmax(0, 1fr); }
  .finance-table,
  .finance-payment-table { min-width: 0; }
  .finance-row--attention { border-color: #eeddb0 !important; background: var(--color-warning-bg); }
  .finance-row--attention td { background: transparent; }
  .finance-inline-note { max-width: 58vw; text-align: right; }
}

/* =====================================================================
   CAMPUS-REAL 1.0B.2G.0 — EXPEDIENTES DOCUMENTALES DE ALUMNOS
   ===================================================================== */
.student-doc-workspace-head { overflow: hidden; }
.student-doc-workspace-head .card__body { padding-bottom: var(--space-sm); }
.student-doc-tabs { padding: 0 var(--space-md); margin-bottom: 0; }
.student-doc-cycle-row,
.student-doc-requirement-toolbar,
.student-doc-case-actions,
.student-doc-admin-actions {
  display: flex;
  align-items: flex-end;
  gap: var(--space-sm);
  flex-wrap: wrap;
}
.student-doc-cycle-row,
.student-doc-requirement-toolbar { justify-content: space-between; }
.student-doc-cycle-field,
.student-doc-level-field { min-width: min(100%, 360px); margin-bottom: 0; }
.student-doc-security-note,
.student-doc-modal-note {
  color: var(--color-text-muted);
  font-size: var(--font-size-xs);
  max-width: 620px;
}
.student-doc-modal-note {
  padding: var(--space-xs);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface-alt);
}
.student-doc-filters {
  display: grid;
  grid-template-columns: minmax(240px, 2fr) minmax(220px, 1fr);
  gap: 0 var(--space-sm);
}
.student-doc-filters .field { margin-bottom: 0; }
.student-doc-stat-grid { margin: var(--space-md) 0; }
.student-doc-table { min-width: 980px; }
.student-doc-requirements-table { min-width: 920px; }
.student-doc-mini-progress,
.student-doc-progress-line {
  height: 7px;
  overflow: hidden;
  border-radius: 999px;
  background: var(--color-neutral-bg);
}
.student-doc-mini-progress { width: 120px; margin-bottom: 0.35rem; }
.student-doc-mini-progress span,
.student-doc-progress-line span {
  display: block;
  height: 100%;
  background: var(--color-blue);
  border-radius: inherit;
}
.student-doc-check-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-xs);
  margin-bottom: var(--space-sm);
}
.student-doc-check-grid label,
.student-doc-format-fieldset label {
  display: flex;
  align-items: center;
  gap: 0.45rem;
  font-size: var(--font-size-sm);
}
.student-doc-check-grid input,
.student-doc-format-fieldset input { width: auto; }
.student-doc-format-fieldset {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: var(--space-sm);
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-sm);
  margin-bottom: var(--space-sm);
}
.student-doc-format-fieldset legend {
  padding: 0 0.35rem;
  font-size: var(--font-size-sm);
  font-weight: var(--font-weight-semibold);
}
.student-doc-detail-nav { margin-bottom: var(--space-xs); }
.student-doc-student-head,
.student-doc-admin-item__head,
.student-doc-link-history-row {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: var(--space-sm);
}
.student-doc-student-head h2,
.student-doc-admin-item__head h3 { margin: 0.15rem 0; }
.student-doc-student-head p { margin: 0; color: var(--color-text-secondary); }
.student-doc-progress-line { margin: var(--space-sm) 0 var(--space-2xs); }
.student-doc-case-actions { align-items: center; margin-top: var(--space-sm); }
.student-doc-detail-list { display: grid; gap: var(--space-sm); }
.student-doc-admin-item__head { margin-bottom: var(--space-xs); }
.student-doc-item-tags { display: flex; flex-wrap: wrap; gap: 0.35rem; margin-top: 0.35rem; }
.student-doc-admin-actions { align-items: center; margin-top: var(--space-sm); }
.student-doc-generated-link { margin-top: var(--space-sm); }
.student-doc-generated-link textarea {
  width: 100%;
  min-height: 108px;
  resize: vertical;
  margin: var(--space-xs) 0;
  padding: var(--space-xs);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-md);
  background: var(--color-surface-alt);
  color: var(--color-text);
}
.student-doc-link-history-row {
  padding: var(--space-xs) 0;
  border-bottom: 1px solid var(--color-border);
}
.student-doc-link-history-row:last-child { border-bottom: 0; }

/* Portal público de familias */
.family-doc-page {
  min-height: 100vh;
  background: var(--color-surface-alt);
  padding: clamp(1rem, 3vw, 2.5rem) 1rem;
}
.family-doc-shell { width: min(780px, 100%); margin: 0 auto; }
.family-doc-brand {
  display: flex;
  align-items: center;
  gap: var(--space-sm);
  margin-bottom: var(--space-md);
}
.family-doc-brand img { object-fit: contain; }
.family-doc-brand__eyebrow {
  color: var(--color-text-muted);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
  text-transform: uppercase;
  letter-spacing: 0.08em;
}
.family-doc-brand__name { color: var(--color-text); font-size: var(--font-size-xl); font-weight: var(--font-weight-bold); }
.family-doc-card,
.family-doc-item {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-sm);
}
.family-doc-card { padding: clamp(1rem, 3vw, 1.6rem); }
.family-doc-card--message { text-align: center; padding-block: var(--space-xl); }
.family-doc-card--message h1,
.family-doc-summary h1 { margin: 0.2rem 0 0.4rem; }
.family-doc-message-icon {
  width: 48px;
  height: 48px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  margin: 0 auto var(--space-sm);
  background: var(--color-warning-bg);
  color: var(--color-warning);
  font-weight: var(--font-weight-bold);
  font-size: var(--font-size-xl);
}
.family-doc-summary__label { color: var(--color-text-muted); font-size: var(--font-size-sm); }
.family-doc-summary > p { margin-top: 0; color: var(--color-text-secondary); }
.family-doc-progress-row {
  display: flex;
  justify-content: space-between;
  align-items: end;
  gap: var(--space-sm);
  margin-top: var(--space-md);
}
.family-doc-progress-row div { display: flex; flex-direction: column; }
.family-doc-progress-row span { color: var(--color-text-muted); font-size: var(--font-size-xs); }
.family-doc-progress {
  height: 9px;
  overflow: hidden;
  border-radius: 999px;
  background: var(--color-neutral-bg);
  margin-top: var(--space-2xs);
}
.family-doc-progress span { display: block; height: 100%; border-radius: inherit; background: var(--color-blue); }
.family-doc-complete {
  margin-top: var(--space-sm);
  padding: var(--space-xs);
  border-radius: var(--radius-md);
  background: var(--color-success-bg);
  color: var(--color-success);
  font-weight: var(--font-weight-semibold);
}
.family-doc-section-head { margin: var(--space-lg) 0 var(--space-sm); }
.family-doc-section-head h2 { margin-bottom: 0.25rem; }
.family-doc-section-head p { margin: 0; color: var(--color-text-muted); font-size: var(--font-size-sm); }
.family-doc-list { display: grid; gap: var(--space-sm); }
.family-doc-item { padding: var(--space-md); }
.family-doc-item__head {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: var(--space-sm);
}
.family-doc-item__head h3 { margin: 0; }
.family-doc-item__badges { display: flex; gap: 0.3rem; flex-wrap: wrap; margin-top: 0.35rem; }
.family-doc-description,
.family-doc-note { color: var(--color-text-secondary); font-size: var(--font-size-sm); }
.family-doc-note { display: block; margin-top: var(--space-2xs); }
.family-doc-observation {
  margin-top: var(--space-sm);
  padding: var(--space-xs);
  border-radius: var(--radius-md);
  background: var(--color-warning-bg);
  color: var(--color-text);
  font-size: var(--font-size-sm);
}
.family-doc-upload { margin-top: var(--space-sm); padding-top: var(--space-sm); border-top: 1px solid var(--color-border); }
.family-doc-upload .field { margin-bottom: var(--space-xs); }
.family-doc-file-picker {
  display: flex;
  align-items: center;
  gap: var(--space-xs);
  flex-wrap: wrap;
}
.family-doc-file-name {
  color: var(--color-text-secondary);
  font-size: var(--font-size-sm);
  overflow-wrap: anywhere;
}
.family-doc-upload__status { margin-top: var(--space-xs); color: var(--color-text-secondary); }
.family-doc-received { margin: var(--space-sm) 0 0; color: var(--color-success); font-weight: var(--font-weight-medium); font-size: var(--font-size-sm); }
.family-doc-footer { padding: var(--space-lg) var(--space-xs) var(--space-md); text-align: center; color: var(--color-text-muted); font-size: var(--font-size-xs); }
.family-doc-footer p { margin: 0.2rem 0; }

@media (max-width: 700px) {
  .student-doc-tabs { padding-inline: var(--space-sm); }
  .student-doc-filters { grid-template-columns: minmax(0, 1fr); gap: 0; }
  .student-doc-filters .field { margin-bottom: var(--space-sm); }
  .student-doc-cycle-field,
  .student-doc-level-field { width: 100%; min-width: 0; }
  .student-doc-check-grid { grid-template-columns: minmax(0, 1fr); }
  .student-doc-table,
  .student-doc-requirements-table { min-width: 0; }
  .student-doc-mini-progress { width: min(150px, 42vw); }
  .student-doc-student-head,
  .student-doc-admin-item__head,
  .student-doc-link-history-row,
  .family-doc-item__head { flex-direction: column; align-items: stretch; }
  .family-doc-page { padding-inline: 0.75rem; }
  .family-doc-item { padding: var(--space-sm); }
}


/* =====================================================================
   CAMPUS-REAL 1.0B.2H.0 — Dashboard Alumno
   ===================================================================== */
.student-home-hero { overflow: hidden; }
.student-home-hero__row { display:flex; align-items:flex-start; justify-content:space-between; gap:var(--space-md); }
.student-home-hero h2 { margin:0.2rem 0 0.35rem; color:var(--color-blue-deep); }
.student-home-hero p { margin:0; color:var(--color-text-secondary); }
.student-home-eyebrow { display:block; font-size:var(--font-size-xs); font-weight:var(--font-weight-semibold); color:var(--color-text-muted); letter-spacing:0.03em; }
.student-home-stat-grid { margin:var(--space-md) 0; }
.student-home-stat { min-height:112px; }
.student-home-stat__value { font-size:var(--font-size-lg); font-weight:var(--font-weight-bold); color:var(--color-blue-deep); line-height:1.2; }
.student-home-grid { display:grid; grid-template-columns:minmax(0,1.15fr) minmax(280px,0.85fr); gap:var(--space-md); margin-bottom:var(--space-md); }
.student-home-actions { display:grid; gap:var(--space-2xs); }
.student-home-action { display:flex; gap:var(--space-sm); align-items:center; padding:var(--space-sm); border:1px solid var(--color-border); border-radius:var(--radius-md); color:var(--color-text); text-decoration:none; }
.student-home-action:hover { text-decoration:none; border-color:var(--color-blue); background:var(--color-surface-alt); }
.student-home-action > span { width:40px; height:40px; display:grid; place-items:center; border-radius:999px; background:var(--color-info-bg); color:var(--color-blue-deep); flex-shrink:0; }
.student-home-action > span svg { width:20px; height:20px; }
.student-home-action small { display:block; margin-top:0.2rem; color:var(--color-text-muted); }
.student-home-card-head { display:flex; align-items:flex-start; justify-content:space-between; gap:var(--space-sm); }
.student-home-card-head h2 { margin-bottom:0.2rem; }
.student-home-card-head p { margin:0; color:var(--color-text-muted); font-size:var(--font-size-sm); }
.student-home-subject-grid { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:var(--space-sm); }
.student-home-subject-card { display:flex; align-items:center; gap:var(--space-sm); padding:var(--space-sm); border:1px solid var(--color-border); border-radius:var(--radius-md); background:var(--color-surface); }
.student-home-subject-card__icon { width:38px; height:38px; display:grid; place-items:center; flex-shrink:0; border-radius:999px; background:var(--color-info-bg); color:var(--color-blue-deep); }
.student-home-subject-card__icon svg { width:19px; height:19px; }
.student-home-subject-empty { margin:0; }
@media (max-width:899px) {
  .student-home-grid { grid-template-columns:minmax(0,1fr); }
  .student-home-subject-grid { grid-template-columns:repeat(2,minmax(0,1fr)); }
}
@media (max-width:639px) {
  .student-home-hero__row, .student-home-card-head { flex-direction:column; align-items:flex-start; }
  .student-home-subject-grid { grid-template-columns:minmax(0,1fr); }
}

/* ====================================================================
   CAMPUS-REAL 1.0B.2I.0 — Dashboard Tutor / Portal de Padres
   ==================================================================== */
.guardian-home-hero,
.guardian-student-hero { overflow:hidden; }
.guardian-home-hero__body,
.guardian-student-hero__body { display:flex; align-items:flex-start; justify-content:space-between; gap:var(--space-md); }
.guardian-home-hero h2,
.guardian-student-hero h2 { margin:0.2rem 0 0.35rem; color:var(--color-blue-deep); }
.guardian-home-hero p,
.guardian-student-hero p { margin:0; color:var(--color-text-secondary); }
.guardian-home-hero .btn { display:inline-flex; align-items:center; gap:0.4rem; }
.guardian-home-hero .btn svg { width:18px; height:18px; }
.guardian-child-switcher { display:flex; gap:var(--space-xs); overflow-x:auto; padding:var(--space-md) 0 var(--space-xs); scrollbar-width:thin; }
.guardian-child-chip { min-width:210px; text-align:left; border:1px solid var(--color-border); background:var(--color-surface); border-radius:var(--radius-md); padding:var(--space-sm); cursor:pointer; color:var(--color-text); transition:border-color .15s ease, background .15s ease, box-shadow .15s ease; }
.guardian-child-chip span { display:block; font-weight:var(--font-weight-semibold); }
.guardian-child-chip small { display:block; margin-top:0.2rem; color:var(--color-text-muted); }
.guardian-child-chip:hover { border-color:var(--color-blue); }
.guardian-child-chip.is-active { border-color:var(--color-blue); background:var(--color-info-bg); box-shadow:0 0 0 1px var(--color-blue); }
.guardian-student-hero { margin-top:var(--space-sm); }
.guardian-portal-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--space-md); margin-top:var(--space-md); }
.guardian-portal-card--wide { grid-column:1 / -1; }
.guardian-portal-card .card__header > div > p { margin:0.2rem 0 0; color:var(--color-text-muted); font-size:var(--font-size-sm); }
.guardian-summary-grid { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--space-sm); }
.guardian-summary-item { border:1px solid var(--color-border); border-radius:var(--radius-md); padding:var(--space-sm); background:var(--color-surface-alt); }
.guardian-summary-item span { display:block; font-size:var(--font-size-xs); color:var(--color-text-muted); margin-bottom:0.25rem; }
.guardian-summary-item strong { display:block; color:var(--color-blue-deep); overflow-wrap:anywhere; }
.guardian-subsection { margin-top:var(--space-md); }
.guardian-subsection h3 { margin:0 0 var(--space-xs); font-size:var(--font-size-md); }
.guardian-subject-list { display:flex; flex-wrap:wrap; gap:var(--space-2xs); }
.guardian-payment-counts { display:flex; flex-wrap:wrap; gap:var(--space-2xs); margin:var(--space-sm) 0; }
.guardian-table-wrap { margin-top:var(--space-sm); }
.guardian-document-progress { margin-bottom:var(--space-md); }
.guardian-document-progress > div:first-child { display:flex; justify-content:space-between; align-items:center; gap:var(--space-sm); margin-bottom:0.45rem; }
.guardian-document-progress > div:first-child span { color:var(--color-text-muted); font-size:var(--font-size-sm); }
.guardian-progress-track { height:8px; background:var(--color-border); border-radius:999px; overflow:hidden; }
.guardian-progress-track span { display:block; height:100%; background:var(--color-blue); border-radius:inherit; }
.guardian-document-list { display:grid; gap:var(--space-2xs); }
.guardian-document-row { display:flex; align-items:flex-start; justify-content:space-between; gap:var(--space-sm); border:1px solid var(--color-border); border-radius:var(--radius-md); padding:var(--space-sm); }
.guardian-document-row > div { min-width:0; }
.guardian-document-row strong { display:block; }
.guardian-document-row small { display:block; margin-top:0.2rem; color:var(--color-text-muted); }
.guardian-family-message { margin-top:0.45rem; padding:0.5rem 0.65rem; border-radius:var(--radius-sm); background:var(--color-warning-bg); color:#5c4108; font-size:var(--font-size-sm); }
.guardian-document-help { margin:var(--space-md) 0 0; }

@media (max-width: 900px) {
  .guardian-portal-grid { grid-template-columns:minmax(0,1fr); }
  .guardian-portal-card--wide { grid-column:auto; }
}

@media (max-width: 640px) {
  .guardian-home-hero__body,
  .guardian-student-hero__body,
  .guardian-document-row { flex-direction:column; align-items:flex-start; }
  .guardian-summary-grid { grid-template-columns:minmax(0,1fr); }
  .guardian-child-chip { min-width:82vw; }
}

/* =====================================================================
   CAMPUS-REAL 1.0B.2J.0 — Dashboard Dirección
   ===================================================================== */
.director-hero__body,.director-level-head,.director-subsection__head{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}
.director-hero__eyebrow,.director-level-eyebrow{display:block;font-size:.75rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-muted);margin-bottom:var(--space-2xs)}
.director-hero h2,.director-level-head h2{margin:0}.director-hero p{margin:.35rem 0 0;color:var(--color-text-muted)}
.director-stat-grid{margin-bottom:var(--space-lg)}.director-stat__value{display:block;font-size:1.65rem;font-weight:750;line-height:1.1;color:var(--color-text)}
.director-actions{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-sm)}
.director-action{display:flex;align-items:flex-start;gap:var(--space-sm);padding:var(--space-md);border:1px solid var(--color-border);border-radius:var(--radius-md);text-decoration:none;color:inherit;background:var(--color-surface)}
.director-action:hover{border-color:var(--color-primary);box-shadow:var(--shadow-sm)}.director-action svg{flex:0 0 auto;margin-top:2px}.director-action strong,.director-action small{display:block}.director-action small{margin-top:.25rem;color:var(--color-text-muted);line-height:1.4}
.director-level-list{display:grid;gap:var(--space-lg);margin-top:var(--space-lg)}
.director-level-metrics,.director-admission-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-sm)}
.director-level-metrics>div,.director-admission-grid>div{padding:var(--space-sm);border-radius:var(--radius-md);background:var(--color-surface-muted);border:1px solid var(--color-border)}
.director-level-metrics span,.director-admission-grid span{display:block;color:var(--color-text-muted);font-size:.78rem}.director-level-metrics strong,.director-admission-grid strong{display:block;font-size:1.25rem;margin-top:.2rem}
.director-subsection{margin:var(--space-lg) 0}.director-subsection__head{margin-bottom:var(--space-sm)}.director-subsection__head h3{margin:0}.director-no-finance,.director-assignment-alert{margin-top:var(--space-lg)}
@media (max-width:900px){.director-actions,.director-level-metrics,.director-admission-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:620px){.director-hero__body,.director-level-head,.director-subsection__head{align-items:flex-start;flex-direction:column}.director-actions,.director-level-metrics,.director-admission-grid{grid-template-columns:1fr}}

/* =====================================================================
   CAMPUS-REAL 1.0B.2K.0 — Materias y carga académica
   ===================================================================== */
.academic-load-toolbar-card{margin-bottom:var(--space-md)}
.academic-load-toolbar{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-md);flex-wrap:wrap}
.academic-load-cycle-field{min-width:min(100%,380px);margin-bottom:0}
.academic-load-cycle-meta{display:flex;flex-direction:column;align-items:flex-end;gap:.2rem;color:var(--color-text-muted);font-size:var(--font-size-sm)}
.academic-load-cycle-meta strong{color:var(--color-text)}
.academic-load-tabs{margin-bottom:var(--space-lg)}
.academic-load-stat-grid{margin-bottom:var(--space-lg)}
.academic-load-stat strong{display:block;font-size:1.55rem;color:var(--color-blue-deep);line-height:1.15}
.academic-load-overview-grid,.academic-load-import-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md)}
.academic-load-flow{display:grid;gap:var(--space-xs)}
.academic-load-flow>div{display:grid;grid-template-columns:34px minmax(120px,.65fr) minmax(0,1fr);gap:var(--space-sm);align-items:center;padding:var(--space-xs) 0;border-bottom:1px solid var(--color-border)}
.academic-load-flow>div:last-child{border-bottom:none}
.academic-load-flow>div>span{width:30px;height:30px;border-radius:999px;display:grid;place-items:center;background:var(--color-info-bg);color:var(--color-blue-deep);font-weight:700}
.academic-load-flow small{color:var(--color-text-muted)}
.academic-load-access-list{display:grid;gap:var(--space-xs)}
.academic-load-access-list>div{display:flex;justify-content:space-between;gap:var(--space-md);padding:var(--space-xs) 0;border-bottom:1px solid var(--color-border)}
.academic-load-access-list>div:last-child{border-bottom:none}
.academic-load-empty-alert{margin-top:var(--space-lg)}
.academic-load-section-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md);margin-bottom:var(--space-sm)}
.academic-load-section-head h2{margin:0}.academic-load-section-head p{margin:.25rem 0 0;color:var(--color-text-muted)}
.academic-load-section-head--spaced{margin-top:var(--space-xl)}
.academic-load-table{min-width:900px}
.academic-load-assignment-chip{display:inline-flex;flex-direction:column;gap:.1rem;padding:.35rem .55rem;margin:.1rem;border-radius:var(--radius-sm);background:var(--color-surface-muted);border:1px solid var(--color-border)}
.academic-load-assignment-chip small{color:var(--color-text-muted)}
.academic-load-note{margin-top:var(--space-sm)}
.academic-load-preview-card{margin-top:var(--space-lg)}
.academic-load-preview-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-md)}
.academic-load-preview-head h2{margin-bottom:.2rem}.academic-load-preview-head p{margin:0;color:var(--color-text-muted)}
.academic-load-preview-stats{margin-bottom:var(--space-lg)}
.academic-load-preview-table{min-width:980px}
.academic-load-row--blocked td{background:color-mix(in srgb,var(--color-danger-bg) 55%,var(--color-surface))}
.academic-load-message{display:flex;flex-direction:column;gap:.12rem;margin-bottom:.35rem;font-size:var(--font-size-xs)}
.academic-load-message--error strong{color:var(--color-danger)}
.academic-load-message--warning strong{color:#7f6000}
.academic-load-preview-actions{display:flex;align-items:center;justify-content:flex-end;gap:var(--space-sm);margin-top:var(--space-md);flex-wrap:wrap}
.academic-load-confirm-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--space-xs);margin:var(--space-md) 0}
.academic-load-confirm-summary>div{padding:var(--space-sm);border:1px solid var(--color-border);border-radius:var(--radius-md);background:var(--color-surface-muted)}
.academic-load-confirm-summary span,.academic-load-confirm-summary strong{display:block}.academic-load-confirm-summary span{font-size:var(--font-size-xs);color:var(--color-text-muted)}.academic-load-confirm-summary strong{font-size:1.2rem;margin-top:.15rem}
@media(max-width:900px){.academic-load-overview-grid,.academic-load-import-grid{grid-template-columns:1fr}.academic-load-confirm-summary{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:640px){.academic-load-toolbar,.academic-load-section-head,.academic-load-preview-head{align-items:flex-start;flex-direction:column}.academic-load-cycle-meta{align-items:flex-start}.academic-load-table,.academic-load-preview-table{min-width:0}.academic-load-confirm-summary{grid-template-columns:1fr}.academic-load-flow>div{grid-template-columns:34px 1fr}.academic-load-flow small{grid-column:2}}
.academic-load-download-actions{display:flex;align-items:center;gap:var(--space-xs);flex-wrap:wrap;margin-top:var(--space-sm)}
@media(max-width:640px){.academic-load-download-actions{align-items:stretch;flex-direction:column}.academic-load-download-actions .btn{justify-content:center;width:100%}}

/* ================================================================
   CAMPUS-REAL 1.0B.2L.0 — Dashboard Docente
   ================================================================ */
.teacher-hero__body,.teacher-section__head,.teacher-group-card__head,.teacher-account-row{display:flex;align-items:center;justify-content:space-between;gap:var(--space-md)}
.teacher-hero__eyebrow,.teacher-group-eyebrow{display:block;font-size:.75rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-muted);margin-bottom:var(--space-2xs)}
.teacher-hero h2,.teacher-group-card h3,.teacher-section h2{margin:0}.teacher-hero p,.teacher-section__head p,.teacher-account-row p{margin:.3rem 0 0;color:var(--color-text-muted)}
.teacher-stat-grid{margin:var(--space-md) 0}.teacher-stat{min-height:112px}.teacher-stat__value{font-size:var(--font-size-lg);font-weight:var(--font-weight-bold);color:var(--color-blue-deep);line-height:1.2}
.teacher-section{margin:var(--space-lg) 0}.teacher-section__head{margin-bottom:var(--space-sm)}
.teacher-group-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md)}
.teacher-group-card{overflow:hidden}.teacher-group-card__head{align-items:flex-start}.teacher-group-card__head h3{font-size:1rem;color:var(--color-blue-deep)}
.teacher-group-block h4{margin:0 0 var(--space-xs);font-size:var(--font-size-sm)}
.teacher-subject-list{display:flex;flex-wrap:wrap;gap:var(--space-xs)}.teacher-subject-chip{display:inline-flex;align-items:center;gap:.35rem;padding:.4rem .65rem;border-radius:999px;background:var(--color-info-bg);color:var(--color-blue-deep);font-weight:600;font-size:var(--font-size-sm)}.teacher-subject-chip small{color:var(--color-text-muted);font-weight:500}
.teacher-roster-details{margin-top:var(--space-md);padding-top:var(--space-sm);border-top:1px solid var(--color-border)}.teacher-roster-details summary{cursor:pointer;font-weight:600;color:var(--color-blue-deep)}
.teacher-roster{display:grid;gap:var(--space-2xs);margin-top:var(--space-sm);max-height:320px;overflow:auto}.teacher-roster__row{display:flex;align-items:center;gap:var(--space-xs);padding:.55rem .2rem;border-bottom:1px solid var(--color-border)}.teacher-roster__row:last-child{border-bottom:0}.teacher-roster__avatar{width:32px;height:32px;display:grid;place-items:center;border-radius:999px;background:var(--color-surface-alt);color:var(--color-blue-deep);flex-shrink:0}.teacher-roster__avatar svg{width:18px;height:18px}.teacher-roster__row strong,.teacher-roster__row small{display:block}.teacher-roster__row small{color:var(--color-text-muted);margin-top:.1rem}
.teacher-schedule-card{margin-top:var(--space-md)}.teacher-schedule-days{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--space-md)}.teacher-schedule-day{border:1px solid var(--color-border);border-radius:var(--radius-md);padding:var(--space-sm)}.teacher-schedule-day h3{margin:0 0 var(--space-xs);font-size:var(--font-size-sm);color:var(--color-blue-deep)}.teacher-schedule-list{display:grid;gap:var(--space-xs)}.teacher-schedule-row{display:grid;grid-template-columns:105px minmax(0,1fr);gap:var(--space-sm);align-items:start}.teacher-schedule-time{font-weight:700;color:var(--color-blue-deep);font-variant-numeric:tabular-nums}.teacher-schedule-row strong,.teacher-schedule-row small{display:block}.teacher-schedule-row small{color:var(--color-text-muted);margin-top:.15rem}
.teacher-empty-card{margin:var(--space-lg) 0}.teacher-empty-state{text-align:center;padding:clamp(2rem,5vw,4rem)}.teacher-empty-state__icon{width:64px;height:64px;display:grid;place-items:center;margin:0 auto var(--space-md);border-radius:999px;background:var(--color-info-bg);color:var(--color-blue-deep)}.teacher-empty-state__icon svg{width:32px;height:32px}.teacher-empty-state h2{margin:0;color:var(--color-blue-deep)}.teacher-empty-state p{max-width:620px;margin:.65rem auto 0;color:var(--color-text-muted)}.teacher-empty-note{display:inline-flex;align-items:center;gap:.45rem;margin-top:var(--space-md);padding:.55rem .8rem;border-radius:999px;background:var(--color-surface-alt);color:var(--color-text-secondary);font-size:var(--font-size-sm)}.teacher-empty-note svg{width:17px;height:17px}
.teacher-account-card{margin-top:var(--space-md)}.teacher-account-row .btn{display:inline-flex;align-items:center;gap:.4rem;white-space:nowrap}.teacher-account-row .btn svg{width:18px;height:18px}.teacher-privacy-note{margin-top:var(--space-md)}
@media (max-width:900px){.teacher-group-grid,.teacher-schedule-days{grid-template-columns:1fr}}
@media (max-width:620px){.teacher-hero__body,.teacher-section__head,.teacher-group-card__head,.teacher-account-row{align-items:flex-start;flex-direction:column}.teacher-schedule-row{grid-template-columns:1fr;gap:.2rem}.teacher-account-row .btn{width:100%;justify-content:center}}

/* =====================================================================
   CAMPUS-REAL 1.0B.2M.0 — Finanzas 2.0 / movimientos de pago
   ===================================================================== */
.finance-stat-row--five { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.finance-payment-table--ledger { min-width: 1580px; }
.finance-transactions-table { min-width: 1480px; }
.finance-ledger-table { min-width: 920px; }
.finance-actions-inline {
  display: flex;
  gap: var(--space-2xs);
  align-items: center;
  flex-wrap: wrap;
}
.finance-payment-summary { margin-bottom: var(--space-sm); }
.finance-payment-balance-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-xs);
  margin-top: var(--space-sm);
}
.finance-payment-balance-grid > span {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  padding: var(--space-xs);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface-alt);
}
.finance-payment-balance-grid small {
  color: var(--color-text-muted);
  font-size: var(--font-size-xs);
}
.finance-payment-balance-grid strong { font-size: var(--font-size-md); }
.finance-modal-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-sm);
}
.finance-receipt-success {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: var(--space-2xs);
  padding: var(--space-sm) 0 var(--space-md);
}
.finance-receipt-success svg {
  width: 42px;
  height: 42px;
  color: var(--color-success);
}
.finance-receipt-success p { margin: 0; }
.finance-receipt-folio {
  font-size: clamp(1.25rem, 3vw, 1.75rem);
  font-weight: var(--font-weight-bold);
  letter-spacing: 0.03em;
  color: var(--color-text);
}
.finance-transactions-intro { margin-top: 0; max-width: 900px; }
.finance-transactions-note { margin: var(--space-xs) 0 0; max-width: 900px; }
.finance-transactions-filter {
  align-items: flex-end;
  gap: var(--space-xs);
}
.finance-transactions-filter .field { margin-bottom: 0; min-width: 150px; }
.finance-transactions-search { flex: 1 1 260px; }
.finance-stat-money { font-size: clamp(1.05rem, 2vw, 1.45rem); }
.finance-row--voided td {
  background: color-mix(in srgb, var(--color-danger-bg) 35%, var(--color-surface));
  color: var(--color-text-muted);
}
.finance-row--voided:hover td { background: var(--color-danger-bg); }

/* ---------------------------------------------------------------------
   CAMPUS-REAL 1.0B.2M.1 — G.10C.1 histórico financiero unificado
   --------------------------------------------------------------------- */
.finance-transactions-table { min-width: 1660px; }
.finance-row--legacy td {
  background: color-mix(in srgb, var(--color-surface-alt) 65%, var(--color-surface));
}
.finance-row--legacy:hover td { background: var(--color-surface-alt); }
.finance-legacy-detail {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface-alt);
  padding: var(--space-sm);
}
.finance-legacy-detail__head {
  display: flex;
  align-items: center;
  gap: var(--space-2xs);
  margin-bottom: var(--space-xs);
}
.finance-legacy-detail__grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-xs);
  margin: 0;
}
.finance-legacy-detail__grid > div {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  min-width: 0;
}
.finance-legacy-detail__grid dt {
  color: var(--color-text-muted);
  font-size: var(--font-size-xs);
}
.finance-legacy-detail__grid dd {
  margin: 0;
  font-weight: var(--font-weight-semibold);
  overflow-wrap: anywhere;
}

/* ---------------------------------------------------------------------
   CAMPUS-REAL 1.0B.2M.2 — G.10C.2 consistencia de históricos con ficha
   financiera incompleta. El estado de pago y el estado de la ficha son
   dos conceptos distintos y se muestran como tales.
   --------------------------------------------------------------------- */
.finance-ledger-states {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-xs);
  margin: var(--space-sm) 0 0;
}
.finance-ledger-states > div {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  min-width: 0;
}
.finance-ledger-states dt {
  color: var(--color-text-muted);
  font-size: var(--font-size-xs);
}
.finance-ledger-states dd { margin: 0; }
.finance-inline-note--review {
  color: var(--color-warning);
  font-weight: var(--font-weight-semibold);
}
.finance-row--profile-review td {
  background: color-mix(in srgb, var(--color-warning-bg) 35%, var(--color-surface));
}
.finance-row--profile-review:hover td { background: var(--color-warning-bg); }

/* ---------------------------------------------------------------------
   CAMPUS-REAL 1.0B.2M.4 — G.10C.3 beca por periodo
   --------------------------------------------------------------------- */
.finance-scholarship-panel {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface-alt);
  padding: var(--space-sm);
  margin-bottom: var(--space-sm);
}
.finance-scholarship-toggle {
  display: flex;
  align-items: center;
  gap: var(--space-2xs);
  font-weight: var(--font-weight-semibold);
  cursor: pointer;
}
.finance-scholarship-toggle input[disabled] { cursor: not-allowed; }
.finance-scholarship-toggle input[disabled] + span { color: var(--color-text-muted); }
.finance-scholarship-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--space-xs);
  margin: var(--space-xs) 0 0;
}
.finance-scholarship-grid > div {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  min-width: 0;
}
.finance-scholarship-grid dt {
  color: var(--color-text-muted);
  font-size: var(--font-size-xs);
}
.finance-scholarship-grid dd {
  margin: 0;
  overflow-wrap: anywhere;
}
#correct-student-resolved { display: block; margin-bottom: var(--space-2xs); max-width: none; }
#correct-student-lookup { margin-bottom: var(--space-sm); }

/* ---------------------------------------------------------------------
   CAMPUS-REAL 1.0B.2M.7 — G.10D.3 parcialidades y atribución de pagos.
   Reutiliza el lenguaje visual existente (card, tag, data-table,
   alert): no introduce una segunda arquitectura de estilos.
   --------------------------------------------------------------------- */
.finance-payment-table--ledger { min-width: 1720px; }
.finance-schedule-table { min-width: 1080px; }
.finance-unallocated-table { min-width: 1120px; }
.finance-allocation-table { min-width: 820px; }
.finance-schedule-editor-table { min-width: 720px; }

.finance-plan-cell {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  align-items: flex-start;
}

.finance-schedule-detail__nav { display: flex; }
.finance-schedule-detail__nav .btn {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
}
.finance-schedule-detail__nav svg { width: 18px; height: 18px; }

.finance-schedule-summary {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: var(--space-xs);
}
.finance-schedule-summary > span {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  padding: var(--space-xs);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface-alt);
  min-width: 0;
}
.finance-schedule-summary small { color: var(--color-text-muted); font-size: var(--font-size-xs); }
.finance-schedule-summary strong { font-size: var(--font-size-md); overflow-wrap: anywhere; }

.finance-schedule-warnings ul { margin: var(--space-2xs) 0 0; padding-left: 1.1rem; }
.finance-schedule-warnings li { margin-bottom: 0.2rem; }
.finance-schedule-warnings p { margin: var(--space-2xs) 0 0; }

.finance-allocation-chip {
  display: inline-flex;
  align-items: center;
  margin: 0 0.25rem 0.25rem 0;
  padding: 0.2rem 0.5rem;
  border-radius: 999px;
  background: var(--color-info-bg);
  color: var(--color-blue-deep);
  font-size: var(--font-size-xs);
  font-weight: var(--font-weight-semibold);
}

.finance-allocation-heading {
  margin: var(--space-md) 0 var(--space-2xs);
  font-size: var(--font-size-sm);
  color: var(--color-blue-deep);
}
.finance-allocation-splitter { display: grid; gap: var(--space-xs); }
.finance-allocation-input { width: 100%; min-width: 110px; text-align: right; }
.finance-allocation-totals {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-xs);
}
.finance-allocation-totals > span {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  padding: var(--space-xs);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface-alt);
  min-width: 0;
}
.finance-allocation-totals small { color: var(--color-text-muted); font-size: var(--font-size-xs); }
.finance-allocation-totals strong { font-size: var(--font-size-md); }
.finance-allocation-totals .is-balanced {
  border-color: var(--color-success);
  background: var(--color-success-bg);
}
.finance-allocation-totals .is-pending {
  border-color: var(--color-warning);
  background: var(--color-warning-bg);
}

.finance-allocation-history { margin: 0; padding: 0; list-style: none; display: grid; gap: var(--space-xs); }
.finance-allocation-history__item {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface-alt);
  padding: var(--space-xs);
}
.finance-allocation-history__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--space-xs);
  flex-wrap: wrap;
}
.finance-allocation-history__grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-xs);
  margin: var(--space-2xs) 0 0;
}
.finance-allocation-history__grid > div { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
.finance-allocation-history__grid dt { color: var(--color-text-muted); font-size: var(--font-size-xs); }
.finance-allocation-history__grid dd { margin: 0; overflow-wrap: anywhere; }

.finance-schedule-editor-tools { align-items: flex-end; gap: var(--space-sm); }
.field--inline { margin-bottom: 0; }
.finance-schedule-editor-table input { width: 100%; min-width: 120px; }

/* ---------------------------------------------------------------------
   CAMPUS-REAL 1.0B.2M.9 — G.10F reportes financieros / corte de cobranza
   --------------------------------------------------------------------- */
.finance-report-table { min-width: 1180px; }
.finance-report-filter { align-items: flex-end; gap: var(--space-xs); }
.finance-report-filter .field { margin-bottom: 0; min-width: 150px; }
.finance-report-perspectives {
  display: flex;
  gap: var(--space-2xs);
  flex-wrap: wrap;
  padding-bottom: var(--space-2xs);
}
.finance-report-presets {
  display: flex;
  gap: var(--space-2xs);
  flex-wrap: wrap;
}
.finance-report-summary {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: var(--space-xs);
}
.finance-report-summary > span {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  padding: var(--space-xs);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface-alt);
  min-width: 0;
}
.finance-report-summary small { color: var(--color-text-muted); font-size: var(--font-size-xs); }
.finance-report-summary strong { font-size: var(--font-size-md); overflow-wrap: anywhere; }
.finance-report-summary > span:first-child {
  border-color: var(--color-blue-deep);
  background: var(--color-info-bg);
}
.finance-report-summary > span:first-child strong { color: var(--color-blue-deep); }

@media (max-width: 1100px) {
  .finance-stat-row--five { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .finance-schedule-summary { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .finance-report-summary { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

@media (max-width: 899px) {
  .finance-stat-row--five { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .finance-report-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .finance-report-filter .field { min-width: min(100%, 180px); }
  .finance-transactions-filter .field { min-width: min(100%, 180px); }
  .finance-schedule-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .finance-allocation-history__grid { grid-template-columns: minmax(0, 1fr); }
}

@media (max-width: 640px) {
  .finance-stat-row--five { grid-template-columns: minmax(0, 1fr); }
  .finance-payment-table--ledger,
  .finance-transactions-table,
  .finance-ledger-table,
  .finance-schedule-table,
  .finance-unallocated-table,
  .finance-allocation-table,
  .finance-schedule-editor-table,
  .finance-report-table { min-width: 0; }
  .finance-payment-balance-grid,
  .finance-modal-grid,
  .finance-schedule-summary,
  .finance-allocation-totals,
  .finance-report-summary { grid-template-columns: minmax(0, 1fr); }
  .finance-report-filter { align-items: stretch; }
  .finance-report-filter .field { width: 100%; min-width: 0; }
  .finance-report-presets .btn,
  .finance-report-perspectives .btn { flex: 1 1 auto; justify-content: center; }
  .finance-schedule-editor-tools { align-items: stretch; flex-direction: column; }
  .finance-schedule-editor-tools .btn { width: 100%; justify-content: center; }
  .finance-allocation-input { text-align: left; }
  .finance-actions-inline { justify-content: flex-end; }
  .finance-transactions-filter { align-items: stretch; }
  .finance-transactions-filter .field,
  .finance-transactions-search { width: 100%; min-width: 0; }
  .finance-row--voided { border-color: #e5b7b3 !important; background: var(--color-danger-bg); }
  .finance-row--voided td { background: transparent; }
  .finance-row--legacy { background: var(--color-surface-alt); }
  .finance-row--legacy td { background: transparent; }
  .finance-row--profile-review { background: var(--color-warning-bg); }
  .finance-row--profile-review td { background: transparent; }
  .finance-legacy-detail__grid,
  .finance-scholarship-grid,
  .finance-ledger-states { grid-template-columns: minmax(0, 1fr); }
}

/* =====================================================================
   CAMPUS-REAL 1.0B.2N.0 — H.1 alta manual de alumno.
   Reutiliza el lenguaje visual existente (field, tag, alert, btn):
   no introduce una segunda arquitectura de estilos.
   ===================================================================== */
.manual-student-section {
  padding: var(--space-sm) 0;
  border-top: 1px solid var(--color-border);
}
.manual-student-section:first-of-type { border-top: 0; padding-top: 0; }
.manual-student-section h4 {
  margin: 0 0 var(--space-xs);
  font-size: var(--font-size-sm);
  color: var(--color-blue-deep);
}
.manual-student-section > p { margin: var(--space-2xs) 0 0; }
.manual-student-grid { gap: var(--space-sm); }

.manual-student-candidates {
  list-style: none;
  margin: var(--space-xs) 0 0;
  padding: 0;
  display: grid;
  gap: var(--space-2xs);
}
.manual-student-candidate {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: var(--space-xs);
  padding: var(--space-xs);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-surface-alt);
}
.manual-student-candidate__pick {
  display: inline-flex;
  align-items: center;
  gap: var(--space-2xs);
  cursor: pointer;
  min-width: 0;
}

.manual-student-confirm {
  display: flex;
  align-items: flex-start;
  gap: var(--space-2xs);
  padding: var(--space-2xs) 0;
  cursor: pointer;
}

.manual-student-summary {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: var(--space-xs);
  margin: 0;
}
.manual-student-summary > div {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  min-width: 0;
}
.manual-student-summary dt {
  color: var(--color-text-muted);
  font-size: var(--font-size-xs);
}
.manual-student-summary dd {
  margin: 0;
  font-weight: var(--font-weight-semibold);
  overflow-wrap: anywhere;
}

@media (max-width: 899px) {
  .manual-student-summary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .manual-student-summary { grid-template-columns: minmax(0, 1fr); }
  .manual-student-grid { grid-template-columns: minmax(0, 1fr); }
  .manual-student-candidate { align-items: flex-start; flex-direction: column; }
}
