:root{
  --navy:#1f3864; --blue:#2e5496; --light:#d9e1f2; --light2:#eaf0fa;
  --green:#c6efce; --greent:#1e7d34; --red:#ffc7ce; --redt:#9c1b2e;
  --orange:#ffe0b2; --greenl:#e2efda; --grey:#e7e6e6; --yellow:#fff2cc;
  --ink:#1b2437; --muted:#6b7280; --border:#e2e6ee;
}
*{box-sizing:border-box}
body{margin:0;font-family:-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;color:var(--ink);background:#f4f6fb}
a{color:var(--blue);text-decoration:none}
h1,h2,h3{margin:.2em 0}
.muted{color:var(--muted);font-size:.9rem}

/* Topbar */
.topbar{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;
  background:var(--navy);color:#fff;padding:12px 22px}
.topbar .brand{font-weight:700;font-size:1.1rem}
.topbar nav a{color:#cdd8ef;margin-left:18px;font-weight:600;padding:6px 2px;border-bottom:2px solid transparent}
.topbar nav a:hover{color:#fff}
.topbar nav a.active{color:#fff;border-bottom-color:#fff}
.topbar nav a.logout{color:#ffd0d0}

.container{max-width:1100px;margin:26px auto;padding:0 18px}
.foot{text-align:center;color:var(--muted);font-size:.8rem;padding:28px}

/* Cards */
.card{background:#fff;border:1px solid var(--border);border-radius:14px;padding:18px 20px;margin-bottom:20px;box-shadow:0 1px 3px rgba(20,30,60,.05)}
.card h2{color:var(--navy);font-size:1.15rem;border-bottom:2px solid var(--light);padding-bottom:8px;margin-bottom:14px}
.row{display:flex;gap:16px;flex-wrap:wrap}
.stat{flex:1;min-width:150px;background:var(--light2);border-radius:12px;padding:14px 16px;text-align:center}
.stat .n{font-size:1.6rem;font-weight:800;color:var(--navy)}
.stat .l{font-size:.8rem;color:var(--muted);text-transform:uppercase;letter-spacing:.03em}
.stat.good .n{color:var(--greent)} .stat.bad .n{color:var(--redt)}

/* Tables */
table{width:100%;border-collapse:collapse;font-size:.92rem}
th,td{padding:9px 10px;border-bottom:1px solid var(--border);text-align:left;vertical-align:middle}
thead th{background:var(--blue);color:#fff;font-size:.82rem;text-transform:uppercase;letter-spacing:.02em;border:none}
thead th:first-child{border-top-left-radius:8px}
thead th:last-child{border-top-right-radius:8px}
tbody tr:nth-child(even){background:var(--light2)}
td.num,th.num{text-align:center}
.subject-link{font-weight:600}

/* Pills */
.pill{display:inline-block;padding:2px 9px;border-radius:999px;font-size:.78rem;font-weight:700;white-space:nowrap}
.pill.alta,.pill.venc{background:var(--red);color:var(--redt)}
.pill.venc{background:#f4b084;color:#5a2400}
.pill.media{background:var(--orange);color:#8a5a00}
.pill.baja{background:var(--greenl);color:var(--greent)}
.pill.done{background:var(--grey);color:#555}
.pill.aprob{background:var(--green);color:var(--greent)}
.pill.susp{background:var(--red);color:var(--redt)}
.pill.pend{background:var(--light);color:var(--navy)}
.pill.none{background:transparent;color:var(--muted)}
.nota-final{font-weight:800;font-size:1.05rem}
.nota-final.aprob{color:var(--greent)} .nota-final.susp{color:var(--redt)}

/* Buttons & forms */
.btn{display:inline-block;background:var(--blue);color:#fff;border:none;border-radius:9px;
  padding:9px 16px;font-weight:700;cursor:pointer;font-size:.9rem}
.btn:hover{background:var(--navy)}
.btn.small{padding:5px 11px;font-size:.8rem}
.btn.ghost{background:#fff;color:var(--blue);border:1px solid var(--blue)}
.btn.danger{background:#fff;color:var(--redt);border:1px solid var(--redt)}
.btn.danger:hover{background:var(--redt);color:#fff}
.actions-inline{display:flex;gap:6px;align-items:center}

form.grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px 16px;align-items:end}
form.grid .full{grid-column:1/-1}
form.grid-3{grid-template-columns:repeat(3,1fr)}
@media(max-width:600px){form.grid-3{grid-template-columns:1fr}}
label{display:block;font-size:.8rem;font-weight:600;color:var(--navy);margin-bottom:4px}
input,select,textarea{width:100%;padding:8px 10px;border:1px solid #cbd3e1;border-radius:8px;font-size:.9rem;font-family:inherit}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(46,84,150,.15)}
textarea{min-height:52px;resize:vertical}

details{margin-top:12px;border:1px dashed #c3ccdd;border-radius:10px;padding:0 14px;background:#fbfcfe}
details[open]{padding-bottom:14px}
summary{cursor:pointer;font-weight:700;color:var(--navy);padding:12px 0;list-style:none}
summary::-webkit-details-marker{display:none}
summary:before{content:"\25b8 ";color:var(--blue)}
details[open] summary:before{content:"\25be "}

.alert{background:var(--red);color:var(--redt);padding:9px 12px;border-radius:8px;margin-bottom:12px;font-size:.9rem}
.info{background:#eaf3ff;border:1px solid #bcd6f5;color:#1c4b82;padding:10px 14px;border-radius:10px;font-size:.88rem;margin-bottom:14px}
.empty{text-align:center;color:var(--muted);padding:26px}

/* Login */
.login-body{display:flex;min-height:100vh;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#1f3864,#2e5496)}
.login-card{background:#fff;padding:34px 30px;border-radius:16px;width:320px;max-width:90vw;
  box-shadow:0 12px 40px rgba(0,0,0,.25);text-align:center}
.login-logo{font-size:2.4rem}
.login-card h1{color:var(--navy);font-size:1.3rem;margin:.2em 0}
.login-card input{margin:14px 0 12px}
.login-card .btn,.login-card button{width:100%;background:var(--blue);color:#fff;border:none;
  border-radius:9px;padding:11px;font-weight:700;cursor:pointer;font-size:.95rem}
.login-card button:hover{background:var(--navy)}

.badge-code{background:var(--light);color:var(--navy);border-radius:6px;padding:2px 7px;font-size:.78rem;font-weight:700}
.progressbar{height:14px;background:var(--light);border-radius:999px;overflow:hidden;margin-top:6px}
.progressbar > span{display:block;height:100%;background:linear-gradient(90deg,#2e5496,#4a7bc0)}

/* ===== Cabeceras de tarjeta con boton a la derecha ===== */
.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.card-head h2{border:none;margin:0;padding:0}

/* ===== Barra de filtro ===== */
.filterbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.filterbar select{width:auto;min-width:220px}

/* ===== Botones extra ===== */
.btn.small{padding:7px 12px;font-size:.9rem}
.btn.ghost{background:#fff;color:var(--navy);border:1px solid var(--navy)}
.btn.ghost:hover{background:#eef2ff}
.btn.danger{background:#fff;color:#b91c1c;border:1px solid #b91c1c}
.btn.danger:hover{background:#fef2f2}

/* ===== Estado vacio ===== */
.empty{padding:26px;text-align:center;color:var(--muted);background:#f8fafc;border:1px dashed #cbd5e1;border-radius:12px}

/* ===== Modales ===== */
.modal-overlay{position:fixed;inset:0;background:rgba(20,28,50,.55);display:none;align-items:flex-start;justify-content:center;z-index:1000;padding:30px 16px;overflow-y:auto}
.modal-overlay.open{display:flex}
.modal{background:#fff;border-radius:16px;max-width:820px;width:100%;padding:24px 26px;box-shadow:0 24px 70px rgba(0,0,0,.32);margin:auto;position:relative}
.modal h3{color:var(--navy);margin:0 0 16px;font-size:1.25rem}
.modal .modal-close{position:absolute;top:14px;right:16px;font-size:1.5rem;line-height:1;border:none;background:none;cursor:pointer;color:var(--muted)}
.modal .modal-close:hover{color:var(--navy)}

/* Pagos */
.matbox{border:1px solid #e2e8f0;border-radius:12px;padding:16px;margin-bottom:14px;background:#fff}
