/* ============================================================================
   INSTRUCTORES · app.css — tokens, chrome (cabecera + pestañas) y componentes base.
   Mobile-first. Las secciones NO tocan este archivo: cada una lleva su
   assets/css/<seccion>.css. Tokens copiados de GESTION (design-system.css,
   tramites-modal.css --estado-*, COLORES_BARRA del calendario).
   ========================================================================== */
:root {
  /* Paleta GESTION */
  --color-primary: #1e3c72;
  --color-primary-dark: #0f1f3d;
  --color-primary-light: #5e76a2;
  --color-secondary: #275779;
  --color-secondary-light: #3498db;
  --color-success: #27ae60;
  --color-warning: #f0ad4e;
  --cabecera-tarjeta-1: #408ab7;   /* cabecera de tarjeta (elegido por Nico) */
  --cabecera-tarjeta-2: #6fb0d6;   /* el claro se oscurece un punto para que el blanco se lea */
  /* El azul oscuro (--color-primary) es SOLO de la barra superior. Todo lo demás que
     necesite fondo azul usa este medio, que no apaga la pantalla. */
  --azul-accion: #2f7fae;
  --azul-accion-oscuro: #26688f;
  --color-danger: #d63031;
  --color-info: #00cec9;
  --bg-body: #f4f6fa;
  --bg-card: #ffffff;
  --bg-panel: #f9fbfd;
  --border-default: #ddd;
  --border-light: #eee;
  --border-panel: #e1e9f5;
  --border-radius: 6px;
  --border-radius-lg: 8px;
  --border-radius-xl: 12px;
  --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.1);
  --shadow-md: 0 4px 15px rgba(0, 0, 0, 0.05);
  --shadow-lg: 0 10px 30px rgba(0, 0, 0, 0.18);
  --text-primary: #333333;
  --text-secondary: #666666;
  --text-muted: #777777;
  --fuente: 'Open Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  --cabecera-alto: 56px;
  --nav-alto: 60px;

  /* Estados de trámite / visado (escala frío→cálido de GESTION) */
  --estado-en-tramite: #3b82f6;
  --estado-prov-enviado: #ea580c;
  --estado-titulo-enviado: #7c3aed;
  --estado-tramitado: #16a34a;
  --estado-devuelto: #0d9488;
  --estado-visado-prov: #ea580c;
  --estado-visado-firmado: #7c3aed;
  --estado-visado-completado: #16a34a;
  --estado-incidencia: #dc2626;

  /* Color por TIPO de práctica (COLORES_BARRA del calendario de GESTION).
     El «+» del tipo se escribe «_» en la variable y en la clase: claseTipo() de app.js. */
  --tipo-TITULIN: #00cec9;
  --tipo-MOTOR-PNB: #0984e3;
  --tipo-MOTOR-PER: #6c5ce7;
  --tipo-MOTOR-PY-CY: #2d3436;
  --tipo-COMPLEMENTARIA: #556b2f;
  --tipo-COMPLE_VELA: #c44569;
  --tipo-TANGER-COMPLE_VELA: #e67e22;
  --tipo-TANGER-MOTOR-PY-CY: #d35400;
  --tipo-VELA: #2ecc71;
  --tipo-RADIO-PNB: #f1c40f;
  --tipo-RADIO-TEORIA: #fd79a8;
  --tipo-RADIO-PRACTICA: #d63031;
  --tipo-OTRO: #64748b;
}

/* ---------- Base ---------- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  font-family: var(--fuente);
  font-size: 15px;
  line-height: 1.5;
  color: var(--text-primary);
  background: var(--bg-body);
  min-height: 100vh;
  min-height: 100dvh;
  overflow-x: hidden;
}
img, svg, video { max-width: 100%; }
a { color: var(--color-secondary); }
h1, h2, h3, h4 { margin: 0 0 .5em; line-height: 1.25; color: var(--color-primary); }
h1 { font-size: 22px; }
h2 { font-size: 18px; }
h3 { font-size: 16px; }
p { margin: 0 0 12px; }
[hidden] { display: none !important; }
.texto-suave { color: var(--text-muted); }
.texto-centro { text-align: center; }
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; }

/* ---------- Cabecera ---------- */
/* Cabecera + pestañas van juntas en un bloque pegajoso: el menú no se esconde
   nunca al hacer scroll (en móvil las pestañas siguen abajo, fijas). */
.chrome-fijo { position: sticky; top: 0; z-index: 50; }
.cabecera {
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: var(--cabecera-alto);
  padding: 6px 14px;
  padding-top: calc(6px + env(safe-area-inset-top));
  background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-secondary) 100%);
  color: #fff;
  box-shadow: var(--shadow-sm);
}
.cabecera a { color: #fff; text-decoration: none; }
.cabecera-marca { display: flex; align-items: center; gap: 10px; min-width: 0; font-weight: 700; font-size: 17px; color: #fff; }
.cabecera-marca img { width: 36px; height: 36px; border-radius: 50%; background: #fff; object-fit: cover; flex: none; }
.cabecera-usuario { margin-left: auto; display: flex; align-items: center; gap: 10px; min-width: 0; }
.cabecera-nombre { font-size: 14px; font-weight: 600; color: #fff; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 42vw; }
.cabecera-salir {
  display: inline-flex; align-items: center; gap: 6px;
  min-height: 44px; min-width: 44px; padding: 0 10px;
  border-radius: var(--border-radius-lg);
  background: rgba(255, 255, 255, 0.14);
  color: #fff; font-size: 13px; font-weight: 600;
}
.cabecera-salir svg { width: 20px; height: 20px; }

/* ---------- Pestañas (nav) ---------- */
.pestanas { display: flex; background: var(--bg-card); border-bottom: 1px solid var(--border-panel); }
.pestanas a {
  flex: 1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px;
  min-height: var(--nav-alto); padding: 6px 4px;
  font-size: 12px; font-weight: 600; color: var(--text-secondary); text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}
.pestanas svg { width: 24px; height: 24px; stroke: currentColor; fill: none; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }
.pestanas a.activa { color: var(--color-primary); }

/* ---------- Contenido ---------- */
.contenido { padding: 14px 12px 24px; }

@media (max-width: 767px) {
  .pestanas {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 50;
    border-top: 1px solid var(--border-panel); border-bottom: 0;
    padding-bottom: env(safe-area-inset-bottom);
    box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.06);
  }
  .pestanas a.activa { position: relative; }
  .pestanas a.activa::after { content: ''; position: absolute; top: 0; left: 25%; right: 25%; height: 3px; border-radius: 0 0 3px 3px; background: var(--azul-accion); }
  .contenido { padding-bottom: calc(var(--nav-alto) + 20px + env(safe-area-inset-bottom)); }
}
@media (min-width: 768px) {
  .cabecera { padding: 8px 24px; }
  .cabecera-nombre { max-width: 320px; }
  .pestanas { justify-content: center; gap: 8px; }
  .pestanas a { flex: 0 0 auto; flex-direction: row; gap: 8px; min-width: 150px; min-height: 52px; padding: 10px 22px; font-size: 14px; border-bottom: 3px solid transparent; }
  .pestanas a.activa { border-bottom-color: var(--azul-accion); }
  .contenido { max-width: 1100px; margin: 0 auto; padding: 24px 20px 40px; }
}

/* ---------- Tarjeta ---------- */
.tarjeta {
  background: var(--bg-card);
  border: 1px solid var(--border-panel);
  border-radius: var(--border-radius-xl);
  box-shadow: var(--shadow-md);
  overflow: hidden;
  margin-bottom: 14px;
}
.tarjeta-cabecera {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 12px 16px;
  /* Azul claro propio: las cabeceras de tarjeta no deben confundirse con la barra
     superior de la aplicación, que va en el azul primario. */
  background: linear-gradient(135deg, var(--cabecera-tarjeta-1) 0%, var(--cabecera-tarjeta-2) 100%);
  color: #fff;
}
.tarjeta-cabecera h1, .tarjeta-cabecera h2, .tarjeta-cabecera h3, .tarjeta-cabecera a, .tarjeta-cabecera span { color: #fff; margin: 0; }
.tarjeta-cabecera h2 { font-size: 16px; }
.tarjeta-cabecera .badge { background: rgba(255, 255, 255, 0.18); color: #fff; border-color: transparent; }
.tarjeta-cuerpo { padding: 14px 16px; }
.tarjeta-pie { padding: 10px 16px; border-top: 1px solid var(--border-light); background: var(--bg-panel); }

/* ---------- Botones (≥ 44 px táctiles) ---------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 44px; padding: 10px 18px;
  border: 1px solid var(--border-default); border-radius: var(--border-radius-lg);
  background: #fff; color: var(--text-primary);
  font: inherit; font-weight: 600; font-size: 15px; line-height: 1.2;
  cursor: pointer; text-decoration: none; text-align: center;
  touch-action: manipulation; -webkit-tap-highlight-color: transparent;
  transition: background .15s, border-color .15s, opacity .15s;
}
.btn svg { width: 20px; height: 20px; flex: none; }
.btn:hover { background: var(--bg-panel); }
.btn:disabled, .btn[aria-disabled="true"] { opacity: .6; cursor: not-allowed; }
.btn-primario { background: var(--azul-accion); border-color: var(--azul-accion); color: #fff; }
.btn-primario:hover { background: var(--azul-accion-oscuro); border-color: var(--azul-accion-oscuro); }
.btn-secundario { background: #fff; border-color: var(--color-secondary); color: var(--color-secondary); }
.btn-secundario:hover { background: #eaf1fb; }
.btn-peligro { background: var(--color-danger); border-color: var(--color-danger); color: #fff; }
.btn-peligro:hover { background: #b52626; border-color: #b52626; }
.btn-bloque { width: 100%; }
.btn-pequeno { min-height: 40px; padding: 6px 12px; font-size: 14px; }
.btn-enlace { background: none; border: 0; color: var(--color-secondary); text-decoration: underline; padding: 8px 10px; min-height: 44px; font: inherit; font-weight: 600; cursor: pointer; }
.acciones { display: flex; gap: 10px; flex-wrap: wrap; }
.acciones .btn { flex: 1 1 auto; }
@media (min-width: 560px) { .acciones .btn { flex: 0 1 auto; } }

/* ---------- Badges y estados ---------- */
.badge, .estado-badge {
  display: inline-block; padding: 3px 10px; border-radius: 12px;
  font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .3px;
  background: var(--bg-panel); color: var(--text-secondary); border: 1px solid var(--border-panel);
  white-space: nowrap;
}
.estado-pagado     { background: #eef4de; color: #5a7a1e; border-color: #b8d46a; }
.estado-nopagado   { background: #fde8e8; color: #b83232; border-color: #f5a0a0; }
.estado-tramite    { background: var(--estado-en-tramite); color: #fff; border-color: #2563eb; }
.estado-tramitando { background: #06b6d4; color: #fff; border-color: #0891b2; }
.estado-pendiente  { background: #f59e0b; color: #fff; border-color: #d97706; }
.estado-expedido, .estado-inscrito, .estado-tramitado { background: var(--estado-tramitado); color: #fff; border-color: #15803d; }
.estado-enviado, .estado-prov-enviado { background: var(--estado-prov-enviado); color: #fff; border-color: #c2410c; }
.estado-titulo-enviado { background: var(--estado-titulo-enviado); color: #fff; border-color: #6d28d9; }
.estado-devuelto   { background: var(--estado-devuelto); color: #fff; border-color: #0f766e; }
.estado-visado-prov       { background: var(--estado-visado-prov); color: #fff; border-color: #c2410c; }
.estado-visado-firmado    { background: var(--estado-visado-firmado); color: #fff; border-color: #6d28d9; }
.estado-visado-completado { background: var(--estado-visado-completado); color: #fff; border-color: #15803d; }
.estado-incidencia { background: var(--estado-incidencia); color: #fff; border-color: #b91c1c; }

/* ---------- Chip (y chip de tipo de práctica) ---------- */
.chip {
  display: inline-flex; align-items: center; gap: 6px;
  min-height: 32px; padding: 4px 12px; border-radius: 999px;
  font-size: 13px; font-weight: 600;
  background: var(--bg-panel); border: 1px solid var(--border-panel); color: var(--text-primary);
}
.chip-tipo { color: #fff; border-color: transparent; }
.tipo-TITULIN { background: var(--tipo-TITULIN); }
.tipo-MOTOR-PNB { background: var(--tipo-MOTOR-PNB); }
.tipo-MOTOR-PER { background: var(--tipo-MOTOR-PER); }
.tipo-MOTOR-PY-CY { background: var(--tipo-MOTOR-PY-CY); }
.tipo-COMPLEMENTARIA { background: var(--tipo-COMPLEMENTARIA); }
.tipo-COMPLE_VELA { background: var(--tipo-COMPLE_VELA); }
.tipo-TANGER-COMPLE_VELA { background: var(--tipo-TANGER-COMPLE_VELA); }
.tipo-TANGER-MOTOR-PY-CY { background: var(--tipo-TANGER-MOTOR-PY-CY); }
.tipo-VELA { background: var(--tipo-VELA); }
.tipo-RADIO-PNB { background: var(--tipo-RADIO-PNB); color: #333; }
.tipo-RADIO-TEORIA { background: var(--tipo-RADIO-TEORIA); }
.tipo-RADIO-PRACTICA { background: var(--tipo-RADIO-PRACTICA); }
.tipo-OTRO { background: var(--tipo-OTRO); }

/* ---------- Dropzone ---------- */
.dropzone {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px;
  min-height: 120px; padding: 18px;
  border: 2px dashed var(--color-primary-light); border-radius: var(--border-radius-xl);
  background: var(--bg-panel); color: var(--text-secondary); text-align: center;
  cursor: pointer; transition: background .15s, border-color .15s;
}
.dropzone svg { width: 32px; height: 32px; stroke: currentColor; fill: none; stroke-width: 1.6; }
.dropzone.arrastrando { border-color: var(--color-primary); background: #eaf1fb; color: var(--color-primary); }
.dropzone.cargando { pointer-events: none; opacity: .7; border-style: solid; }
.dropzone input[type="file"] { display: none; }

/* ---------- Lista vacía ---------- */
.lista-vacia {
  padding: 28px 16px; text-align: center; color: var(--text-muted); font-size: 14px;
  background: var(--bg-panel); border: 1px dashed var(--border-panel); border-radius: var(--border-radius-xl);
}

/* ---------- Barra de progreso ---------- */
.barra-progreso { height: 8px; border-radius: 999px; background: var(--border-light); overflow: hidden; }
.barra-progreso > span { display: block; height: 100%; width: 0; border-radius: 999px; background: var(--azul-accion); transition: width .3s; }

/* ---------- Formularios ---------- */
.campo { margin-bottom: 14px; }
.campo label { display: block; font-size: 13px; font-weight: 600; color: var(--text-secondary); margin-bottom: 6px; }
.campo input:not([type="checkbox"]):not([type="radio"]), .campo select, .campo textarea, .entrada {
  width: 100%; min-height: 46px; padding: 10px 12px;
  border: 1px solid var(--border-default); border-radius: var(--border-radius-lg);
  font: inherit; font-size: 16px; /* 16px evita el zoom automático de iOS */
  color: var(--text-primary); background: #fff;
}
.campo textarea { min-height: 96px; resize: vertical; }
.campo input:focus-visible, .campo select:focus-visible, .campo textarea:focus-visible, .btn:focus-visible {
  outline: 2px solid var(--color-secondary-light); outline-offset: 1px;
}
.ayuda { font-size: 12.5px; color: var(--text-muted); margin-top: 4px; }
.mensaje { padding: 10px 12px; border-radius: var(--border-radius-lg); font-size: 14px; margin: 0 0 12px; border: 1px solid var(--border-panel); background: var(--bg-panel); }
.mensaje-error { background: #fde8e8; color: #b83232; border-color: #f5a0a0; }
.mensaje-info { background: #eaf1fb; color: var(--color-primary); border-color: #c7d7ee; }
.mensaje-exito { background: #eef8f0; color: #1f7a3f; border-color: #b7e1c1; }
.mensaje-aviso { background: #fff8e1; color: #6b5b1e; border-color: #ffe9a8; }

/* ---------- Filas de datos (dos columnas → una en ≤560px) ---------- */
.fila-datos { display: grid; grid-template-columns: 1fr 1fr; gap: 10px 14px; }
.dato-etiqueta { display: block; font-size: 11.5px; text-transform: uppercase; letter-spacing: .3px; color: var(--text-muted); }
.dato-valor { font-weight: 600; word-break: break-word; }
@media (max-width: 560px) { .fila-datos { grid-template-columns: 1fr; } }

/* ---------- Spinner ---------- */
.spinner { display: inline-block; width: 18px; height: 18px; border: 2px solid rgba(255, 255, 255, 0.35); border-top-color: currentColor; border-radius: 50%; animation: girar .7s linear infinite; }
@keyframes girar { to { transform: rotate(360deg); } }

/* ---------- Diálogo base (<dialog id="uiDialog">) ---------- */
dialog.ui-dialog {
  border: 0; padding: 0; background: transparent;
  width: calc(100vw - 24px); max-width: 520px;
  max-height: 92vh; max-height: 92dvh;
  margin: auto;
}
dialog.ui-dialog.ancha { max-width: 820px; }
dialog.ui-dialog::backdrop { background: rgba(15, 31, 61, 0.55); }
.ui-dialog-caja {
  display: flex; flex-direction: column;
  max-height: 92vh; max-height: 92dvh;
  background: #fff; border-radius: var(--border-radius-xl); box-shadow: var(--shadow-lg); overflow: hidden;
}
.ui-dialog-cabecera {
  display: flex; align-items: center; gap: 10px; padding: 8px 8px 8px 16px;
  background: linear-gradient(135deg, var(--cabecera-tarjeta-1) 0%, var(--cabecera-tarjeta-2) 100%);
  color: #fff;
}
.ui-dialog-cabecera h2 { flex: 1; margin: 0; font-size: 16px; color: #fff; }
.ui-dialog-cerrar { min-width: 44px; min-height: 44px; border: 0; background: transparent; color: #fff; font-size: 28px; line-height: 1; cursor: pointer; border-radius: 8px; }
.ui-dialog-cerrar:hover { background: rgba(255, 255, 255, 0.15); }
.ui-dialog-cuerpo { flex: 1 1 auto; padding: 16px; overflow: auto; -webkit-overflow-scrolling: touch; font-size: 15px; }
.ui-dialog-pie { display: flex; gap: 10px; justify-content: flex-end; flex-wrap: wrap; padding: 12px 16px; border-top: 1px solid var(--border-light); background: var(--bg-panel); }
.ui-dialog-pie .btn { flex: 1 1 auto; }
@media (min-width: 560px) { .ui-dialog-pie .btn { flex: 0 0 auto; } }
.ui-dialog-peligro .ui-dialog-cabecera, .ui-dialog-error .ui-dialog-cabecera { background: linear-gradient(135deg, #b91c1c 0%, var(--color-danger) 100%); }
.ui-dialog-success .ui-dialog-cabecera { background: linear-gradient(135deg, #1e8449 0%, var(--color-success) 100%); }
.ui-dialog-warning .ui-dialog-cabecera { background: linear-gradient(135deg, #b9770e 0%, var(--color-warning) 100%); }

/* ---------- Toasts ---------- */
.toasts {
  position: fixed; left: 12px; right: 12px; z-index: 200;
  bottom: calc(var(--nav-alto) + 12px + env(safe-area-inset-bottom));
  display: flex; flex-direction: column; gap: 8px; align-items: center; pointer-events: none;
}
.toast {
  pointer-events: auto; max-width: 480px; padding: 11px 16px; border-radius: 10px;
  background: #1f2937; color: #fff; font-size: 14px; font-weight: 600;
  box-shadow: var(--shadow-lg); animation: toast-entra .25s ease;
}
.toast-success { background: var(--color-success); }
.toast-error { background: var(--color-danger); }
.toast-info { background: var(--color-secondary); }
.toast-saliendo { opacity: 0; transition: opacity .3s; }
@keyframes toast-entra { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@media (min-width: 768px) { .toasts { left: auto; right: 20px; bottom: 20px; align-items: flex-end; } }

/* ---------- Aviso de vista de solo lectura (enlace mágico desde GESTION) ----------
   Reutiliza los colores de .mensaje-aviso para no inventar una paleta nueva. */
.aviso-delegada {
  display: flex; align-items: flex-start; gap: 10px;
  background: #fff8e1; color: #6b5b1e; border-bottom: 1px solid #ffe9a8;
  padding: 10px 16px; font-size: 13px; line-height: 1.45;
}
.aviso-delegada svg { width: 18px; height: 18px; flex: none; margin-top: 1px; }
.aviso-delegada strong { font-weight: 700; }

/* Sesión delegada (entrada desde GESTION): funciona igual que la del instructor.
   Solo se marca la zona de carga para no olvidar a nombre de quién se está cargando. */
body.delegada .dropzone::after {
  content: 'A nombre del instructor'; position: absolute; top: 8px; right: 10px;
  padding: 2px 8px; border-radius: 999px; font-size: 11px; font-weight: 700;
  background: #fff8e1; color: #6b5b1e; border: 1px solid #ffe9a8;
}
