/* ============================================================
   TECDEPRO - Hoja de estilos principal (paleta institucional)
   60% fondo #F8F9F6 | 30% verde #14532D | 10% rojo #D92D36
   ============================================================ */
:root{
  --bg:#F8F9F6; --blanco:#FFFFFF;
  --verde:#14532D; --verde-osc:#0F3F22; --verde-logo:#007800;
  --rojo:#D92D36; --rojo-osc:#B91F28;
  --amarillo:#FFD800; --aviso:#FFF7D6;
  --texto:#202820; --texto2:#596459; --borde:#e3e8e0;

  /* Bootstrap toma estos valores como "primary" y enlaces */
  --bs-primary:#14532D; --bs-primary-rgb:20,83,45;
  --bs-link-color:#14532D; --bs-link-color-rgb:20,83,45;
  --bs-link-hover-color:#0F3F22; --bs-link-hover-color-rgb:15,63,34;
  --bs-body-color:#202820; --bs-body-bg:#F8F9F6;
  --bs-border-radius:.6rem;
}
body{font-family:'Inter','Segoe UI',system-ui,sans-serif;background:var(--bg);color:var(--texto);font-size:1.02rem;margin:0}
h1,h2,h3,h4,h5{color:var(--verde);font-weight:700}

/* ---------- Botones ---------- */
.btn{font-weight:600;border-radius:.6rem}
.btn-primary{--bs-btn-color:#fff;--bs-btn-bg:var(--rojo);--bs-btn-border-color:var(--rojo);
  --bs-btn-hover-color:#fff;--bs-btn-hover-bg:var(--rojo-osc);--bs-btn-hover-border-color:var(--rojo-osc);
  --bs-btn-focus-shadow-rgb:217,45,54;--bs-btn-active-color:#fff;--bs-btn-active-bg:#a31a22;--bs-btn-active-border-color:#a31a22;
  --bs-btn-disabled-bg:var(--rojo);--bs-btn-disabled-border-color:var(--rojo)}
.btn-success{--bs-btn-color:#fff;--bs-btn-bg:var(--verde);--bs-btn-border-color:var(--verde);
  --bs-btn-hover-color:#fff;--bs-btn-hover-bg:var(--verde-osc);--bs-btn-hover-border-color:var(--verde-osc);
  --bs-btn-active-bg:var(--verde-osc);--bs-btn-active-border-color:var(--verde-osc);--bs-btn-focus-shadow-rgb:20,83,45}
.btn-outline-primary{--bs-btn-color:var(--verde);--bs-btn-border-color:var(--verde);
  --bs-btn-hover-color:#fff;--bs-btn-hover-bg:var(--verde);--bs-btn-hover-border-color:var(--verde);
  --bs-btn-active-bg:var(--verde-osc);--bs-btn-active-border-color:var(--verde-osc);--bs-btn-focus-shadow-rgb:20,83,45}
.btn-warning{--bs-btn-color:#202820;--bs-btn-bg:var(--amarillo);--bs-btn-border-color:var(--amarillo);
  --bs-btn-hover-color:#202820;--bs-btn-hover-bg:#e6c200;--bs-btn-hover-border-color:#e6c200}
.bg-primary{background-color:var(--verde)!important}
.text-primary{color:var(--verde)!important}
.badge.bg-primary,.badge.text-bg-primary{background-color:var(--verde)!important}
.form-control:focus,.form-select:focus{border-color:var(--verde);box-shadow:0 0 0 .22rem rgba(20,83,45,.16)}
.form-check-input:checked{background-color:var(--verde);border-color:var(--verde)}
.form-label{font-weight:600}

/* ---------- Tarjetas y tablas ---------- */
.card{border:1px solid var(--borde);border-radius:14px;box-shadow:0 2px 10px rgba(20,83,45,.05);background:var(--blanco)}
.table thead th{background:var(--verde);color:#fff;border-color:var(--verde);font-weight:600}
.table-hover tbody tr:hover{background:#f1f5ee}
.page-link{color:var(--verde)}
.page-item.active .page-link{background:var(--verde);border-color:var(--verde)}
.alert-warning{background:var(--aviso);border-color:#ecd770;color:#5b4b00}

/* ---------- Marca / logo ---------- */
.marca-logo{width:46px;height:46px;border-radius:11px;background:#fff;color:var(--verde);display:grid;place-items:center;
  font-weight:800;font-size:1.1rem;border-bottom:4px solid var(--amarillo);flex-shrink:0}
.marca-logo-img{width:auto;height:auto;padding:.35rem .6rem}
.marca-logo-img img{display:block;height:36px;width:auto;max-width:150px}
.marca-texto{display:flex;flex-direction:column;line-height:1.1;color:#fff}
.marca-texto b{font-weight:800;letter-spacing:.06em;font-size:1.15rem}
.marca-texto small{font-size:.72rem;opacity:.85}

/* ============================================================
   PORTAL PÚBLICO
   ============================================================ */
.franja-contacto{background:var(--verde-osc);color:#e8efe9;font-size:.85rem;padding:.4rem 0}
.franja-contacto i{color:var(--amarillo);margin-right:.35rem}
.nav-publico{background:var(--verde);padding:.5rem 0;border-bottom:3px solid var(--amarillo)}
.nav-publico .navbar-toggler{border:0;box-shadow:none}
.nav-publico .nav-link{color:#fff;font-weight:600;padding:.8rem 1rem;position:relative}
.nav-publico .nav-link:hover,.nav-publico .nav-link:focus{color:#fff}
.nav-publico .nav-link::after{content:"";position:absolute;left:1rem;right:1rem;bottom:.4rem;height:3px;
  background:var(--amarillo);border-radius:2px;transform:scaleX(0);transition:transform .2s}
.nav-publico .nav-link:hover::after,.nav-publico .nav-link.active::after{transform:scaleX(1)}
.nav-publico .dropdown-toggle::after{position:static;display:inline-block;transform:none;height:auto;background:none;
  border-top:.3em solid;border-right:.3em solid transparent;border-left:.3em solid transparent;border-bottom:0;margin-left:.4rem;vertical-align:.15em}
.menu-institucional{border:0;border-top:3px solid var(--amarillo);border-radius:0 0 12px 12px;padding:.5rem;
  box-shadow:0 12px 28px rgba(0,0,0,.15);min-width:230px}
.menu-institucional .dropdown-item{padding:.65rem .9rem;border-radius:8px;font-weight:500;color:var(--texto)}
.menu-institucional .dropdown-item:hover{background:#eef4ec;color:var(--verde)}
.menu-institucional .dropdown-item i{color:var(--verde-logo)}
.btn-acceder{background:var(--rojo);color:#fff;font-weight:700;padding:.65rem 1.4rem;border:0;border-radius:.6rem}
.btn-acceder:hover,.btn-acceder:focus{background:var(--rojo-osc);color:#fff}
@media (min-width:992px){ .nav-publico .dropdown:hover>.dropdown-menu{display:block} }
@media (max-width:991.98px){
  .nav-publico .navbar-collapse{padding:.8rem 0 1rem}
  .nav-publico .nav-link::after{display:none}
  .btn-acceder{width:100%;text-align:center}
}

/* ---------- Pie de página ---------- */
.pie{background:var(--verde);color:#e8efe9;margin-top:4rem;border-top:4px solid var(--amarillo)}
.pie-texto{opacity:.9;max-width:380px}
.pie-titulo{color:#fff;font-weight:700;text-transform:uppercase;letter-spacing:.08em;font-size:.85rem;
  padding-bottom:.6rem;margin-bottom:1rem;border-bottom:2px solid var(--amarillo);display:inline-block}
.pie-lista{list-style:none;padding:0;margin:0}
.pie-lista li{display:flex;gap:.6rem;margin-bottom:.7rem;opacity:.95}
.pie-lista i{color:var(--amarillo);margin-top:.2rem}
.pie a{color:#fff;text-decoration:none}
.pie a:hover{color:var(--amarillo);text-decoration:underline}
.pie-enlaces li::before{content:"›";color:var(--amarillo);font-weight:700}
.pie-base{background:var(--verde-osc);padding:1rem 0;font-size:.9rem;text-align:center;opacity:.95}

/* ============================================================
   PANEL INTERNO
   ============================================================ */
.vista-panel{background:var(--bg)}
.app-shell{display:flex;width:100%;min-height:100vh;overflow-x:hidden}
.sidebar{width:270px;flex-shrink:0;background:var(--verde);color:#fff;display:flex;flex-direction:column;
  z-index:1040;transition:transform .3s ease}
.sidebar .marca{padding:1.2rem 1.3rem;display:flex;align-items:center;gap:.8rem;text-decoration:none;
  border-bottom:1px solid rgba(255,255,255,.14)}
.sidebar nav{padding-bottom:1rem;overflow-y:auto}
.sidebar nav a{padding:.8rem 1.4rem;color:#e3ece5;text-decoration:none;display:flex;align-items:center;gap:.75rem;
  font-weight:500;font-size:1.02rem;border-left:4px solid transparent;transition:.15s}
.sidebar nav a i{font-size:1.15rem;width:1.4rem;text-align:center}
.sidebar nav a:hover{background:rgba(255,255,255,.09);color:#fff}
.sidebar nav a.activo{background:rgba(255,255,255,.14);color:#fff;border-left-color:var(--amarillo);font-weight:700}
.sidebar .nav-label{padding:1.2rem 1.4rem .4rem;font-size:.74rem;font-weight:700;color:#a9c4b2;text-transform:uppercase;letter-spacing:.1em}
.sidebar-footer{padding:1rem 1.2rem;border-top:1px solid rgba(255,255,255,.14)}
.btn-salir{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:.7rem;border-radius:.6rem;
  background:rgba(255,255,255,.1);color:#fff;text-decoration:none;font-weight:600}
.btn-salir:hover{background:var(--rojo);color:#fff}

.contenido-principal{flex-grow:1;min-width:0;display:flex;flex-direction:column;width:calc(100% - 270px)}
.topbar{display:flex;justify-content:space-between;align-items:center;background:#fff;padding:.8rem 2rem;
  border-bottom:1px solid var(--borde)}
.topbar-user{display:flex;align-items:center;gap:.8rem;background:none;border:0;padding:.2rem .4rem;border-radius:10px;cursor:pointer}
.topbar-user:hover{background:#f1f5ee}
.topbar-user-info{text-align:right;white-space:nowrap;line-height:1.2}
.topbar-user-name{display:block;font-weight:700;color:var(--texto)}
.topbar-user-role{display:block;font-size:.82rem;color:var(--texto2)}
.topbar-avatar{width:44px;height:44px;border-radius:50%;display:grid;place-items:center;background:var(--verde);
  color:#fff;font-weight:700;font-size:1.15rem;border:3px solid var(--amarillo)}
.area-vista{padding:2rem;flex-grow:1;overflow-y:auto}

.sidebar-overlay{display:none;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:1035}
.sidebar-overlay.visible{display:block}
@media (max-width:991.98px){
  .sidebar{position:fixed;height:100%;transform:translateX(-100%)}
  .sidebar.abierta{transform:translateX(0)}
  .contenido-principal{width:100%}
  .topbar{padding:.7rem 1rem}
  .area-vista{padding:1.2rem 1rem}
}











/* ---------- Validación en tiempo real ---------- */
.tv-msg{display:none;font-size:.92rem;line-height:1.4;margin-top:.4rem;font-weight:500}
.tv-msg.tv-error,.tv-msg.tv-ok,.tv-msg.tv-aviso{display:block}
.tv-msg.tv-error{color:#B91F28}
.tv-msg.tv-error::before{content:"✖ ";font-weight:700}
.tv-msg.tv-ok{color:#007800}
.tv-msg.tv-ok::before{content:"✔ ";font-weight:700}
.tv-msg.tv-aviso{color:#6b5900;background:#FFF7D6;border-radius:8px;padding:.4rem .7rem}
.tv-msg.tv-aviso::before{content:"⚠ "}
[data-tv].tv-campo-error{border-color:#D92D36!important;background-color:#fff7f7!important;box-shadow:0 0 0 .18rem rgba(217,45,54,.12)}
[data-tv].tv-campo-ok{border-color:#007800!important}

/* ---------- Menú público: texto siempre blanco (incluye "Institucionales" abierto) ---------- */
.nav-publico{--bs-navbar-color:#fff;--bs-navbar-hover-color:#fff;--bs-navbar-active-color:#fff}
.nav-publico .nav-link.show,.nav-publico .show>.nav-link{color:#fff}


















/* ============================================================
   DASHBOARD (pantalla de inicio del panel)
   ============================================================ */
.db-hero{background:linear-gradient(120deg,#14532D 0%,#0F3F22 100%);color:#fff;border-radius:18px;padding:1.8rem 2rem;
  display:flex;justify-content:space-between;align-items:center;gap:1.5rem;flex-wrap:wrap;position:relative;overflow:hidden;
  border-bottom:5px solid var(--amarillo);box-shadow:0 10px 26px rgba(20,83,45,.15)}
.db-hero::after{content:"";position:absolute;right:-70px;top:-70px;width:240px;height:240px;border-radius:50%;border:36px solid rgba(255,216,0,.13)}
.db-hero h1{color:#fff;font-size:clamp(1.5rem,3vw,2rem);font-weight:800;margin:0 0 .35rem}
.db-hero p{margin:0;opacity:.92}
.db-rol{display:inline-block;background:rgba(255,255,255,.15);padding:.25rem .85rem;border-radius:50px;font-size:.82rem;font-weight:600;margin-bottom:.7rem}
.db-acciones{display:flex;flex-wrap:wrap;gap:.6rem;position:relative;z-index:1}
.db-accion{display:inline-flex;align-items:center;gap:.5rem;background:rgba(255,255,255,.12);color:#fff;border:1px solid rgba(255,255,255,.3);
  border-radius:12px;padding:.7rem 1.1rem;font-weight:600;text-decoration:none;transition:.15s}
.db-accion:hover{background:#fff;color:var(--verde)}
.db-accion.principal{background:var(--rojo);border-color:var(--rojo);color:#fff}
.db-accion.principal:hover{background:var(--rojo-osc);border-color:var(--rojo-osc);color:#fff}

.db-kpi{background:#fff;border:1px solid var(--borde);border-radius:16px;padding:1.2rem 1.3rem;display:flex;gap:1rem;align-items:center;
  text-decoration:none;color:inherit;height:100%;transition:.2s;box-shadow:0 2px 10px rgba(20,83,45,.04)}
a.db-kpi:hover{transform:translateY(-3px);box-shadow:0 14px 28px rgba(20,83,45,.12);border-color:var(--verde);color:inherit}
.db-kpi-icono{width:58px;height:58px;border-radius:15px;display:grid;place-items:center;font-size:1.7rem;flex-shrink:0;background:#e6f0e8;color:var(--verde)}
.db-kpi-icono.rojo{background:#fdecee;color:var(--rojo)}
.db-kpi-icono.amarillo{background:var(--aviso);color:#8a6d00}
.db-kpi-num{font-size:2.1rem;font-weight:800;line-height:1.05;color:var(--texto)}
.db-kpi-num-chico{font-size:1.45rem;padding:.25rem 0}
.db-kpi-txt{color:var(--texto);font-weight:600;font-size:.97rem}
.db-kpi-sub{font-size:.8rem;font-weight:600;color:var(--verde-logo)}
.db-kpi-sub.bajo{color:var(--rojo)}.db-kpi-sub.neutro{color:var(--texto2);font-weight:500}
.db-kpi-sub i{font-size:1.1rem;vertical-align:-3px}

.db-card{background:#fff;border:1px solid var(--borde);border-radius:16px;padding:1.4rem;height:100%;box-shadow:0 2px 10px rgba(20,83,45,.04)}
.db-card-titulo{display:flex;justify-content:space-between;align-items:center;gap:.6rem;margin-bottom:1rem;padding-bottom:.8rem;border-bottom:1px solid var(--borde)}
.db-card-titulo h2{font-size:1.08rem;font-weight:800;color:var(--verde);margin:0}
.db-card-titulo h2 i{color:var(--verde-logo)}
.db-card-titulo a{font-size:.88rem;font-weight:600;color:var(--verde);text-decoration:none;white-space:nowrap}
.db-card-titulo a:hover{color:var(--rojo)}
.db-grafico{position:relative;height:270px}

.db-lista{list-style:none;margin:0;padding:0}
.db-lista li{display:flex;align-items:center;gap:.85rem;padding:.8rem 0;border-bottom:1px solid #eef2ec}
.db-lista li:last-child{border-bottom:0;padding-bottom:0}
.db-icono-sm{width:40px;height:40px;border-radius:11px;display:grid;place-items:center;font-size:1.15rem;flex-shrink:0;background:#e6f0e8;color:var(--verde)}
.db-icono-sm.rojo{background:#fdecee;color:var(--rojo)}
.db-icono-sm.amarillo{background:var(--aviso);color:#8a6d00}
.db-ver{font-size:.86rem;font-weight:700;color:var(--verde);text-decoration:none;white-space:nowrap}
.db-ver:hover{color:var(--rojo)}

.db-barra{height:11px;border-radius:50px;background:#e9efe7;overflow:hidden}
.db-barra>span{display:block;height:100%;border-radius:50px;background:var(--verde-logo);transition:width .6s}
.db-barra>span.medio{background:var(--amarillo)}
.db-barra>span.alto{background:var(--rojo)}

.db-tabla{width:100%;border-collapse:collapse;font-size:.94rem}
.db-tabla th{font-size:.76rem;text-transform:uppercase;letter-spacing:.06em;color:var(--texto2);font-weight:700;padding:.5rem .6rem;border-bottom:2px solid var(--borde);text-align:left}
.db-tabla td{padding:.75rem .6rem;border-bottom:1px solid #eef2ec;vertical-align:middle}
.db-tabla tr:last-child td{border-bottom:0}
.db-tabla tbody tr:hover{background:#f6f9f4}
.db-badge{display:inline-block;padding:.22rem .7rem;border-radius:50px;font-size:.77rem;font-weight:700}
.db-badge.ok{background:#e1f1e4;color:#0a5a1f}
.db-badge.aviso{background:var(--aviso);color:#6b5900}
.db-badge.gris{background:#eceeea;color:#4b564b}

.db-vacio{text-align:center;padding:2rem 1rem;color:var(--texto2)}
.db-vacio>i{font-size:2.4rem;color:var(--verde-logo);opacity:.6;display:block;margin-bottom:.4rem}
.db-vacio p{margin:0}

.db-mini{display:flex;align-items:center;gap:.8rem;background:#f6f9f4;border-radius:14px;padding:.9rem 1rem}
.db-alerta{display:flex;align-items:center;gap:.9rem;flex-wrap:wrap;background:var(--aviso);border:1px solid #ecd770;border-left:6px solid var(--amarillo);
  border-radius:14px;padding:1rem 1.2rem;color:#5b4b00}
.db-alerta>i{font-size:1.5rem}
.db-ayuda{display:flex;align-items:center;gap:.9rem;background:#fff;border:1px dashed var(--verde);border-radius:16px;padding:1.1rem 1.2rem}
.db-ayuda>i{font-size:1.8rem;color:var(--verde)}

.db-curso{border:1px solid var(--borde);border-top:4px solid var(--verde);border-radius:14px;padding:1.1rem;height:100%;background:#fcfdfb;display:flex;flex-direction:column}
.db-curso h3{font-size:1.02rem;font-weight:800;color:var(--verde);margin:0 0 .15rem;line-height:1.3}
.db-meta{list-style:none;padding:0;margin:0 0 .9rem;font-size:.86rem;color:var(--texto2);flex:1}
.db-meta li{display:flex;gap:.5rem;margin-bottom:.3rem}
.db-meta i{color:var(--verde-logo);margin-top:.1rem}

@media (max-width:575.98px){
  .db-hero{padding:1.3rem}.db-accion{flex:1 1 100%;justify-content:center}
  .db-kpi{padding:.9rem}.db-kpi-icono{width:46px;height:46px;font-size:1.3rem}.db-kpi-num{font-size:1.6rem}
}