<?php
// modules/coordinador/titulacion.php
require_once __DIR__ . '/../../config/app.php';
require_once __DIR__ . '/../../config/onedrive.php';
require_once __DIR__ . '/../../includes/OneDriveStorage.php';
require_once __DIR__ . '/../../includes/auth.php';
require_once __DIR__ . '/../../includes/functions.php';
require_once __DIR__ . '/../../includes/flash.php';
requireRol(ROL_COORDINADOR);

$user = currentUser(); $db = getDB(); $pageTitle = 'Titulación — Coordinador';
$idInst = instId(); // multi-tenant

// POST
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $accion = $_POST['accion'] ?? '';

    // ── Subir PDF de preguntas por carrera (inline desde esta página) ──
    if ($accion === 'subir_pdf_carrera') {
        $idC  = (int)($_POST['id_carrera'] ?? 0);
        $desc = trim($_POST['descripcion'] ?? '');
        if ($idC && !empty($_FILES['pdf_preguntas']['name'])) {
            $file = $_FILES['pdf_preguntas'];
            $ext  = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
            if ($ext === 'pdf' && $file['size'] <= 20*1024*1024) {
                $fname = 'carrera_'.$idC.'_'.time().'.pdf';
                try {
                    $rutaOD = OneDriveStorage::upload($file['tmp_name'], 'preguntas_complexivo', $fname, (string)$idC, $idInst);
                    $db->prepare('INSERT INTO preguntas_complexivo (id_carrera,pdf_preguntas,descripcion,subido_por,activo) VALUES (:c,:p,:d,:u,1) ON DUPLICATE KEY UPDATE pdf_preguntas=:p2,descripcion=:d2,subido_por=:u2,activo=1,updated_at=NOW()')
                       ->execute([':c'=>$idC,':p'=>$rutaOD,':d'=>$desc,':u'=>$user['id_usuario'],':p2'=>$rutaOD,':d2'=>$desc,':u2'=>$user['id_usuario']]);
                    flashSet('ok', 'PDF subido correctamente para la carrera.');
                } catch(Exception $e) { flashSet('error', 'Error OneDrive: '.$e->getMessage()); }
            } else { flashSet('error', 'Solo PDF, máximo 20 MB.'); }
        } else { flashSet('error', 'Seleccione carrera y archivo PDF.'); }
        header('Location: titulacion.php'); exit;
    }

    // ── Eliminar PDF de carrera ──
    if ($accion === 'eliminar_pdf_carrera') {
        $idC = (int)($_POST['id_carrera'] ?? 0);
        if ($idC) {
            $r = $db->prepare('SELECT pdf_preguntas FROM preguntas_complexivo WHERE id_carrera=:c');
            $r->execute([':c'=>$idC]); $row = $r->fetch();
            if ($row && $row['pdf_preguntas']) {
                try { OneDriveStorage::delete($row['pdf_preguntas']); } catch(Exception $e) {}
            }
            $db->prepare('DELETE FROM preguntas_complexivo WHERE id_carrera=:c')->execute([':c'=>$idC]);
            flashSet('ok', 'PDF eliminado.');
        }
        header('Location: titulacion.php'); exit;
    }

    if ($accion === 'aprobar_propuesta') {
        $idT = (int)($_POST['id_trabajo'] ?? 0); $idDir = (int)($_POST['id_director'] ?? 0);
        if ($idT) {
            $db->prepare("UPDATE trabajos_titulacion SET estado='aprobada', id_director=:d, fecha_aprobacion=CURDATE() WHERE id_trabajo=:id AND estado='propuesta'")
               ->execute([':d'=>$idDir?:null,':id'=>$idT]);
            $etapas_std = [
                ['Propuesta aprobada','Documento de aprobación de la propuesta',1],
                ['Plan de trabajo','Cronograma y metodología detallada',2],
                ['Borrador del trabajo','Primera versión completa',3],
                ['Revisión del director','Correcciones y observaciones',4],
                ['Versión final','Documento final corregido y aprobado',5],
                ['Defensa pública','Presentación ante tribunal',6],
            ];
            $ins = $db->prepare("INSERT INTO etapas_titulacion (id_trabajo,nombre,descripcion,orden) VALUES (:t,:n,:d,:o)");
            foreach ($etapas_std as $e) $ins->execute([':t'=>$idT,':n'=>$e[0],':d'=>$e[1],':o'=>$e[2]]);
            flashSet('ok', 'Propuesta aprobada y etapas generadas.');
        }
        header('Location: titulacion.php'); exit;
    }

    if ($accion === 'asignar_lector') {
        $idT = (int)($_POST['id_trabajo'] ?? 0); $idU = (int)($_POST['id_usuario'] ?? 0); $rol = $_POST['rol_tribunal'] ?? 'lector';
        if ($idT && $idU) {
            try {
                $db->prepare("INSERT INTO lectores_titulacion (id_trabajo,id_usuario,rol_tribunal) VALUES (:t,:u,:r)")
                   ->execute([':t'=>$idT,':u'=>$idU,':r'=>$rol]);
                flashSet('ok', 'Lector/tribunal asignado.');
            } catch(Exception $e) { flashSet('warn', 'Ya está asignado.'); }
        }
        header('Location: titulacion.php?trabajo=' . $idT); exit;
    }

    if ($accion === 'programar_defensa') {
        $idT = (int)($_POST['id_trabajo'] ?? 0); $fecha = $_POST['fecha_defensa'] ?? ''; $lugar = trim($_POST['lugar_defensa'] ?? '');
        if ($idT && $fecha) {
            $db->prepare("UPDATE trabajos_titulacion SET fecha_defensa=:f, lugar_defensa=:l, estado='defensa' WHERE id_trabajo=:id")
               ->execute([':f'=>$fecha,':l'=>$lugar,':id'=>$idT]);
            flashSet('ok', 'Defensa programada.');
        }
        header('Location: titulacion.php?trabajo=' . $idT); exit;
    }

    if ($accion === 'registrar_notas') {
        $idT = (int)($_POST['id_trabajo'] ?? 0);
        // Todas las notas sobre 100
        $nd  = ($_POST['nota_director'] ?? '') === '' ? null : min(100,max(0,round((float)$_POST['nota_director'],2)));
        $nl  = ($_POST['nota_lector']   ?? '') === '' ? null : min(100,max(0,round((float)$_POST['nota_lector'],  2)));
        $ntr = ($_POST['nota_tribunal'] ?? '') === '' ? null : min(100,max(0,round((float)$_POST['nota_tribunal'],2)));
        if ($idT) {
            // Nota tutor desde titulaciones (ya en escala /100)
            $stNT=$db->prepare("SELECT ti.nota_trabajo AS n100 FROM trabajos_titulacion tt LEFT JOIN titulaciones ti ON ti.id_estudiante=tt.id_estudiante AND ti.modalidad='trabajo_investigacion' WHERE tt.id_trabajo=:id LIMIT 1");
            $stNT->execute([':id'=>$idT]);
            $rowNT=$stNT->fetch();
            $notaTutor=($rowNT&&$rowNT['n100']!==null)?round((float)$rowNT['n100'],2):null;

            $nf100=null; $nf10=null;
            if($nd!==null&&$nl!==null&&$ntr!==null&&$notaTutor!==null){
                $nf100=round(($notaTutor+$nd+$nl+$ntr)/4,2);
                $nf10=round($nf100/10,2);
            } elseif($nd!==null&&$nl!==null&&$ntr!==null){
                $nf100=round(($nd+$nl+$ntr)/3,2);
                $nf10=round($nf100/10,2);
            }
            $estado=$nf100!==null?($nf100>=70?'completado':'reprobado'):'revision';
            $db->prepare("UPDATE trabajos_titulacion SET nota_director=:nd,nota_lector=:nl,nota_tribunal=:ntr,nota_final=:nf,estado=:e WHERE id_trabajo=:id")
               ->execute([':nd'=>$nd,':nl'=>$nl,':ntr'=>$ntr,':nf'=>$nf100,':e'=>$estado,':id'=>$idT]);
            $msg=$nf100!==null
                ?"Notas guardadas. Global: {$nf100}/100 | CES: {$nf10}/10 | ".($nf100>=70?'APROBADO':'REPROBADO')
                :'Notas parciales guardadas. Falta nota del tutor para el global.';
            flashSet('ok',$msg);
        }
        header('Location: titulacion.php?trabajo=' . $idT); exit;
    }

    // ── Registrar notas tribunal (Trabajo de Investigación) ──
    if ($accion === 'registrar_notas_tribunal') {
        $idTit   = (int)($_POST['id_titulacion'] ?? 0);
        $idDir   = (int)($_POST['id_director_trib']  ?? 0) ?: null;
        $idLec   = (int)($_POST['id_lector_trib']    ?? 0) ?: null;
        $idTribu = (int)($_POST['id_tribunal_trib']  ?? 0) ?: null;
        $nd  = ($_POST['t_director'] ?? '')=== '' ? null : min(100,max(0,round((float)$_POST['t_director'],2)));
        $nl  = ($_POST['t_lector']   ?? '')=== '' ? null : min(100,max(0,round((float)$_POST['t_lector'],  2)));
        $ntr = ($_POST['t_tribunal'] ?? '')=== '' ? null : min(100,max(0,round((float)$_POST['t_tribunal'],2)));
        if ($idTit) {
            $stNT = $db->prepare("SELECT nota_trabajo FROM titulaciones WHERE id_titulacion=:id");
            $stNT->execute([':id'=>$idTit]);
            $rowNT = $stNT->fetch();
            $notaTutor = ($rowNT['nota_trabajo']??null)!==null ? round((float)$rowNT['nota_trabajo'],2) : null;
            $ng = null;
            if ($nd!==null&&$nl!==null&&$ntr!==null&&$notaTutor!==null)
                $ng = round(($notaTutor+$nd+$nl+$ntr)/4,2);
            elseif ($nd!==null&&$nl!==null&&$ntr!==null)
                $ng = round(($nd+$nl+$ntr)/3,2);
            $db->prepare("UPDATE titulaciones SET nota_director=:nd,nota_lector=:nl,nota_tribunal=:ntr,nota_global=:ng,id_director_trib=:idd,id_lector_trib=:idl,id_tribunal_trib=:idt WHERE id_titulacion=:id")
               ->execute([':nd'=>$nd,':nl'=>$nl,':ntr'=>$ntr,':ng'=>$ng,':idd'=>$idDir,':idl'=>$idLec,':idt'=>$idTribu,':id'=>$idTit]);
            registrarAudit($user['id'],'registrar_notas_tribunal','titulaciones',$idTit);
            $msg=$ng!==null
                ?"Tribunal guardado. Global: {$ng}/100 | CES: ".round($ng/10,2)."/10 | ".($ng>=70?'APROBADO':'REPROBADO')
                :'Tribunal guardado. Cuando el tutor califique se calculara el global.';
            flashSet('ok',$msg);
        }
        header('Location: titulacion.php#inv'); exit;
    }

    // ── Subir acta firmada ──
    if ($accion === 'subir_acta_firmada') {
        $idTit = (int)($_POST['id_titulacion_acta'] ?? 0);
        if ($idTit && !empty($_FILES['acta_pdf']['name'])) {
            $file = $_FILES['acta_pdf'];
            $ext  = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
            if ($ext === 'pdf' && $file['size'] <= 10*1024*1024) {
                // Borrar acta anterior si existe
                $fname = 'acta_'.$idTit.'_'.time().'.pdf';
                try {
                    OneDriveStorage::upload($file['tmp_name'], 'actas', $fname, (string)$idTit, $idInst);
                    $db->prepare("UPDATE titulaciones SET acta_firmada=:f WHERE id_titulacion=:id")
                       ->execute([':f'=>$fname,':id'=>$idTit]);
                    registrarAudit($user['id'],'subir_acta_firmada','titulaciones',$idTit);
                    flashSet('ok', 'Acta firmada subida correctamente.');
                } catch(Exception $e) { flashSet('err', 'Error OneDrive: '.$e->getMessage()); }
            } else { flashSet('err', 'Solo PDF de hasta 10 MB.'); }
        }
        header('Location: titulacion.php#inv'); exit;
    }

    // ── Asignar tutor a Trabajo de Investigación ──────────────
    if ($accion === 'asignar_tutor_investigacion') {
        $idTit  = (int)($_POST['id_titulacion'] ?? 0);
        $idUsr  = (int)($_POST['id_tutor_inv']  ?? 0);
        if ($idTit) {
            $db->prepare("UPDATE titulaciones SET id_tutor = :u WHERE id_titulacion = :id AND modalidad = 'trabajo_investigacion'")
               ->execute([':u' => $idUsr ?: null, ':id' => $idTit]);
            registrarAudit($user['id'], 'asignar_tutor_investigacion', 'titulaciones', $idTit);
            flashSet('ok', $idUsr ? 'Tutor asignado al trabajo de investigación.' : 'Tutor removido del trabajo de investigación.');
        }
        header('Location: titulacion.php'); exit;
    }
}

// Ver trabajo específico
$trabajoDetalle = null; $etapas = []; $lectores = []; $docentes = [];
$idTrab = (int)($_GET['trabajo'] ?? 0);
if ($idTrab) {
    $q = $db->prepare("SELECT tt.*,CONCAT(u.apellidos,' ',u.nombres) AS estudiante_nombre, CONCAT(ud.apellidos,' ',ud.nombres) AS director_nombre, car.nombre AS carrera FROM trabajos_titulacion tt JOIN estudiantes est ON est.id_estudiante=tt.id_estudiante JOIN usuarios u ON u.id_usuario=est.id_usuario JOIN carreras car ON car.id_carrera=est.id_carrera LEFT JOIN usuarios ud ON ud.id_usuario=tt.id_director WHERE tt.id_trabajo=:id");
    $q->execute([':id' => $idTrab]); $trabajoDetalle = $q->fetch();
    if ($trabajoDetalle) {
        $q2 = $db->prepare("SELECT * FROM etapas_titulacion WHERE id_trabajo=:t ORDER BY orden"); $q2->execute([':t'=>$idTrab]); $etapas = $q2->fetchAll();
        $q3 = $db->prepare("SELECT lt.*,CONCAT(u.apellidos,' ',u.nombres) AS nombre FROM lectores_titulacion lt JOIN usuarios u ON u.id_usuario=lt.id_usuario WHERE lt.id_trabajo=:t"); $q3->execute([':t'=>$idTrab]); $lectores = $q3->fetchAll();
        $docentes = $db->query("SELECT u.id_usuario,CONCAT(u.apellidos,' ',u.nombres) AS nombre FROM usuarios u JOIN roles r ON r.id_rol=u.id_rol WHERE r.nombre IN ('tutor','coordinador','administrador') AND u.activo=1" . ($idInst ? " AND u.id_instituto=$idInst" : "") . " ORDER BY u.apellidos")->fetchAll();
    }
}

// Catálogos
$periodos      = $db->query("SELECT id_periodo, nombre FROM periodos_academicos WHERE 1=1" . ($idInst ? " AND id_instituto=$idInst" : "") . " ORDER BY id_periodo DESC")->fetchAll();
$pa            = $db->query("SELECT id_periodo FROM periodos_academicos WHERE activo=1" . ($idInst ? " AND id_instituto=$idInst" : "") . " LIMIT 1")->fetch();
$idPerActivo   = $pa ? $pa['id_periodo'] : ($periodos[0]['id_periodo'] ?? 0);

// Filtros de la tabla de trabajos
$filtroTrabPeriodo  = (int)($_GET['periodo']   ?? 0);
$filtroTrabCarrera  = (int)($_GET['carrera_t'] ?? 0);
$filtroTrabEstado   = $_GET['estado_t'] ?? '';
$filtroTrabQ        = trim($_GET['qt'] ?? '');

// Construcción dinámica de la query de trabajos
$wTrab = ['1=1'];
$pTrab = [];
if ($idInst) { $wTrab[] = 'car.id_instituto = :inst'; $pTrab[':inst'] = $idInst; }
if ($filtroTrabPeriodo) {
    $wTrab[] = 'est.id_periodo_ingreso = :per';
    $pTrab[':per'] = $filtroTrabPeriodo;
}
if ($filtroTrabCarrera) {
    $wTrab[] = 'est.id_carrera = :car';
    $pTrab[':car'] = $filtroTrabCarrera;
}
if ($filtroTrabEstado) {
    $wTrab[] = 'tt.estado = :est';
    $pTrab[':est'] = $filtroTrabEstado;
}
if ($filtroTrabQ) {
    $wTrab[] = "(CONCAT(u.apellidos,' ',u.nombres) LIKE :q OR tt.titulo LIKE :q2)";
    $pTrab[':q'] = $pTrab[':q2'] = "%$filtroTrabQ%";
}
$wTrabStr = implode(' AND ', $wTrab);

$stTrab = $db->prepare("
    SELECT tt.*,
           CONCAT(u.apellidos,' ',u.nombres) AS estudiante,
           car.nombre AS carrera,
           CONCAT(ud.apellidos,' ',ud.nombres) AS director,
           pe.nombre AS periodo_nombre
    FROM trabajos_titulacion tt
    JOIN estudiantes est ON est.id_estudiante = tt.id_estudiante
    JOIN usuarios u      ON u.id_usuario      = est.id_usuario
    JOIN carreras car    ON car.id_carrera     = est.id_carrera
    LEFT JOIN usuarios ud ON ud.id_usuario    = tt.id_director
    LEFT JOIN periodos_academicos pe ON pe.id_periodo = est.id_periodo_ingreso
    WHERE $wTrabStr
    ORDER BY tt.created_at DESC
");
$stTrab->execute($pTrab);
$trabajos = $stTrab->fetchAll();

// Filtros aprobados
$filtroCarrera = (int)($_GET['carrera'] ?? 0);
$filtroMod     = $_GET['mod'] ?? '';
$filtroPeriodo = (int)($_GET['periodo_ap'] ?? 0);

// Aprobados por Examen Complexivo o Trabajo de Investigación (tabla titulaciones)
$whereExtra = '';
$params = [];
if ($idInst) { $whereExtra .= ' AND car.id_instituto = :inst_ap'; $params[':inst_ap'] = $idInst; }
if ($filtroCarrera) {
    $whereExtra .= ' AND est.id_carrera = :fc';
    $params[':fc'] = $filtroCarrera;
}
if ($filtroMod && in_array($filtroMod, ['examen_complexivo','trabajo_investigacion'])) {
    $whereExtra .= ' AND t.modalidad = :fm';
    $params[':fm'] = $filtroMod;
}
if ($filtroPeriodo) {
    $whereExtra .= ' AND est.id_periodo_ingreso = :fp';
    $params[':fp'] = $filtroPeriodo;
}
// Asegurar columnas del tribunal en titulaciones
try {
    $db->exec("ALTER TABLE titulaciones ADD COLUMN id_tutor INT UNSIGNED DEFAULT NULL AFTER observaciones");
} catch (Exception $e) { /* ya existe */ }
foreach (['nota_director','nota_lector','nota_tribunal','nota_global'] as $_col) {
    try { $db->exec("ALTER TABLE titulaciones ADD COLUMN {$_col} DECIMAL(5,2) NULL"); } catch(Exception $e){}
}
foreach (['id_director_trib','id_lector_trib','id_tribunal_trib'] as $_col) {
    try { $db->exec("ALTER TABLE titulaciones ADD COLUMN {$_col} INT UNSIGNED NULL"); } catch(Exception $e){}
}
try { $db->exec("ALTER TABLE titulaciones ADD COLUMN acta_firmada VARCHAR(255) NULL AFTER nota_global"); } catch(Exception $e){}

$stAp = $db->prepare("
    SELECT t.*,
           CONCAT(u.apellidos,' ',u.nombres) AS estudiante,
           u.cedula,
           u.email,
           car.nombre AS carrera,
           est.id_carrera,
           CONCAT(ututor.apellidos,' ',ututor.nombres) AS tutor_investigacion_nombre,
           CONCAT(udir.apellidos,' ',udir.nombres)   AS nombre_director_trib,
           CONCAT(ulec.apellidos,' ',ulec.nombres)   AS nombre_lector_trib,
           CONCAT(utri.apellidos,' ',utri.nombres)   AS nombre_tribunal_trib,
           t.acta_firmada
    FROM titulaciones t
    JOIN estudiantes est ON est.id_estudiante = t.id_estudiante
    JOIN usuarios u ON u.id_usuario = est.id_usuario
    JOIN carreras car ON car.id_carrera = est.id_carrera
    LEFT JOIN usuarios ututor ON ututor.id_usuario = t.id_tutor
    LEFT JOIN usuarios udir   ON udir.id_usuario   = t.id_director_trib
    LEFT JOIN usuarios ulec   ON ulec.id_usuario   = t.id_lector_trib
    LEFT JOIN usuarios utri   ON utri.id_usuario   = t.id_tribunal_trib
    WHERE t.estado = 'aprobado'
      AND t.modalidad IN ('examen_complexivo','trabajo_investigacion')
      $whereExtra
    ORDER BY t.updated_at DESC
");
$stAp->execute($params);
$aprobados = $stAp->fetchAll();

// PDFs de preguntas del complexivo indexados por id_carrera
$pdfComplexivo = [];
try {
    $rows = $db->query("SELECT pc.id_carrera, pc.pdf_preguntas, pc.activo, pc.descripcion FROM preguntas_complexivo pc JOIN carreras car ON car.id_carrera=pc.id_carrera WHERE 1=1" . ($idInst ? " AND car.id_instituto=$idInst" : ""))->fetchAll();
    foreach ($rows as $r) $pdfComplexivo[$r['id_carrera']] = $r;
} catch (Exception $e) { $pdfComplexivo = []; }

// Carreras activas para sección de subida y filtro
$carrerasActivas = $db->query("SELECT id_carrera, nombre FROM carreras WHERE activa=1" . ($idInst ? " AND id_instituto=$idInst" : "") . " ORDER BY nombre")->fetchAll();

// Tutores disponibles para asignar como tutores de investigación (solo rol tutor)
$docentesTutor = $db->query("
    SELECT u.id_usuario, CONCAT(u.apellidos,' ',u.nombres) AS nombre
    FROM usuarios u
    JOIN roles r ON r.id_rol = u.id_rol
    WHERE r.nombre = 'tutor' AND u.activo = 1" . ($idInst ? " AND u.id_instituto=$idInst" : "") . "
    ORDER BY u.apellidos, u.nombres
")->fetchAll();

// Paginación de aprobados
$pagSize  = in_array((int)($_GET['per_page'] ?? 10), [10,25,50,100]) ? (int)($_GET['per_page'] ?? 10) : 10;
$pagTotal = count($aprobados);
$pagPages = max(1, (int)ceil($pagTotal / $pagSize));
$pagCur   = max(1, min((int)($_GET['pag'] ?? 1), $pagPages));
$aprobadosPag = array_slice($aprobados, ($pagCur - 1) * $pagSize, $pagSize);

// Helper: construir URL manteniendo todos los GET params
function apUrl(array $override = []): string {
    $base = array_merge($_GET, $override);
    return 'titulacion.php?' . http_build_query($base);
}

$modalidades = ['tesis'=>'Tesis','examen_complexivo'=>'Examen complexivo','articulo'=>'Artículo','caso_estudio'=>'Caso de estudio'];
$estBadge    = ['propuesta'=>'st-postulado','aprobada'=>'st-aprobado','en_desarrollo'=>'st-en_progreso','revision'=>'st-en_progreso','predefensa'=>'st-en_progreso','defensa'=>'st-en_progreso','completado'=>'st-completado','reprobado'=>'st-calificado'];
?>
<?php $paginaActual = 'titulacion'; ?>
<!DOCTYPE html>
<html lang="es">
<head>
  <?php include __DIR__.'/../../includes/head.php'; ?>
  <link rel="stylesheet" href="<?= BASE_URL ?>/assets/css/sidebar.css">
<link rel="stylesheet" href="<?= BASE_URL ?>/assets/css/sidebar-coordinador.css">
</head>
<body>
<?php include __DIR__.'/../../includes/navbar.php'; ?>

<div class="app-shell">
  <?php include __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . 'sidebar-coordinador.php'; ?>

  <main class="main-area">

  <?php if ($trabajoDetalle): ?>
    <!-- ══ DETALLE TRABAJO ══ -->
    <div class="page-header d-flex justify-content-between align-items-center flex-wrap gap-2 mb-4">
      <div>
        <a href="titulacion.php" style="font-size:12px;color:#6b7280;text-decoration:none;">
          <i class="fa fa-arrow-left me-1"></i>Volver
        </a>
        <h4 class="mt-1 mb-1"><?= htmlspecialchars($trabajoDetalle['titulo'] ?? 'Sin título') ?></h4>
        <p class="text-muted mb-0" style="font-size:14px;">
          <?= htmlspecialchars($trabajoDetalle['estudiante_nombre']) ?> ·
          <?= htmlspecialchars($trabajoDetalle['carrera']) ?> ·
          <?= $modalidades[$trabajoDetalle['modalidad']] ?? '' ?>
        </p>
      </div>
      <?php $tcls1 = $estBadge[$trabajoDetalle['estado']] ?? 'st-borrador'; ?>
      <span class="badge-estado <?= $tcls1 ?>"><?= str_replace('_', ' ', ucfirst($trabajoDetalle['estado'])) ?></span>
    </div>

    <?= flashHtml() ?>

    <div class="row g-3 mb-4">
      <!-- Acciones rápidas -->
      <div class="col-md-4">
        <div class="card border-0 shadow-sm h-100">
          <div class="card-body">
            <div style="font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:#6b7280;margin-bottom:14px;">
              Acciones
            </div>

            <?php if ($trabajoDetalle['estado'] === 'propuesta'): ?>
            <div class="mb-3">
              <div style="font-size:12px;font-weight:600;margin-bottom:6px;">Aprobar propuesta</div>
              <form method="POST">
                <input type="hidden" name="accion" value="aprobar_propuesta">
                <input type="hidden" name="id_trabajo" value="<?= $idTrab ?>">
                <div class="mb-2">
                  <label class="form-label">Asignar director</label>
                  <select name="id_director" class="form-select form-select-sm">
                    <option value="">Sin director aún</option>
                    <?php foreach ($docentes as $d): ?>
                      <option value="<?= $d['id_usuario'] ?>"><?= htmlspecialchars($d['nombre']) ?></option>
                    <?php endforeach; ?>
                  </select>
                </div>
                <button type="submit" class="btn btn-success btn-sm w-100"
                        onclick="return confirm('¿Aprobar esta propuesta?')">
                  <i class="fa fa-check me-1"></i>Aprobar propuesta
                </button>
              </form>
            </div>
            <?php endif; ?>

            <?php if (in_array($trabajoDetalle['estado'], ['aprobada','en_desarrollo','revision','predefensa'])): ?>
            <div class="mb-3">
              <div style="font-size:12px;font-weight:600;margin-bottom:6px;">Asignar lector / tribunal</div>
              <form method="POST">
                <input type="hidden" name="accion" value="asignar_lector">
                <input type="hidden" name="id_trabajo" value="<?= $idTrab ?>">
                <div class="mb-2">
                  <select name="id_usuario" class="form-select form-select-sm" required>
                    <option value="">— Docente —</option>
                    <?php foreach ($docentes as $d): ?>
                      <option value="<?= $d['id_usuario'] ?>"><?= htmlspecialchars($d['nombre']) ?></option>
                    <?php endforeach; ?>
                  </select>
                </div>
                <div class="mb-2">
                  <select name="rol_tribunal" class="form-select form-select-sm">
                    <option value="lector">Lector</option>
                    <option value="presidente">Presidente tribunal</option>
                    <option value="secretario">Secretario</option>
                  </select>
                </div>
                <button type="submit" class="btn btn-primary btn-sm w-100">
                  <i class="fa fa-user-plus me-1"></i>Asignar
                </button>
              </form>
            </div>

            <div class="mb-3">
              <div style="font-size:12px;font-weight:600;margin-bottom:6px;">Programar defensa</div>
              <form method="POST">
                <input type="hidden" name="accion" value="programar_defensa">
                <input type="hidden" name="id_trabajo" value="<?= $idTrab ?>">
                <div class="mb-2">
                  <input type="date" name="fecha_defensa" class="form-control form-control-sm" required>
                </div>
                <div class="mb-2">
                  <input type="text" name="lugar_defensa" class="form-control form-control-sm" placeholder="Aula, auditorio...">
                </div>
                <button type="submit" class="btn btn-primary btn-sm w-100">
                  <i class="fa fa-calendar me-1"></i>Programar defensa
                </button>
              </form>
            </div>
            <?php endif; ?>

            <?php if (in_array($trabajoDetalle['estado'], ['defensa','revision'])): ?>
            <div>
              <div style="font-size:12px;font-weight:600;margin-bottom:6px;">Registrar notas</div>
              <?php
                $stNTv=$db->prepare("SELECT ti.nota_trabajo AS n100 FROM trabajos_titulacion tt LEFT JOIN titulaciones ti ON ti.id_estudiante=tt.id_estudiante AND ti.modalidad='trabajo_investigacion' WHERE tt.id_trabajo=:id LIMIT 1");
                $stNTv->execute([':id'=>$idTrab]);
                $rowNTv=$stNTv->fetch();
                $ntVal=($rowNTv&&$rowNTv['n100']!==null)?round((float)$rowNTv['n100'],2):null;
              ?>
              <form method="POST">
                <input type="hidden" name="accion" value="registrar_notas">
                <input type="hidden" name="id_trabajo" value="<?= $idTrab ?>">
                <!-- Nota tutor (readonly) -->
                <div class="mb-2">
                  <label class="form-label" style="font-size:11px;color:#6b7280;">Tutor investigacion <small>(automatica)</small></label>
                  <div style="background:#f1f5f9;border:1px solid #e2e8f0;border-radius:6px;padding:5px 10px;font-size:16px;font-weight:700;color:<?= $ntVal&&$ntVal>=70?'#15803d':'#dc2626' ?>;">
                    <?= $ntVal!==null?number_format($ntVal,1).'/100':'<span style="color:#9ca3af;font-size:12px;">Sin calificar</span>' ?>
                  </div>
                </div>
                <!-- Director -->
                <div class="mb-2">
                  <label class="form-label" style="font-size:11px;">Director <span style="color:#6b7280;">/100</span></label>
                  <input type="number" name="nota_director" id="nd" class="form-control form-control-sm"
                         min="0" max="100" step="0.5" placeholder="0-100"
                         value="<?= $trabajoDetalle['nota_director'] ?? '' ?>" oninput="calcGlobal(<?= $ntVal??'null' ?>)">
                </div>
                <!-- Lector -->
                <div class="mb-2">
                  <label class="form-label" style="font-size:11px;">Lector <span style="color:#6b7280;">/100</span></label>
                  <input type="number" name="nota_lector" id="nl" class="form-control form-control-sm"
                         min="0" max="100" step="0.5" placeholder="0-100"
                         value="<?= $trabajoDetalle['nota_lector'] ?? '' ?>" oninput="calcGlobal(<?= $ntVal??'null' ?>)">
                </div>
                <!-- Tribunal -->
                <div class="mb-2">
                  <label class="form-label" style="font-size:11px;">Tribunal <span style="color:#6b7280;">/100</span></label>
                  <input type="number" name="nota_tribunal" id="ntr" class="form-control form-control-sm"
                         min="0" max="100" step="0.5" placeholder="0-100"
                         value="<?= $trabajoDetalle['nota_tribunal'] ?? '' ?>" oninput="calcGlobal(<?= $ntVal??'null' ?>)">
                </div>
                <!-- Preview global -->
                <div id="prev-global" style="display:none;margin:8px 0;padding:8px;border-radius:8px;background:#f0fdf4;border:1px solid #bbf7d0;text-align:center;">
                  <div style="font-size:10px;color:#6b7280;">PROMEDIO GLOBAL (4 notas)</div>
                  <div id="prev-val" style="font-size:22px;font-weight:800;"></div>
                  <div id="prev-ces" style="font-size:11px;color:#6b7280;"></div>
                </div>
                <button type="submit" class="btn btn-success btn-sm w-100 mt-1">
                  <i class="fa fa-star me-1"></i>Guardar notas
                </button>
              </form>
            </div>
            <?php endif; ?>

            <?php if ($trabajoDetalle['nota_final']): ?>
              <?php
                $nfRaw=(float)$trabajoDetalle['nota_final'];
                $nf100v=round($nfRaw,2);
                $nf10v=round($nf100v/10,2);
                $ap100=$nf100v>=70;
              ?>
              <div class="mt-3 p-3 rounded text-center"
                   style="background:<?= $ap100?'#dcfce7':'#fee2e2' ?>;border:1px solid <?= $ap100?'#bbf7d0':'#fecaca' ?>;">
                <div style="font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:<?= $ap100?'#15803d':'#dc2626' ?>;margin-bottom:4px;">NOTA GLOBAL</div>
                <div style="font-size:30px;font-weight:800;color:<?= $ap100?'#15803d':'#dc2626' ?>;line-height:1;">
                  <?= number_format($nf100v,2) ?>/100
                </div>
                <div style="font-size:11px;color:#6b7280;margin-top:4px;">CES: <strong><?= number_format($nf10v,2) ?>/10</strong></div>
                <div style="font-size:12px;font-weight:700;margin-top:6px;color:<?= $ap100?'#15803d':'#dc2626' ?>;">
                  <?= $ap100?'APROBADO':'REPROBADO (min. 70/100)' ?>
                </div>
              </div>
            <?php endif; ?>
          </div>
        </div>
      </div>

      <div class="col-md-8">
        <!-- Etapas -->
        <?php if (!empty($etapas)): ?>
        <div class="card border-0 shadow-sm mb-3">
          <div class="card-body">
            <div style="font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:#6b7280;margin-bottom:14px;">
              Etapas del proceso
            </div>
            <?php foreach ($etapas as $i => $et):
              $etColors = [
                'pendiente'  => ['#9ca3af', '#f3f4f6'],
                'entregado'  => ['#2563eb', '#dbeafe'],
                'aprobado'   => ['#16a34a', '#dcfce7'],
                'observado'  => ['#d97706', '#fef3c7'],
              ];
              [$ec, $ebg] = $etColors[$et['estado']] ?? ['#9ca3af', '#f3f4f6'];
            ?>
            <div class="d-flex align-items-center gap-3 py-2"
                 style="border-bottom:1px solid #f3f4f6;">
              <div style="width:26px;height:26px;border-radius:50%;background:<?= $ebg ?>;border:2px solid <?= $ec ?>;
                          display:flex;align-items:center;justify-content:center;
                          font-size:11px;font-weight:700;color:<?= $ec ?>;flex-shrink:0;">
                <?= $i + 1 ?>
              </div>
              <div style="flex:1;">
                <div style="font-weight:600;font-size:13px;"><?= htmlspecialchars($et['nombre']) ?></div>
                <?php if ($et['fecha_entrega']): ?>
                  <div style="font-size:11px;color:#9ca3af;">Entregado: <?= date('d/m/Y', strtotime($et['fecha_entrega'])) ?></div>
                <?php endif; ?>
              </div>
              <div class="text-end">
                <span style="font-size:11px;font-weight:700;color:<?= $ec ?>;"><?= ucfirst($et['estado']) ?></span>
                <?php if ($et['estado'] === 'entregado'): ?>
                  <div class="mt-1">
                    <form method="POST" style="display:inline">
                      <input type="hidden" name="accion" value="revisar_etapa">
                      <input type="hidden" name="id_etapa" value="<?= $et['id_etapa'] ?>">
                      <input type="hidden" name="nuevo_estado" value="aprobado">
                      <button type="submit" class="btn btn-sm btn-success" style="font-size:10px;padding:2px 8px;">
                        ✓ Aprobar
                      </button>
                    </form>
                  </div>
                <?php endif; ?>
              </div>
            </div>
            <?php endforeach; ?>
          </div>
        </div>
        <?php endif; ?>

        <!-- Tribunal -->
        <?php if (!empty($lectores)): ?>
        <div class="card border-0 shadow-sm">
          <div class="card-body p-0">
            <div class="px-4 pt-3 pb-2" style="font-size:11px;font-weight:700;letter-spacing:1px;text-transform:uppercase;color:#6b7280;">
              Tribunal asignado
            </div>
            <table class="table table-hover mb-0" style="font-size:13px;">
              <thead style="background:#f8f9fa;">
                <tr style="font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;">
                  <th class="px-4 py-2">Docente</th>
                  <th class="py-2">Rol</th>
                  <th class="py-2">Nota</th>
                </tr>
              </thead>
              <tbody>
                <?php foreach ($lectores as $l): ?>
                  <tr>
                    <td class="px-4 py-2"><strong><?= htmlspecialchars($l['nombre']) ?></strong></td>
                    <td class="py-2"><span class="badge-estado st-postulado"><?= ucfirst($l['rol_tribunal']) ?></span></td>
                    <td class="py-2" style="font-weight:700;"><?= $l['nota'] ? number_format($l['nota'], 2) : '—' ?></td>
                  </tr>
                <?php endforeach; ?>
              </tbody>
            </table>
          </div>
        </div>
        <?php endif; ?>
      </div>
    </div>

  <?php else: ?>
    <!-- ══ LISTA TRABAJOS ══ -->
    <div class="page-header d-flex justify-content-between align-items-center flex-wrap gap-2 mb-4">
      <div>
        <h4 class="mb-1"><i class="fa fa-graduation-cap me-2" style="color:#f59e0b;"></i>Titulación</h4>
        <p class="text-muted mb-0" style="font-size:14px;">Historial de trabajos de grado por ciclo y carrera</p>
      </div>
    </div>

    <?= flashHtml() ?>

    <!-- ══ FILTROS TRABAJOS ══ -->
    <div class="card shadow-sm border-0 mb-4">
      <div class="card-body py-3">
        <form method="GET" class="row g-2 align-items-end">
          <!-- Período -->
          <div class="col-sm-6 col-md-3">
            <label class="form-label" style="font-size:11px;font-weight:700;text-transform:uppercase;color:#6b7280;">Ciclo / Período</label>
            <select name="periodo" class="form-select form-select-sm">
              <option value="0">— Todos los períodos —</option>
              <?php foreach ($periodos as $p): ?>
              <option value="<?= $p['id_periodo'] ?>" <?= $filtroTrabPeriodo==$p['id_periodo'] ? 'selected' : '' ?>>
                <?= htmlspecialchars($p['nombre']) ?><?= $p['id_periodo']==$idPerActivo ? ' ★ activo' : '' ?>
              </option>
              <?php endforeach; ?>
            </select>
          </div>
          <!-- Carrera -->
          <div class="col-sm-6 col-md-3">
            <label class="form-label" style="font-size:11px;font-weight:700;text-transform:uppercase;color:#6b7280;">Carrera</label>
            <select name="carrera_t" class="form-select form-select-sm">
              <option value="0">— Todas las carreras —</option>
              <?php foreach ($carrerasActivas as $c): ?>
              <option value="<?= $c['id_carrera'] ?>" <?= $filtroTrabCarrera==$c['id_carrera'] ? 'selected' : '' ?>><?= htmlspecialchars($c['nombre']) ?></option>
              <?php endforeach; ?>
            </select>
          </div>
          <!-- Estado -->
          <div class="col-sm-6 col-md-2">
            <label class="form-label" style="font-size:11px;font-weight:700;text-transform:uppercase;color:#6b7280;">Estado</label>
            <select name="estado_t" class="form-select form-select-sm">
              <option value="">— Todos —</option>
              <option value="propuesta"     <?= $filtroTrabEstado==='propuesta'     ? 'selected' : '' ?>>Propuesta</option>
              <option value="aprobada"      <?= $filtroTrabEstado==='aprobada'      ? 'selected' : '' ?>>Aprobada</option>
              <option value="en_desarrollo" <?= $filtroTrabEstado==='en_desarrollo' ? 'selected' : '' ?>>En desarrollo</option>
              <option value="revision"      <?= $filtroTrabEstado==='revision'      ? 'selected' : '' ?>>En revisión</option>
              <option value="defensa"       <?= $filtroTrabEstado==='defensa'       ? 'selected' : '' ?>>Defensa</option>
              <option value="completado"    <?= $filtroTrabEstado==='completado'    ? 'selected' : '' ?>>Completado</option>
              <option value="reprobado"     <?= $filtroTrabEstado==='reprobado'     ? 'selected' : '' ?>>Reprobado</option>
            </select>
          </div>
          <!-- Búsqueda -->
          <div class="col-sm-6 col-md-3">
            <label class="form-label" style="font-size:11px;font-weight:700;text-transform:uppercase;color:#6b7280;">Buscar estudiante / título</label>
            <input type="text" name="qt" class="form-control form-control-sm" value="<?= htmlspecialchars($filtroTrabQ) ?>" placeholder="Nombre o título...">
          </div>
          <!-- Botones -->
          <div class="col-auto d-flex gap-2">
            <button type="submit" class="btn btn-primary btn-sm"><i class="fa fa-filter me-1"></i>Filtrar</button>
            <a href="titulacion.php" class="btn btn-outline-secondary btn-sm"><i class="fa fa-xmark me-1"></i>Limpiar</a>
          </div>
        </form>
      </div>
    </div>

    <!-- Indicador de filtro activo -->
    <?php if ($filtroTrabPeriodo || $filtroTrabCarrera || $filtroTrabEstado || $filtroTrabQ):
      $pNom = 'Todos los períodos';
      foreach ($periodos as $p) { if ($p['id_periodo']==$filtroTrabPeriodo) { $pNom=$p['nombre']; break; } }
      $cNom = 'Todas las carreras';
      foreach ($carrerasActivas as $c) { if ($c['id_carrera']==$filtroTrabCarrera) { $cNom=$c['nombre']; break; } }
    ?>
    <div style="font-size:12px;color:#6b7280;margin-bottom:12px;padding:8px 12px;background:#f8fafc;border-radius:8px;border:1px solid #e2e8f0;">
      <i class="fa fa-filter me-1 text-primary"></i>
      Mostrando: <strong><?= htmlspecialchars($pNom) ?></strong>
      <?php if ($filtroTrabCarrera): ?> · Carrera: <strong><?= htmlspecialchars($cNom) ?></strong><?php endif; ?>
      <?php if ($filtroTrabEstado): ?> · Estado: <strong><?= str_replace('_',' ',ucfirst($filtroTrabEstado)) ?></strong><?php endif; ?>
      <?php if ($filtroTrabQ): ?> · Búsqueda: <strong>"<?= htmlspecialchars($filtroTrabQ) ?>"</strong><?php endif; ?>
      · <strong><?= count($trabajos) ?></strong> resultado(s)
    </div>
    <?php endif; ?>

    <!-- Stats -->
    <?php
    $tots  = array_count_values(array_column($trabajos, 'estado'));
    $enProceso = ($tots['aprobada'] ?? 0) + ($tots['en_desarrollo'] ?? 0) + ($tots['revision'] ?? 0) + ($tots['defensa'] ?? 0);
    $aprobadosComplexivo    = count(array_filter($aprobados, fn($a) => $a['modalidad'] === 'examen_complexivo'));
    $aprobadosInvestigacion = count(array_filter($aprobados, fn($a) => $a['modalidad'] === 'trabajo_investigacion'));
    ?>
    <div class="row g-3 mb-4">
      <div class="col-6 col-md-2">
        <div class="card border-0 shadow-sm text-center py-3">
          <div style="font-size:26px;font-weight:800;color:#2563eb;"><?= count($trabajos) ?></div>
          <div style="font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;">Total trabajos</div>
        </div>
      </div>
      <div class="col-6 col-md-2">
        <div class="card border-0 shadow-sm text-center py-3">
          <div style="font-size:26px;font-weight:800;color:#f59e0b;"><?= $tots['propuesta'] ?? 0 ?></div>
          <div style="font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;">Propuestas nuevas</div>
        </div>
      </div>
      <div class="col-6 col-md-2">
        <div class="card border-0 shadow-sm text-center py-3">
          <div style="font-size:26px;font-weight:800;color:#d97706;"><?= $enProceso ?></div>
          <div style="font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;">En proceso</div>
        </div>
      </div>
      <div class="col-6 col-md-2">
        <div class="card border-0 shadow-sm text-center py-3">
          <div style="font-size:26px;font-weight:800;color:#16a34a;"><?= $tots['completado'] ?? 0 ?></div>
          <div style="font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;">Completados</div>
        </div>
      </div>
      <div class="col-6 col-md-2">
        <div class="card border-0 shadow-sm text-center py-3" style="border-top:3px solid #3b82f6 !important;">
          <div style="font-size:26px;font-weight:800;color:#3b82f6;"><?= $aprobadosComplexivo ?></div>
          <div style="font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;">Aprob. Complexivo</div>
        </div>
      </div>
      <div class="col-6 col-md-2">
        <div class="card border-0 shadow-sm text-center py-3" style="border-top:3px solid #eab308 !important;">
          <div style="font-size:26px;font-weight:800;color:#ca8a04;"><?= $aprobadosInvestigacion ?></div>
          <div style="font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;">Aprob. Investigación</div>
        </div>
      </div>
    </div>

    <!-- Tabla trabajos -->
    <div class="card shadow-sm border-0">
      <div class="card-body p-0">
        <table class="table table-hover mb-0" style="font-size:13px;">
          <thead style="background:#f8f9fa;">
            <tr style="font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;">
              <th class="px-3 py-3">Estudiante</th>
              <th class="py-3">Período</th>
              <th class="py-3">Carrera</th>
              <th class="py-3">Modalidad</th>
              <th class="py-3">Título</th>
              <th class="py-3">Director</th>
              <th class="py-3">Estado</th>
              <th class="py-3 text-center">Nota</th>
              <th class="py-3">Acciones</th>
            </tr>
          </thead>
          <tbody>
            <?php if (empty($trabajos)): ?>
              <tr><td colspan="9" class="text-center text-muted py-5">
                <i class="fa fa-magnifying-glass fa-2x mb-2 d-block" style="color:#d1d5db;"></i>
                No se encontraron trabajos con los filtros seleccionados.<br>
                <a href="titulacion.php" class="btn btn-outline-secondary btn-sm mt-2"><i class="fa fa-xmark me-1"></i>Limpiar filtros</a>
              </td></tr>
            <?php else: foreach ($trabajos as $t): ?>
              <tr>
                <td class="px-3 py-2"><strong><?= htmlspecialchars($t['estudiante']) ?></strong></td>
                <td class="py-2">
                  <span style="font-size:11px;padding:2px 8px;border-radius:20px;font-weight:600;
                    background:<?= ($t['periodo_nombre'] && strpos($t['periodo_nombre'], '★') !== false) ? '#f0fdf4' : '#f1f5f9' ?>;
                    color:#475569;border:1px solid #e2e8f0;">
                    <?= htmlspecialchars($t['periodo_nombre'] ?? '—') ?>
                  </span>
                </td>
                <td class="py-2" style="font-size:12px;color:#6b7280;"><?= htmlspecialchars($t['carrera']) ?></td>
                <td class="py-2">
                  <span style="font-size:11px;padding:2px 8px;border-radius:6px;background:#fef3c7;color:#92400e;font-weight:600;">
                    <?= $modalidades[$t['modalidad']] ?? $t['modalidad'] ?>
                  </span>
                </td>
                <td class="py-2" style="font-size:12px;max-width:180px;">
                  <?= htmlspecialchars(substr($t['titulo'] ?? 'Sin título', 0, 55)) ?><?= strlen($t['titulo'] ?? '') > 55 ? '…' : '' ?>
                </td>
                <td class="py-2" style="font-size:12px;color:#6b7280;"><?= htmlspecialchars($t['director'] ?? '—') ?></td>
                <td class="py-2">
                  <?php $tcls2 = $estBadge[$t['estado']] ?? 'st-borrador'; ?>
                  <span class="badge-estado <?= $tcls2 ?>"><?= str_replace('_', ' ', ucfirst($t['estado'])) ?></span>
                </td>
                <td class="py-2 text-center">
                  <?php if ($t['nota_final']): ?>
                    <strong style="color:<?= $t['nota_final'] >= 7 ? '#16a34a' : '#dc2626' ?>;">
                      <?= number_format($t['nota_final'], 2) ?>
                    </strong>
                  <?php else: ?>
                    <span style="color:#9ca3af;">—</span>
                  <?php endif; ?>
                </td>
                <td class="py-2">
                  <a href="titulacion.php?trabajo=<?= $t['id_trabajo'] ?>"
                     class="btn btn-sm btn-outline-secondary">
                    <i class="fa fa-eye me-1"></i>Ver
                  </a>
                </td>
              </tr>
            <?php endforeach; endif; ?>
          </tbody>
        </table>
      </div>
    </div>

  <?php endif; ?>

  <?php if (!$trabajoDetalle): ?>
  <!-- ══ APROBADOS — EXAMEN COMPLEXIVO / TRABAJO DE INVESTIGACIÓN ══ -->

  <?= flashHtml() ?>

  <!-- Fila 1: título + badge -->
  <div class="d-flex align-items-center gap-2 mb-2 mt-4 flex-wrap">
    <span style="display:inline-flex;align-items:center;gap:6px;background:#dcfce7;color:#15803d;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:4px 12px;border-radius:20px;">
      <i class="fa fa-circle-check"></i> Aprobados · Examen Complexivo / Trabajo de Investigación
    </span>
    <span class="badge bg-success"><?= $pagTotal ?></span>
    <?php if ($filtroCarrera || $filtroMod || $filtroPeriodo): ?>
      <a href="titulacion.php?per_page=<?= $pagSize ?>" style="font-size:11px;color:#6b7280;text-decoration:none;border:1px solid #e2e8f0;border-radius:6px;padding:2px 8px;">
        <i class="fa fa-xmark me-1"></i>Limpiar filtros
      </a>
    <?php endif; ?>
  </div>

  <!-- Fila 2: filtros + paginador -->
  <form method="GET" class="d-flex align-items-center flex-wrap gap-2 mb-3">
    <input type="hidden" name="per_page" value="<?= $pagSize ?>">
    <input type="hidden" name="pag" value="1">

    <!-- Filtro Período -->
    <select name="periodo_ap" class="form-select form-select-sm" style="width:auto;min-width:170px;font-size:12px;"
            onchange="this.form.submit()">
      <option value="0">Todos los períodos</option>
      <?php foreach ($periodos as $p): ?>
        <option value="<?= $p['id_periodo'] ?>" <?= $filtroPeriodo==$p['id_periodo'] ? 'selected' : '' ?>>
          <?= htmlspecialchars($p['nombre']) ?><?= $p['id_periodo']==$idPerActivo ? ' ★' : '' ?>
        </option>
      <?php endforeach; ?>
    </select>

    <!-- Filtro Carrera -->
    <select name="carrera" class="form-select form-select-sm" style="width:auto;min-width:180px;font-size:12px;"
            onchange="this.form.submit()">
      <option value="">Todas las carreras</option>
      <?php foreach ($carrerasActivas as $car): ?>
        <option value="<?= $car['id_carrera'] ?>" <?= $filtroCarrera==$car['id_carrera'] ? 'selected' : '' ?>>
          <?= htmlspecialchars($car['nombre']) ?>
        </option>
      <?php endforeach; ?>
    </select>

    <!-- Filtro Modalidad -->
    <select name="mod" class="form-select form-select-sm" style="width:auto;min-width:180px;font-size:12px;"
            onchange="this.form.submit()">
      <option value="">Todas las modalidades</option>
      <option value="examen_complexivo"     <?= $filtroMod==='examen_complexivo'     ? 'selected' : '' ?>>Examen Complexivo</option>
      <option value="trabajo_investigacion" <?= $filtroMod==='trabajo_investigacion' ? 'selected' : '' ?>>Trabajo de Investigación</option>
    </select>

    <div class="ms-auto d-flex align-items-center gap-2" style="font-size:13px;">
      <span style="color:#6b7280;font-weight:500;">Mostrar</span>
      <?php foreach ([10,25,50,100] as $ps): ?>
        <a href="<?= apUrl(['per_page'=>$ps,'pag'=>1]) ?>"
           style="display:inline-block;padding:3px 10px;border-radius:6px;font-size:12px;font-weight:600;text-decoration:none;
                  <?= $pagSize===$ps ? 'background:#2563eb;color:#fff;' : 'background:#f1f5f9;color:#374151;border:1px solid #e2e8f0;' ?>">
          <?= $ps ?>
        </a>
      <?php endforeach; ?>
      <span style="color:#6b7280;">por página</span>
    </div>
  </form>

  <div class="card shadow-sm border-0 mb-4">
    <div class="card-body p-0">
      <table class="table table-hover mb-0" style="font-size:13px;">
        <thead style="background:#f0fdf4;">
          <tr style="font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#166534;">
            <th class="px-3 py-3">#</th>
            <th class="py-3">Estudiante</th>
            <th class="py-3">Modalidad</th>
            <th class="py-3">Tema</th>
            <th class="py-3">Tutor investigación</th>
            <th class="py-3 text-center">Nota tutor</th>
            <th class="py-3 text-center">Notas tribunal</th>
            <th class="py-3">Fecha aprobación</th>
            <th class="py-3">Estado</th>
          </tr>
        </thead>
        <tbody>
          <?php foreach ($aprobadosPag as $i => $ap):
            $globalI = ($pagCur-1)*$pagSize + $i;
            $esInv   = $ap['modalidad'] === 'trabajo_investigacion';
            $esCompl = $ap['modalidad'] === 'examen_complexivo';
          ?>
          <tr>
            <td class="px-3 py-2" style="color:#9ca3af;font-size:12px;"><?= $globalI + 1 ?></td>
            <td class="py-2">
              <strong><?= htmlspecialchars($ap['estudiante']) ?></strong>
              <div style="font-size:11px;color:#374151;margin-top:2px;">
                <i class="fa fa-id-card me-1" style="color:#9ca3af;"></i><?= htmlspecialchars($ap['cedula']) ?>
                &nbsp;&middot;&nbsp;
                <i class="fa fa-graduation-cap me-1" style="color:#9ca3af;"></i><?= htmlspecialchars($ap['carrera']) ?>
              </div>
              <div style="font-size:10px;color:#9ca3af;margin-top:1px;"><?= htmlspecialchars($ap['email']) ?></div>
            </td>
            <td class="py-2">
              <?php if ($ap['modalidad'] === 'examen_complexivo'): ?>
                <span style="font-size:11px;padding:2px 8px;border-radius:6px;background:#dbeafe;color:#1e40af;font-weight:600;">
                  <i class="fa fa-file-pen me-1"></i>Examen Complexivo
                </span>
              <?php else: ?>
                <span style="font-size:11px;padding:2px 8px;border-radius:6px;background:#fef9c3;color:#854d0e;font-weight:600;">
                  <i class="fa fa-microscope me-1"></i>Trabajo de Investigación
                </span>
              <?php endif; ?>
            </td>
            <td class="py-2" style="font-size:12px;max-width:220px;">
              <?= $ap['tema'] ? htmlspecialchars(substr($ap['tema'], 0, 80)) . (strlen($ap['tema']) > 80 ? '…' : '') : '<span style="color:#9ca3af;">—</span>' ?>
            </td>

            <!-- ── Columna Tutor Investigación ── -->
            <td class="py-2" style="min-width:200px;">
              <?php if (!$esInv): ?>
                <span style="font-size:11px;color:#d1d5db;">—</span>
              <?php else: ?>
                <?php if (!empty($ap['tutor_investigacion_nombre'])): ?>
                  <!-- Tutor ya asignado -->
                  <div style="display:flex;align-items:center;gap:6px;flex-wrap:wrap;">
                    <span style="font-size:12px;font-weight:600;color:#0f172a;">
                      <i class="fa fa-user-tie me-1" style="color:#7c3aed;"></i>
                      <?= htmlspecialchars($ap['tutor_investigacion_nombre']) ?>
                    </span>
                    <button type="button"
                            class="btn btn-sm"
                            style="font-size:10px;padding:1px 7px;background:#fef2f2;color:#dc2626;border:1px solid #fca5a5;"
                            onclick="abrirModalTutor(<?= $ap['id_titulacion'] ?>, '<?= htmlspecialchars($ap['tutor_investigacion_nombre'], ENT_QUOTES) ?>', <?= (int)$ap['id_tutor'] ?>)"
                            title="Cambiar tutor">
                      <i class="fa fa-pen"></i>
                    </button>
                  </div>
                <?php else: ?>
                  <!-- Sin tutor -->
                  <button type="button"
                          class="btn btn-sm"
                          style="font-size:11px;padding:3px 10px;background:#faf5ff;color:#7c3aed;border:1px solid #ddd6fe;font-weight:600;"
                          onclick="abrirModalTutor(<?= $ap['id_titulacion'] ?>, '', 0)"
                          title="Asignar tutor">
                    <i class="fa fa-user-plus me-1"></i>Asignar tutor
                  </button>
                <?php endif; ?>
              <?php endif; ?>
            </td>

            <!-- ── Nota tutor / Nota examen complexivo ── -->
            <td class="py-2 text-center">
              <?php if ($esInv): ?>
                <?php
                  $notaRaw = $ap['nota_trabajo'] ?? null;
                  $nota100 = $notaRaw !== null ? round((float)$notaRaw, 1) : null;
                ?>
                <?php if ($nota100 !== null): ?>
                  <span style="font-size:16px;font-weight:700;color:<?= $nota100 >= 70 ? '#15803d' : '#dc2626' ?>;">
                    <?= number_format($nota100, 1) ?>
                  </span>
                  <span style="font-size:10px;color:#9ca3af;">/100</span>
                  <?php if ($nota100 < 70): ?>
                    <div style="font-size:9px;color:#dc2626;font-weight:700;margin-top:1px;">REPROBADO</div>
                  <?php else: ?>
                    <div style="font-size:9px;color:#15803d;font-weight:700;margin-top:1px;">APROBADO</div>
                  <?php endif; ?>
                <?php else: ?>
                  <span style="font-size:11px;color:#f59e0b;font-weight:600;">Sin calificar</span>
                <?php endif; ?>

              <?php elseif ($esCompl): ?>
                <?php
                  $notaCompl = isset($ap['nota_trabajo']) && $ap['nota_trabajo'] !== null
                               ? (float)$ap['nota_trabajo'] : null;
                ?>
                <?php if ($notaCompl !== null): ?>
                  <span style="font-size:16px;font-weight:700;color:<?= $notaCompl >= 70 ? '#15803d' : '#dc2626' ?>;">
                    <?= number_format($notaCompl, 1) ?>
                  </span>
                  <span style="font-size:10px;color:#9ca3af;">/100</span>
                  <?php if ($notaCompl < 70): ?>
                    <div style="font-size:9px;color:#dc2626;font-weight:700;margin-top:1px;">REPROBADO</div>
                  <?php else: ?>
                    <div style="font-size:9px;color:#15803d;font-weight:700;margin-top:1px;">APROBADO</div>
                  <?php endif; ?>
                  <div style="font-size:9px;color:#9ca3af;margin-top:3px;font-style:italic;">
                    <i class="fa fa-user-shield" style="font-size:8px;margin-right:2px;"></i>Secretaría
                  </div>
                <?php else: ?>
                  <span style="font-size:11px;color:#9ca3af;font-weight:500;">Sin nota</span>
                <?php endif; ?>

              <?php else: ?>
                <span style="color:#d1d5db;font-size:12px;">—</span>
              <?php endif; ?>
            </td>

            <!-- Columna tribunal (solo Trabajo de Investigacion) -->
            <td class="py-2" style="min-width:200px;">
              <?php if ($esInv): ?>
                <?php
                  $ng    = $ap['nota_global']    ?? null;
                  $nd_t  = $ap['nota_director']  ?? null;
                  $nl_t  = $ap['nota_lector']    ?? null;
                  $ntr_t = $ap['nota_tribunal']  ?? null;
                  $nomDir  = $ap['nombre_director_trib']  ?? null;
                  $nomLec  = $ap['nombre_lector_trib']    ?? null;
                  $nomTribu= $ap['nombre_tribunal_trib']  ?? null;
                  $idDir_t = $ap['id_director_trib']  ?? 0;
                  $idLec_t = $ap['id_lector_trib']    ?? 0;
                  $idTribu_t=$ap['id_tribunal_trib']  ?? 0;
                  $notaTutorV = isset($ap['nota_trabajo'])&&$ap['nota_trabajo']!==null ? round((float)$ap['nota_trabajo']*10,1) : null;
                ?>
                <!-- Miembros asignados -->
                <?php if ($nomDir||$nomLec||$nomTribu): ?>
                <div style="font-size:11px;margin-bottom:6px;">
                  <?php if($nomDir): ?>
                  <div style="display:flex;align-items:center;gap:4px;margin-bottom:2px;">
                    <span style="background:#dbeafe;color:#1e40af;font-size:9px;font-weight:700;padding:1px 5px;border-radius:4px;white-space:nowrap;">DIR</span>
                    <span style="color:#374151;"><?= htmlspecialchars($nomDir) ?></span>
                    <?php if($nd_t!==null): ?><span style="color:<?= $nd_t>=70?'#15803d':'#dc2626' ?>;font-weight:700;font-size:10px;">&nbsp;<?= number_format($nd_t,1) ?></span><?php endif; ?>
                  </div>
                  <?php endif; ?>
                  <?php if($nomLec): ?>
                  <div style="display:flex;align-items:center;gap:4px;margin-bottom:2px;">
                    <span style="background:#f0fdf4;color:#15803d;font-size:9px;font-weight:700;padding:1px 5px;border-radius:4px;white-space:nowrap;">LEC</span>
                    <span style="color:#374151;"><?= htmlspecialchars($nomLec) ?></span>
                    <?php if($nl_t!==null): ?><span style="color:<?= $nl_t>=70?'#15803d':'#dc2626' ?>;font-weight:700;font-size:10px;">&nbsp;<?= number_format($nl_t,1) ?></span><?php endif; ?>
                  </div>
                  <?php endif; ?>
                  <?php if($nomTribu): ?>
                  <div style="display:flex;align-items:center;gap:4px;margin-bottom:2px;">
                    <span style="background:#fef9c3;color:#854d0e;font-size:9px;font-weight:700;padding:1px 5px;border-radius:4px;white-space:nowrap;">TRI</span>
                    <span style="color:#374151;"><?= htmlspecialchars($nomTribu) ?></span>
                    <?php if($ntr_t!==null): ?><span style="color:<?= $ntr_t>=70?'#15803d':'#dc2626' ?>;font-weight:700;font-size:10px;">&nbsp;<?= number_format($ntr_t,1) ?></span><?php endif; ?>
                  </div>
                  <?php endif; ?>
                </div>
                <?php endif; ?>
                <!-- Nota global -->
                <?php if ($ng !== null): ?>
                <div style="text-align:center;background:<?= $ng>=70?'#f0fdf4':'#fef2f2' ?>;border-radius:6px;padding:4px 8px;margin-bottom:5px;">
                  <span style="font-size:15px;font-weight:800;color:<?= $ng>=70?'#15803d':'#dc2626' ?>;"><?= number_format($ng,1) ?>/100</span>
                  <span style="font-size:9px;color:#6b7280;display:block;">CES: <?= number_format($ng/10,2) ?>/10 &mdash; <?= $ng>=70?'APROBADO':'REPROBADO' ?></span>
                </div>
                <?php endif; ?>
                <!-- Botones -->
                <div style="display:flex;gap:4px;flex-wrap:wrap;">
                  <?php
                    // Bloquear edicion si ya estan las 3 notas guardadas
                    $notasCompletas = $nd_t!==null && $nl_t!==null && $ntr_t!==null;
                  ?>
                  <?php if ($notasCompletas): ?>
                    <!-- Bloqueado: notas ya ingresadas -->
                    <span title="Las notas ya fueron guardadas. Contacta al administrador para modificar."
                      style="font-size:10px;font-weight:700;padding:3px 8px;border-radius:5px;background:#e2e8f0;color:#94a3b8;cursor:not-allowed;display:inline-flex;align-items:center;gap:4px;">
                      <i class="fa fa-lock"></i> Bloqueado
                    </span>
                  <?php else: ?>
                    <button type="button"
                      style="font-size:10px;font-weight:700;padding:3px 8px;border-radius:5px;border:none;background:#1d4ed8;color:#fff;cursor:pointer;"
                      onclick="abrirModalTribunal(<?= $ap['id_titulacion'] ?>,'<?= addslashes(htmlspecialchars($ap['estudiante'])) ?>','<?= addslashes(htmlspecialchars($ap['tema']??'')) ?>',<?= $nd_t??'null' ?>,<?= $nl_t??'null' ?>,<?= $ntr_t??'null' ?>,<?= $notaTutorV??'null' ?>,<?= (int)$idDir_t ?>,<?= (int)$idLec_t ?>,<?= (int)$idTribu_t ?>)">
                      <i class="fa fa-pen me-1"></i><?= ($nomDir||$nomLec)?'Editar':'Asignar' ?>
                    </button>
                  <?php endif; ?>
                  <?php if ($nomDir&&$nomLec&&$nomTribu&&$ng!==null): ?>
                  <a href="acta_titulacion.php?id=<?= $ap['id_titulacion'] ?>" target="_blank"
                    style="font-size:10px;font-weight:700;padding:3px 8px;border-radius:5px;border:none;background:#dc2626;color:#fff;cursor:pointer;text-decoration:none;">
                    <i class="fa fa-file-pdf me-1"></i>Acta
                  </a>
                  <?php endif; ?>
                </div>
                <!-- Acta firmada -->
                <?php if ($ng!==null): ?>
                <div style="margin-top:6px;">
                  <?php if (!empty($ap['acta_firmada'])): ?>
                    <div style="display:flex;align-items:center;gap:4px;background:#f0fdf4;border:1px solid #86efac;border-radius:6px;padding:4px 8px;">
                      <i class="fa fa-file-circle-check" style="color:#15803d;font-size:12px;"></i>
                      <span style="font-size:10px;color:#15803d;font-weight:700;">Acta firmada</span>
                      <a href="<?= BASE_URL ?>/assets/uploads/actas/<?= urlencode($ap['acta_firmada']) ?>" target="_blank"
                         style="font-size:10px;color:#1d4ed8;margin-left:2px;text-decoration:none;font-weight:700;">
                        <i class="fa fa-eye"></i> Ver
                      </a>
                    </div>
                    <form method="POST" enctype="multipart/form-data" style="margin-top:4px;">
                      <input type="hidden" name="accion" value="subir_acta_firmada">
                      <input type="hidden" name="id_titulacion_acta" value="<?= $ap['id_titulacion'] ?>">
                      <label style="font-size:9px;color:#6b7280;cursor:pointer;display:flex;align-items:center;gap:4px;">
                        <input type="file" name="acta_pdf" accept=".pdf" style="display:none;" onchange="this.form.submit()">
                        <i class="fa fa-rotate me-1" style="color:#6b7280;"></i>Reemplazar
                      </label>
                    </form>
                  <?php else: ?>
                    <form method="POST" enctype="multipart/form-data">
                      <input type="hidden" name="accion" value="subir_acta_firmada">
                      <input type="hidden" name="id_titulacion_acta" value="<?= $ap['id_titulacion'] ?>">
                      <label style="display:flex;align-items:center;gap:5px;background:#fef9c3;border:1.5px dashed #d97706;border-radius:6px;padding:5px 8px;cursor:pointer;font-size:10px;font-weight:700;color:#92400e;">
                        <input type="file" name="acta_pdf" accept=".pdf" style="display:none;" onchange="this.form.submit()">
                        <i class="fa fa-upload me-1"></i>Subir acta firmada
                      </label>
                    </form>
                  <?php endif; ?>
                </div>
                <?php endif; ?>
              <?php else: ?>
                <span style="color:#d1d5db;font-size:12px;">—</span>
              <?php endif; ?>
            </td>

            <td class="py-2" style="font-size:12px;">
              <?= $ap['updated_at'] ? date('d/m/Y', strtotime($ap['updated_at'])) : '—' ?>
            </td>
            <td class="py-2">
              <span style="display:inline-flex;align-items:center;gap:5px;background:#dcfce7;color:#15803d;border:1px solid #86efac;border-radius:999px;font-size:11px;font-weight:700;padding:3px 10px;">
                <i class="fa fa-circle-check" style="font-size:10px;"></i> Aprobado
              </span>
            </td>
          </tr>
          <?php endforeach; ?>
        </tbody>
      </table>
    </div>
  </div>

  <!-- Paginador -->
  <?php if ($pagPages > 1): ?>
  <div class="d-flex align-items-center justify-content-between flex-wrap gap-2 mb-4" style="font-size:13px;">
    <div style="color:#6b7280;">Mostrando <?= ($pagCur-1)*$pagSize+1 ?>–<?= min($pagCur*$pagSize,$pagTotal) ?> de <?= $pagTotal ?> registros</div>
    <div class="d-flex gap-1">
      <?php if ($pagCur > 1): ?>
        <a href="<?= apUrl(['pag'=>$pagCur-1]) ?>" style="padding:4px 10px;border-radius:6px;background:#f1f5f9;color:#374151;text-decoration:none;border:1px solid #e2e8f0;"><i class="fa fa-chevron-left"></i></a>
      <?php endif; ?>
      <?php for ($p=max(1,$pagCur-2); $p<=min($pagPages,$pagCur+2); $p++): ?>
        <a href="<?= apUrl(['pag'=>$p]) ?>" style="padding:4px 10px;border-radius:6px;text-decoration:none;font-weight:600;<?= $p===$pagCur ? 'background:#2563eb;color:#fff;' : 'background:#f1f5f9;color:#374151;border:1px solid #e2e8f0;' ?>"><?= $p ?></a>
      <?php endfor; ?>
      <?php if ($pagCur < $pagPages): ?>
        <a href="<?= apUrl(['pag'=>$pagCur+1]) ?>" style="padding:4px 10px;border-radius:6px;background:#f1f5f9;color:#374151;text-decoration:none;border:1px solid #e2e8f0;"><i class="fa fa-chevron-right"></i></a>
      <?php endif; ?>
    </div>
  </div>
  <?php endif; ?>

  <!-- ══ PDF DE PREGUNTAS POR CARRERA ══ -->
  <div class="mt-2 mb-4">
    <div class="d-flex align-items-center gap-2 mb-3">
      <span style="display:inline-flex;align-items:center;gap:6px;background:#fef3c7;color:#92400e;font-size:11px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;padding:4px 12px;border-radius:20px;">
        <i class="fa fa-file-pdf" style="color:#ef4444;"></i> Preguntas por Carrera — Examen Complexivo
      </span>
      <span style="font-size:12px;color:#6b7280;">Suba un PDF por cada carrera. Los estudiantes aprobados de Examen Complexivo lo descargarán automáticamente.</span>
    </div>
    <div class="row g-3">
      <?php foreach ($carrerasActivas as $car):
        $pdfC = $pdfComplexivo[$car['id_carrera']] ?? null;
      ?>
      <div class="col-12 col-md-6 col-xl-4">
        <div class="card border-0 shadow-sm h-100" style="border-left:4px solid <?= $pdfC && $pdfC['activo'] ? '#22c55e' : ($pdfC ? '#f59e0b' : '#ef4444') ?> !important;">
          <div class="card-body py-3 px-3">
            <!-- Nombre carrera + estado -->
            <div class="d-flex align-items-start justify-content-between gap-2 mb-2">
              <div style="font-weight:700;font-size:13px;color:#0f172a;line-height:1.3;"><?= htmlspecialchars($car['nombre']) ?></div>
              <?php if ($pdfC && $pdfC['activo']): ?>
                <span style="flex-shrink:0;background:#dcfce7;color:#15803d;border:1px solid #86efac;border-radius:999px;font-size:10px;font-weight:700;padding:2px 8px;"><i class="fa fa-circle-check"></i> Activo</span>
              <?php elseif ($pdfC): ?>
                <span style="flex-shrink:0;background:#fffbeb;color:#92400e;border:1px solid #fcd34d;border-radius:999px;font-size:10px;font-weight:700;padding:2px 8px;"><i class="fa fa-eye-slash"></i> Inactivo</span>
              <?php else: ?>
                <span style="flex-shrink:0;background:#fef2f2;color:#dc2626;border:1px solid #fca5a5;border-radius:999px;font-size:10px;font-weight:700;padding:2px 8px;"><i class="fa fa-triangle-exclamation"></i> Sin PDF</span>
              <?php endif; ?>
            </div>

            <?php if ($pdfC): ?>
              <!-- PDF existente -->
              <div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:8px 10px;margin-bottom:10px;display:flex;align-items:center;gap:8px;">
                <i class="fa fa-file-pdf" style="color:#ef4444;font-size:20px;flex-shrink:0;"></i>
                <div style="flex:1;min-width:0;">
                  <div style="font-size:11px;font-weight:600;color:#0f172a;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;"><?= htmlspecialchars($pdfC['descripcion'] ?: $pdfC['pdf_preguntas']) ?></div>
                  <div style="font-size:10px;color:#9ca3af;">Subido</div>
                </div>
                <a href="<?= BASE_URL ?>/api/ver_preguntas_complexivo.php?carrera=<?= (int)$pdfC['id_carrera'] ?>" target="_blank"
                   class="btn btn-sm btn-outline-danger" style="font-size:10px;padding:2px 7px;"><i class="fa fa-eye"></i></a>
              </div>
              <form method="POST" style="display:inline;">
                <input type="hidden" name="accion" value="eliminar_pdf_carrera">
                <input type="hidden" name="id_carrera" value="<?= $car['id_carrera'] ?>">
                <button type="submit" class="btn btn-sm btn-outline-secondary w-100 mb-2" style="font-size:11px;"
                        onclick="return confirm('¿Eliminar el PDF de <?= htmlspecialchars($car['nombre']) ?>?')">
                  <i class="fa fa-trash me-1"></i>Eliminar y reemplazar
                </button>
              </form>
            <?php else: ?>
              <div style="background:#fef2f2;border:1px dashed #fca5a5;border-radius:8px;padding:10px;text-align:center;margin-bottom:10px;font-size:12px;color:#dc2626;">
                <i class="fa fa-cloud-upload-alt fa-lg d-block mb-1"></i>Sin PDF subido
              </div>
            <?php endif; ?>

            <!-- Formulario subida -->
            <?php if (!$pdfC): ?>
            <form method="POST" enctype="multipart/form-data">
              <input type="hidden" name="accion" value="subir_pdf_carrera">
              <input type="hidden" name="id_carrera" value="<?= $car['id_carrera'] ?>">
              <input type="text" name="descripcion" class="form-control form-control-sm mb-2" placeholder="Descripción opcional" style="font-size:11px;">
              <input type="file" name="pdf_preguntas" class="form-control form-control-sm mb-2" accept=".pdf" required style="font-size:11px;">
              <button type="submit" class="btn btn-danger btn-sm w-100" style="font-size:11px;">
                <i class="fa fa-upload me-1"></i>Subir PDF
              </button>
            </form>
            <?php else: ?>
            <form method="POST" enctype="multipart/form-data">
              <input type="hidden" name="accion" value="subir_pdf_carrera">
              <input type="hidden" name="id_carrera" value="<?= $car['id_carrera'] ?>">
              <input type="text" name="descripcion" class="form-control form-control-sm mb-2" placeholder="Nueva descripción" style="font-size:11px;">
              <input type="file" name="pdf_preguntas" class="form-control form-control-sm mb-2" accept=".pdf" required style="font-size:11px;">
              <button type="submit" class="btn btn-warning btn-sm w-100" style="font-size:11px;">
                <i class="fa fa-rotate me-1"></i>Actualizar PDF
              </button>
            </form>
            <?php endif; ?>
          </div>
        </div>
      </div>
      <?php endforeach; ?>
    </div>
  </div>
  <?php endif; ?>

  </main>
</div>

<!-- ══ MODAL ASIGNAR TUTOR INVESTIGACIÓN ══ -->
<div class="modal fade" id="modalTutorInv" tabindex="-1">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header" style="background:linear-gradient(135deg,#4c1d95,#7c3aed);border-radius:8px 8px 0 0;">
        <h5 class="modal-title" style="color:#fff;font-size:14px;">
          <i class="fa fa-user-tie me-2"></i>Tutor — Trabajo de Investigación
        </h5>
        <button type="button" class="btn-close btn-close-white" data-bs-dismiss="modal"></button>
      </div>
      <form method="POST">
        <input type="hidden" name="accion" value="asignar_tutor_investigacion">
        <input type="hidden" name="id_titulacion" id="inp_id_titulacion">
        <div class="modal-body">
          <div style="font-size:12px;color:#6b7280;margin-bottom:12px;">
            <i class="fa fa-info-circle me-1" style="color:#7c3aed;"></i>
            El tutor asignado podrá revisar y calificar el trabajo de investigación del estudiante.
          </div>
          <div class="mb-3">
            <label class="form-label" style="font-weight:600;">Seleccionar tutor</label>
            <select name="id_tutor_inv" id="sel_tutor_inv" class="form-select">
              <option value="0">— Sin tutor asignado —</option>
              <?php foreach ($docentesTutor as $d): ?>
              <option value="<?= $d['id_usuario'] ?>"><?= htmlspecialchars($d['nombre']) ?></option>
              <?php endforeach; ?>
            </select>
          </div>
          <div id="tutor_actual_info" style="display:none;font-size:12px;padding:8px 12px;background:#faf5ff;border:1px solid #ddd6fe;border-radius:8px;color:#5b21b6;">
            <i class="fa fa-user me-1"></i>Tutor actual: <strong id="tutor_actual_nombre"></strong>
          </div>
        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-outline-secondary btn-sm" data-bs-dismiss="modal">Cancelar</button>
          <button type="submit" class="btn btn-sm" style="background:#7c3aed;color:#fff;border:none;">
            <i class="fa fa-save me-1"></i>Guardar asignación
          </button>
        </div>
      </form>
    </div>
  </div>
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.3/js/bootstrap.bundle.min.js"></script>
<script>
function abrirModalTutor(idTitulacion, tutorNombre, idTutorActual) {
  document.getElementById('inp_id_titulacion').value = idTitulacion;
  var sel = document.getElementById('sel_tutor_inv');
  sel.value = idTutorActual || 0;
  var infoDiv   = document.getElementById('tutor_actual_info');
  var infoNombre = document.getElementById('tutor_actual_nombre');
  if (tutorNombre) {
    infoDiv.style.display = 'block';
    infoNombre.textContent = tutorNombre;
  } else {
    infoDiv.style.display = 'none';
  }
  new bootstrap.Modal(document.getElementById('modalTutorInv')).show();
}

// ── Modal Tribunal ──────────────────────────────────────────
function abrirModalTribunal(idTit, estudiante, tema, nd, nl, ntr, notaTutor, idDir, idLec, idTribu) {
  document.getElementById('trib-id').value = idTit;
  document.getElementById('trib-estudiante').textContent = estudiante;
  document.getElementById('trib-tema').textContent = tema || 'Sin tema';
  document.getElementById('trib-nd').value  = nd  !== null && nd  !== undefined ? nd  : '';
  document.getElementById('trib-nl').value  = nl  !== null && nl  !== undefined ? nl  : '';
  document.getElementById('trib-ntr').value = ntr !== null && ntr !== undefined ? ntr : '';
  // Pre-seleccionar tutores
  var selDir = document.getElementById('trib-sel-director');
  var selLec = document.getElementById('trib-sel-lector');
  var selTri = document.getElementById('trib-sel-tribunal');
  if (selDir) selDir.value = idDir || '';
  if (selLec) selLec.value = idLec || '';
  if (selTri) selTri.value = idTribu || '';
  // Nota tutor
  var ntEl = document.getElementById('trib-nota-tutor');
  if (notaTutor !== null && notaTutor !== undefined && !isNaN(notaTutor)) {
    ntEl.textContent = parseFloat(notaTutor).toFixed(1) + '/100';
    ntEl.style.color = notaTutor >= 70 ? '#15803d' : '#dc2626';
    ntEl.dataset.val = notaTutor;
  } else {
    ntEl.textContent = 'Sin calificar';
    ntEl.style.color = '#9ca3af';
    ntEl.dataset.val = '';
  }
  calcTribunal(notaTutor);
  new bootstrap.Modal(document.getElementById('modalTribunal')).show();
}

function calcTribunal(notaTutor) {
  var nd  = parseFloat(document.getElementById('trib-nd').value)  || null;
  var nl  = parseFloat(document.getElementById('trib-nl').value)  || null;
  var ntr = parseFloat(document.getElementById('trib-ntr').value) || null;
  var box = document.getElementById('trib-preview');
  var valEl = document.getElementById('trib-prev-val');
  var cesEl = document.getElementById('trib-prev-ces');
  if (!box) return;
  var vals = [nd, nl, ntr].filter(function(v){ return v!==null && !isNaN(v); });
  if (notaTutor !== null && !isNaN(notaTutor)) vals.unshift(notaTutor);
  if (vals.length === 4) {
    var prom = Math.round(vals.reduce(function(a,b){return a+b;},0) / 4 * 100) / 100;
    var ces  = Math.round(prom / 10 * 100) / 100;
    var color = prom >= 70 ? '#15803d' : '#dc2626';
    valEl.textContent = prom.toFixed(2) + '/100';
    valEl.style.color = color;
    cesEl.textContent = 'CES: ' + ces.toFixed(2) + '/10 — ' + (prom >= 70 ? 'APROBADO' : 'REPROBADO');
    cesEl.style.color = color;
    box.style.display = 'block';
    box.style.background = prom >= 70 ? '#f0fdf4' : '#fef2f2';
    box.style.borderColor = prom >= 70 ? '#bbf7d0' : '#fecaca';
  } else {
    box.style.display = 'none';
  }
}

// Calcula promedio global en tiempo real mientras el coordinador escribe las notas
function calcGlobal(notaTutor) {
  var nd  = parseFloat(document.getElementById('nd')  ? document.getElementById('nd').value  : '') || null;
  var nl  = parseFloat(document.getElementById('nl')  ? document.getElementById('nl').value  : '') || null;
  var ntr = parseFloat(document.getElementById('ntr') ? document.getElementById('ntr').value : '') || null;
  var box = document.getElementById('prev-global');
  var valEl = document.getElementById('prev-val');
  var cesEl = document.getElementById('prev-ces');
  if (!box) return;

  var vals = [nd, nl, ntr].filter(function(v){ return v !== null && !isNaN(v); });
  if (notaTutor !== null && !isNaN(notaTutor)) vals.unshift(notaTutor);

  if (vals.length === 4) {
    var prom = Math.round((vals.reduce(function(a,b){return a+b;},0) / 4) * 100) / 100;
    var ces  = Math.round(prom / 10 * 100) / 100;
    var color = prom >= 70 ? '#15803d' : '#dc2626';
    valEl.textContent = prom.toFixed(2) + '/100';
    valEl.style.color = color;
    cesEl.textContent = 'CES: ' + ces.toFixed(2) + '/10 — ' + (prom >= 70 ? 'APROBADO' : 'REPROBADO');
    cesEl.style.color = color;
    box.style.display = 'block';
    box.style.background = prom >= 70 ? '#f0fdf4' : '#fef2f2';
    box.style.borderColor = prom >= 70 ? '#bbf7d0' : '#fecaca';
  } else {
    box.style.display = 'none';
  }
}
</script>
<!-- ══ MODAL TRIBUNAL — Trabajo de Investigación ══ -->
<div class="modal fade" id="modalTribunal" tabindex="-1" style="z-index:1060;">
  <div class="modal-dialog modal-md modal-dialog-centered">
    <div class="modal-content" style="border-radius:12px;overflow:hidden;border:none;">
      <div class="modal-header" style="background:#1e293b;border:none;padding:14px 18px;">
        <div>
          <div style="font-size:14px;font-weight:700;color:#f1f5f9;">
            <i class="fa fa-scale-balanced me-2" style="color:#f59e0b;"></i>Calificación del Tribunal
          </div>
          <div id="trib-estudiante" style="font-size:12px;color:#94a3b8;margin-top:2px;"></div>
          <div id="trib-tema" style="font-size:11px;color:#64748b;"></div>
        </div>
        <button type="button" class="btn-close btn-close-white ms-auto" data-bs-dismiss="modal"></button>
      </div>
      <div class="modal-body" style="padding:20px;">
        <!-- Nota tutor (readonly) -->
        <div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:10px 14px;margin-bottom:16px;">
          <div style="font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:#6b7280;margin-bottom:4px;">
            Nota del Tutor de Investigación (automática)
          </div>
          <div id="trib-nota-tutor" style="font-size:20px;font-weight:700;" data-val=""></div>
        </div>

        <form method="POST">
          <input type="hidden" name="accion" value="registrar_notas_tribunal">
          <input type="hidden" name="id_titulacion" id="trib-id">

          <!-- Filas: selector tutor + nota -->
          <?php
            $tribRoles = [
              ['key'=>'director', 'lbl'=>'Director',  'badge'=>'#1e40af','bg'=>'#dbeafe','id_field'=>'id_director_trib'],
              ['key'=>'lector',   'lbl'=>'Lector',    'badge'=>'#15803d','bg'=>'#f0fdf4','id_field'=>'id_lector_trib'],
              ['key'=>'tribunal', 'lbl'=>'Tribunal',  'badge'=>'#854d0e','bg'=>'#fef9c3','id_field'=>'id_tribunal_trib'],
            ];
          ?>
          <div style="display:flex;flex-direction:column;gap:8px;margin-bottom:14px;">
          <?php foreach($tribRoles as $rol): ?>
          <div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:10px 12px;">
            <div style="display:flex;align-items:center;gap:6px;margin-bottom:8px;">
              <span style="background:<?= $rol['bg'] ?>;color:<?= $rol['badge'] ?>;font-size:10px;font-weight:700;padding:2px 8px;border-radius:4px;"><?= $rol['lbl'] ?></span>
            </div>
            <div style="display:grid;grid-template-columns:1fr auto;gap:8px;align-items:end;">
              <div>
                <label style="font-size:10px;color:#6b7280;display:block;margin-bottom:3px;">Seleccionar tutor</label>
                <select name="<?= $rol['id_field'] ?>" id="trib-sel-<?= $rol['key'] ?>" class="form-select form-select-sm">
                  <option value="">-- Elegir tutor --</option>
                  <?php foreach($docentesTutor as $dt): ?>
                  <option value="<?= $dt['id_usuario'] ?>"><?= htmlspecialchars($dt['nombre']) ?></option>
                  <?php endforeach; ?>
                </select>
              </div>
              <div style="min-width:80px;">
                <label style="font-size:10px;color:#6b7280;display:block;margin-bottom:3px;">Nota /100</label>
                <input type="number" name="t_<?= $rol['key'] ?>" id="trib-<?= $rol['key'] == 'director'?'nd':($rol['key']=='lector'?'nl':'ntr') ?>"
                  min="0" max="100" step="0.5" placeholder="0-100"
                  class="form-control form-control-sm text-center"
                  style="font-size:15px;font-weight:700;"
                  oninput="calcTribunal(parseFloat(document.getElementById('trib-nota-tutor').dataset.val)||null)">
              </div>
            </div>
          </div>
          <?php endforeach; ?>
          </div>

          <!-- Preview promedio global -->
          <div id="trib-preview" style="display:none;padding:12px;border-radius:8px;text-align:center;margin-bottom:14px;border:1px solid;">
            <div style="font-size:10px;color:#6b7280;font-weight:700;letter-spacing:.5px;text-transform:uppercase;">PROMEDIO GLOBAL (4 notas)</div>
            <div id="trib-prev-val" style="font-size:26px;font-weight:800;line-height:1.1;"></div>
            <div id="trib-prev-ces" style="font-size:12px;margin-top:4px;"></div>
          </div>

          <div style="font-size:11px;color:#6b7280;background:#f8fafc;border-radius:6px;padding:8px 12px;margin-bottom:14px;">
            <i class="fa fa-circle-info me-1"></i>
            Promedio = (Tutor + Director + Lector + Tribunal) ÷ 4 &nbsp;|&nbsp; Mínimo: <strong>70/100</strong>
          </div>

          <button type="submit" class="btn btn-primary w-100" style="font-weight:700;">
            <i class="fa fa-floppy-disk me-2"></i>Guardar notas del tribunal
          </button>
        </form>
      </div>
    </div>
  </div>
</div>

</body>
</html>