:root{
  --bg:#f5f7fa;--surface:#fff;--surface2:#f8fafc;--ink:#182230;--muted:#667085;--muted2:#98a2b3;
  --line:#e6eaf0;--line2:#d7dde5;--nav:#101828;--nav2:#0b1220;--navCard:#1d2636;--navText:#d6dde8;--navMuted:#8d99ad;
  --primary:#1b6e5b;--primary2:#115245;--primarySoft:#eaf5f1;--blue:#263b5e;--blueSoft:#eef4ff;
  --ok:#0a8f4d;--okSoft:#e9f8f0;--warn:#c98a1b;--warnSoft:#fbf2df;--bad:#c24b3f;--badSoft:#fbe9e6;
  --shadow:0 18px 42px rgba(16,24,40,.07);--shadowSm:0 6px 18px rgba(16,24,40,.045);
  --r20:20px;--r16:16px;--r12:12px;--side:292px;--top:72px;--bottom:76px;
}
body.dark{
  --bg:#0f172a;--surface:#111827;--surface2:#162033;--ink:#eef2ff;--muted:#a8b3c7;--muted2:#7f8da4;
  --line:#263244;--line2:#334155;--nav:#080f1f;--nav2:#050a14;--navCard:#111827;--navText:#d6dde8;--navMuted:#8d99ad;
  --primary:#2cb08f;--primary2:#1b8d73;--primarySoft:#12362f;--blue:#334766;--blueSoft:#16253a;
  --ok:#36c58f;--okSoft:#102f25;--warn:#e4a43a;--warnSoft:#332817;--bad:#ee7468;--badSoft:#361b1d;
  --shadow:0 18px 42px rgba(0,0,0,.28);--shadowSm:0 8px 20px rgba(0,0,0,.20);
}
*{box-sizing:border-box}
html,body{margin:0;min-height:100%}
body{font-family:Inter,system-ui,Arial,sans-serif;background:var(--bg);color:var(--ink);letter-spacing:-.006em}
button,input,select,textarea{font:inherit}
button{cursor:pointer}
a{text-decoration:none;color:inherit}
h1,h2,h3,h4{font-family:Manrope,Inter,Arial,sans-serif;margin:0;letter-spacing:-.02em}
svg{width:1em;height:1em;display:inline-block;vertical-align:-0.15em;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.mono{font-family:"JetBrains Mono",ui-monospace,monospace}

.pill{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;border:1px solid var(--line);background:var(--surface2);color:var(--muted);font-size:12px;font-weight:800;white-space:nowrap}
.pill.ok{background:var(--okSoft);color:var(--ok);border-color:#cceedd}
.pill.warn{background:var(--warnSoft);color:#9c6811;border-color:#f0ddb5}
.pill.bad{background:var(--badSoft);color:var(--bad);border-color:#f2cac3}
.pill.info{background:var(--blueSoft);color:#2e6f8e;border-color:#d8e7ff}
.pill.pri{background:var(--primarySoft);color:var(--primary);border-color:#cfe7df}

.btn{border:0;border-radius:10px;padding:11px 15px;min-height:42px;display:inline-flex;align-items:center;justify-content:center;gap:8px;font-weight:800;transition:.15s;white-space:nowrap}
.btn:hover{transform:translateY(-1px)}
.btn.primary{background:var(--primary);color:#fff;box-shadow:0 8px 18px rgba(27,110,91,.16)}
.btn.primary:hover{background:var(--primary2)}
.btn.dark{background:var(--blue);color:#fff}
.btn.ghost{background:var(--surface);border:1px solid var(--line2);color:var(--ink)}
.btn.full{width:100%}
.iconbtn{width:42px;height:42px;border-radius:10px;border:1px solid var(--line);background:var(--surface);display:grid;place-items:center;color:var(--ink);font-weight:900}
.iconbtn:hover{background:var(--surface2)}

label{display:grid;gap:7px;font-size:13px;font-weight:800;color:var(--ink)}
input,select,textarea{width:100%;border:1px solid var(--line2);background:var(--surface);color:var(--ink);border-radius:10px;min-height:43px;padding:11px 12px;outline:none}
textarea{min-height:88px;resize:vertical}
input:focus,select:focus,textarea:focus{border-color:rgba(27,110,91,.55);box-shadow:0 0 0 4px rgba(27,110,91,.08)}

/* LOGIN */
.login{
  min-height:100vh;
  display:grid;
  grid-template-columns:minmax(430px,.92fr) 1fr;
  background:
    radial-gradient(circle at 92% 10%,rgba(27,110,91,.10),transparent 34rem),
    var(--surface);
}
.loginArt{
  position:relative;
  min-height:100vh;
  background:
    radial-gradient(circle at 18% 18%,rgba(255,255,255,.12),transparent 34%),
    linear-gradient(160deg,var(--nav2),var(--nav) 58%,#163b35);
  color:#fff;
  padding:58px 56px;
  display:flex;
  flex-direction:column;
  justify-content:space-between;
  overflow:hidden;
}
.loginArt:before{
  content:"";
  position:absolute;
  width:460px;
  height:460px;
  border-radius:50%;
  right:-210px;
  top:-160px;
  background:rgba(27,110,91,.28);
  filter:blur(2px);
}
.loginArt:after{
  content:"";
  position:absolute;
  width:300px;
  height:300px;
  border-radius:50%;
  left:-160px;
  bottom:-120px;
  background:rgba(255,255,255,.07);
}
.loginArt > *{position:relative;z-index:1}
.brand{display:flex;gap:14px;align-items:flex-start}
.seal{
  width:52px;
  height:52px;
  border-radius:14px;
  background:rgba(255,255,255,.12);
  border:1px solid rgba(255,255,255,.20);
  display:grid;
  place-items:center;
  font-family:Manrope,Arial,sans-serif;
  font-weight:900;
  color:#fff;
  flex:0 0 auto;
}
.eyebrow{margin:0 0 12px;text-transform:uppercase;letter-spacing:.14em;font-size:12px;color:#b8c7d9;font-weight:900}
.loginArt h1{font-size:clamp(34px,4.6vw,56px);line-height:1.05;max-width:620px}
.loginArt p{max-width:520px;line-height:1.68;color:#cbd5e1;margin:26px 0 0}
.gpsBadge{
  width:max-content;
  max-width:100%;
  display:flex;
  align-items:center;
  gap:12px;
  margin-top:24px;
  background:rgba(255,255,255,.08);
  border:1px solid rgba(255,255,255,.16);
  border-radius:999px;
  padding:10px 16px;
  color:#dcefe8;
  font-size:13px;
  flex-wrap:wrap;
}
.dot{width:8px;height:8px;border-radius:99px;background:var(--primary);box-shadow:0 0 0 4px rgba(27,110,91,.22)}
.chips{display:flex;flex-wrap:wrap;gap:10px}
.chip{font-size:12px;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.06);border-radius:999px;padding:8px 12px;color:#cbd5e1;font-weight:800}
.loginPanel{
  display:grid;
  place-items:center;
  padding:42px;
  background:
    radial-gradient(circle at 92% 20%,rgba(38,59,94,.08),transparent 30rem),
    linear-gradient(180deg,#ffffff 0%,#f5f7fa 100%);
}
.loginBox{
  width:min(430px,100%);
  background:rgba(255,255,255,.92);
  backdrop-filter:blur(14px);
  border:1px solid var(--line);
  box-shadow:var(--shadow);
  border-radius:24px;
  padding:34px;
}
.loginBox h2{font-size:30px;margin-top:14px}
.loginBox p{color:var(--muted);line-height:1.58;margin:10px 0 0}
.form{display:grid;gap:16px;margin-top:24px}
.checkLine{display:flex;align-items:center;gap:9px;color:var(--muted);font-size:13px}
.checkLine input{width:auto;min-height:auto}
.meta{display:flex;justify-content:space-between;gap:10px;margin-top:24px;padding-top:18px;border-top:1px solid var(--line);font-size:12px;color:var(--muted2);flex-wrap:wrap}
.alertaError{border:1px solid #f2cac3;background:var(--badSoft);color:var(--bad);border-radius:12px;padding:12px;margin-top:14px;font-weight:700;font-size:13px}

/* ADMIN LAYOUT */
.app{min-height:100vh;display:flex}
.side{position:fixed;inset:0 auto 0 0;width:var(--side);background:linear-gradient(180deg,var(--nav),var(--nav2));color:var(--navText);z-index:50}
.sideInner{height:100%;display:flex;flex-direction:column;min-height:0}
.brandZone{display:flex;align-items:center;gap:12px;padding:18px 18px 16px;border-bottom:1px solid rgba(255,255,255,.08)}
.brandZone .seal{width:42px;height:42px;border-radius:13px}
.brandZone strong{display:block;color:#fff;font-size:17px}
.brandZone small{display:block;color:var(--navMuted);margin-top:3px}
.close{display:none;margin-left:auto}

.nav{padding:14px 12px 18px;overflow-y:auto;flex:1;min-height:0}
.navSingle,.navGroup{width:100%;border:0;background:transparent;color:var(--navText);display:flex;align-items:center;gap:11px;padding:11px 12px;border-radius:12px;text-align:left;font-weight:780;opacity:.86}
.navSingle:hover,.navGroup:hover{background:rgba(255,255,255,.07);opacity:1}
.navSingle.active{background:#fff;color:var(--primary2);opacity:1;box-shadow:0 8px 18px rgba(0,0,0,.16)}
.navIcon,.navGroup i{width:24px;height:24px;border-radius:8px;display:grid;place-items:center;color:inherit;font-style:normal;flex:0 0 auto}
.navSection{margin-top:8px}
.navGroup{justify-content:space-between}
.navGroup span{display:flex;align-items:center;gap:10px}
.navGroup b{width:18px;height:18px;display:grid;place-items:center;color:var(--navMuted);transition:.18s}
.navGroup.active b{transform:rotate(90deg);color:#fff}
.navSub{display:none;margin:4px 0 8px 34px;padding-left:12px;border-left:1px solid rgba(255,255,255,.10)}
.navSub.open{display:grid;gap:2px}
.navSub a{color:var(--navMuted);padding:9px 10px;border-radius:10px;font-size:13px;font-weight:750}
.navSub a:hover{color:#fff;background:rgba(255,255,255,.06)}

.sideFooter{padding:14px;border-top:1px solid rgba(255,255,255,.08);background:rgba(8,15,31,.34)}
.userCompact{display:flex;align-items:center;gap:11px;padding:12px;background:var(--navCard);border:1px solid rgba(255,255,255,.08);border-radius:16px;margin-bottom:10px}
.avatar{width:42px;height:42px;border-radius:12px;background:var(--primary);display:grid;place-items:center;color:#fff;font-weight:900;flex:0 0 auto}
.userCompact strong{display:block;color:#fff;font-size:14px;max-width:168px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.userCompact small{display:block;color:var(--navMuted);font-size:12px;margin-top:2px}
.logoutBtn{width:100%;height:42px;border:1px solid rgba(255,255,255,.10);background:rgba(255,255,255,.06);color:var(--navText);border-radius:13px;display:flex;align-items:center;justify-content:center;gap:8px;font-weight:850}
.logoutBtn:hover{background:rgba(255,255,255,.10);color:#fff}

.main{margin-left:var(--side);width:calc(100% - var(--side));min-height:100vh}
.top{height:var(--top);position:sticky;top:0;z-index:40;background:rgba(255,255,255,.86);backdrop-filter:blur(18px);border-bottom:1px solid var(--line);padding:0 24px;display:flex;align-items:center;gap:16px}
body.dark .top{background:rgba(17,24,39,.86)}
.topTitle small{display:block;text-transform:uppercase;letter-spacing:.1em;color:var(--muted2);font-weight:900;font-size:11px}
.topTitle strong{font-size:19px}
.topContext{margin-left:auto;display:flex;align-items:center;gap:8px}
.topActions{display:flex;gap:8px;align-items:center}
.menu{display:none}
.content{padding:26px;max-width:1560px;margin:0 auto;width:100%}
.bottom{display:none}

.pageHead{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;margin-bottom:22px}
.pageHead h2{font-size:clamp(24px,3vw,32px);margin:8px 0 6px}
.pageHead p{margin:0;color:var(--muted);line-height:1.55;max-width:830px}
.headActions{display:flex;gap:10px;flex-wrap:wrap;justify-content:flex-end}
.grid{display:grid;gap:18px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}
.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g4{grid-template-columns:repeat(4,minmax(0,1fr))}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r16);padding:20px;box-shadow:var(--shadowSm)}
.cardHead{display:flex;justify-content:space-between;gap:14px;margin-bottom:16px}
.cardHead h3{font-size:17px}
.cardHead p{margin:5px 0 0;color:var(--muted);font-size:14px;line-height:1.45}
.metric{display:flex;gap:16px;align-items:center;min-height:120px}
.metricIcon{width:50px;height:50px;border-radius:14px;background:var(--surface2);border:1px solid var(--line);display:grid;place-items:center;font-size:18px;font-weight:900;color:var(--primary)}
.metricVal{font-family:Manrope,Inter,Arial,sans-serif;font-size:30px;font-weight:900;letter-spacing:-1px}
.metricLab{color:var(--muted);font-weight:650;font-size:13px}
.row{display:flex;justify-content:space-between;align-items:center}
.progress{height:9px;border:1px solid var(--line);background:var(--surface2);border-radius:999px;overflow:hidden}
.progress i{display:block;height:100%;background:var(--primary)}
.list{display:grid;gap:10px}
.li{display:flex;gap:10px;align-items:center;padding:11px;background:var(--surface2);border:1px solid var(--line);border-radius:12px}
.miniStats{display:grid;grid-template-columns:repeat(2,1fr);gap:10px}
.mini{background:var(--surface2);border:1px solid var(--line);border-radius:14px;padding:13px}
.mini strong{display:block;font-size:22px}
.mini span{font-size:12px;color:var(--muted);font-weight:800}
.tableWrap{overflow-x:auto;border:1px solid var(--line);border-radius:14px;background:var(--surface)}
table{width:100%;border-collapse:collapse;min-width:900px}
th,td{padding:13px 14px;text-align:left;border-bottom:1px solid var(--line);font-size:13.5px;vertical-align:middle}
th{background:var(--surface2);color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-size:11px;font-weight:900}
tr:hover td{background:#fbfcfd}
body.dark table tbody tr:hover td{background:var(--surface2)}
.tiny{border:1px solid var(--line);background:var(--surface);border-radius:9px;min-width:40px;height:34px;display:grid;place-items:center;font-size:12px;font-weight:850;color:var(--muted)}
.tiny:hover{background:var(--surface2)}

@media(max-width:1180px){
  .g4{grid-template-columns:repeat(2,1fr)}
  .g3{grid-template-columns:repeat(2,1fr)}
  .topContext{display:none}
}
@media(max-width:900px){
  .login{grid-template-columns:1fr;background:var(--surface)}
  .loginArt{min-height:360px;padding:36px 28px}
  .loginArt h1{font-size:34px}
  .loginArt p{margin-top:18px}
  .loginPanel{padding:0 16px 28px;background:var(--bg)}
  .loginBox{margin-top:-58px;padding:24px;border-radius:22px}
  .chips{margin-top:28px}
}
@media(max-width:860px){
  .side{transform:translateX(-105%);transition:.22s;width:min(88vw,330px)}
  .side.open{transform:translateX(0);box-shadow:28px 0 70px rgba(0,0,0,.28)}
  .close{display:grid}
  .main{margin-left:0;width:100%;padding-bottom:calc(var(--bottom) + 18px)}
  .menu{display:grid}
  .top{padding:0 14px}
  .content{padding:18px}
  .pageHead{display:grid}
  .headActions{justify-content:flex-start}
  .headActions .btn{flex:1 1 160px}
  .g2,.g3,.g4{grid-template-columns:1fr}
  .bottom{position:fixed;z-index:45;left:12px;right:12px;bottom:12px;height:var(--bottom);background:rgba(255,255,255,.94);backdrop-filter:blur(18px);border:1px solid var(--line);border-radius:22px;box-shadow:var(--shadow);display:grid;grid-template-columns:repeat(5,1fr);padding:8px;gap:4px}
  body.dark .bottom{background:rgba(17,24,39,.94)}
  .bottom a{border:0;background:transparent;border-radius:15px;color:var(--muted);font-size:11px;font-weight:900;display:grid;place-items:center}
  .bottom b{font-size:20px}
  .bottom a.active{color:var(--primary);background:var(--primarySoft)}
}
@media(max-width:520px){
  .loginArt{padding:30px 22px;min-height:410px}
  .brand{align-items:flex-start}
  .loginArt h1{font-size:30px}
  .gpsBadge{border-radius:18px}
  .chips{display:none}
  .loginBox{padding:20px}
  .meta{display:grid}
}


/* MICROINTERACCIONES V4 */
@keyframes gdFadeUp{
  from{opacity:0;transform:translateY(16px)}
  to{opacity:1;transform:translateY(0)}
}
@keyframes gdFadeIn{
  from{opacity:0}
  to{opacity:1}
}
@keyframes gdFloat{
  0%,100%{transform:translateY(0)}
  50%{transform:translateY(-8px)}
}
@keyframes gdPulse{
  0%{box-shadow:0 0 0 0 rgba(27,110,91,.25)}
  70%{box-shadow:0 0 0 12px rgba(27,110,91,0)}
  100%{box-shadow:0 0 0 0 rgba(27,110,91,0)}
}
@keyframes gdSpin{
  to{transform:rotate(360deg)}
}
@keyframes gdProgress{
  0%{transform:translateX(-100%) scaleX(.35)}
  45%{transform:translateX(-20%) scaleX(.55)}
  100%{transform:translateX(110%) scaleX(.35)}
}

.loginArt .brand,
.loginArt > div > p,
.gpsBadge,
.chips,
.loginBox{
  animation:gdFadeUp .55s cubic-bezier(.2,.8,.2,1) both;
}
.loginArt > div > p{animation-delay:.08s}
.gpsBadge{animation-delay:.14s}
.chips{animation-delay:.2s}
.loginBox{animation-delay:.12s}

.loginArt .seal{
  animation:gdFloat 4.5s ease-in-out infinite;
}
.loginBox .pill.pri{
  animation:gdPulse 2.8s ease-in-out infinite;
}

.btn,
.iconbtn,
.navSingle,
.navGroup,
.navSub a,
.logoutBtn,
.card,
.metric,
.tiny{
  transition:
    transform .16s ease,
    box-shadow .16s ease,
    background .16s ease,
    border-color .16s ease,
    color .16s ease,
    opacity .16s ease;
}

.btn:hover,
.iconbtn:hover,
.card:hover,
.metric:hover,
.tiny:hover{
  transform:translateY(-2px);
}

.btn:active,
.iconbtn:active,
.navSingle:active,
.navGroup:active,
.logoutBtn:active,
.tiny:active{
  transform:translateY(0) scale(.985);
}

.card:hover,
.metric:hover{
  box-shadow:var(--shadow);
}

input,
select,
textarea{
  transition:border-color .16s ease, box-shadow .16s ease, transform .16s ease;
}

input:focus,
select:focus,
textarea:focus{
  transform:translateY(-1px);
}

/* Ripple */
.btn,
.iconbtn,
.logoutBtn,
.tiny{
  position:relative;
  overflow:hidden;
}
.ripple{
  position:absolute;
  border-radius:50%;
  transform:scale(0);
  animation:gdRipple .55s linear;
  background:rgba(255,255,255,.38);
  pointer-events:none;
}
.btn.ghost .ripple,
.iconbtn .ripple,
.tiny .ripple{
  background:rgba(27,110,91,.16);
}
@keyframes gdRipple{
  to{transform:scale(4);opacity:0}
}

/* Loading de botón */
.btn.is-loading,
.logoutBtn.is-loading{
  pointer-events:none;
  opacity:.86;
}
.btn.is-loading::before,
.logoutBtn.is-loading::before{
  content:"";
  width:16px;
  height:16px;
  border-radius:50%;
  border:2px solid currentColor;
  border-top-color:transparent;
  animation:gdSpin .75s linear infinite;
}

/* Capa superior de carga */
#gdPageLoader{
  position:fixed;
  inset:0;
  z-index:9999;
  background:rgba(245,247,250,.45);
  backdrop-filter:blur(2px);
  opacity:0;
  pointer-events:none;
  transition:opacity .18s ease;
}
body.dark #gdPageLoader{
  background:rgba(15,23,42,.45);
}
#gdPageLoader.show{
  opacity:1;
  pointer-events:auto;
}
#gdPageLoader .bar{
  position:absolute;
  left:0;
  top:0;
  height:4px;
  width:100%;
  overflow:hidden;
  background:rgba(27,110,91,.12);
}
#gdPageLoader .bar::before{
  content:"";
  display:block;
  height:100%;
  width:70%;
  background:linear-gradient(90deg,var(--primary),var(--primary2));
  transform-origin:left center;
  animation:gdProgress .9s ease-in-out infinite;
}
#gdPageLoader .loaderBox{
  position:absolute;
  left:50%;
  top:50%;
  transform:translate(-50%,-50%);
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:18px;
  box-shadow:var(--shadow);
  padding:18px 20px;
  display:flex;
  align-items:center;
  gap:12px;
  color:var(--ink);
  font-weight:900;
}
#gdPageLoader .spinner{
  width:22px;
  height:22px;
  border-radius:50%;
  border:3px solid var(--line);
  border-top-color:var(--primary);
  animation:gdSpin .75s linear infinite;
}

/* Entrada suave del contenido administrador */
.top,
.pageHead,
.grid,
.card{
  animation:gdFadeUp .35s cubic-bezier(.2,.8,.2,1) both;
}
.grid:nth-of-type(1){animation-delay:.04s}
.grid:nth-of-type(2){animation-delay:.08s}
.card:nth-child(2){animation-delay:.04s}
.card:nth-child(3){animation-delay:.08s}
.card:nth-child(4){animation-delay:.12s}

/* Accesibilidad: respeta reducción de movimiento */
@media (prefers-reduced-motion: reduce){
  *,
  *::before,
  *::after{
    animation-duration:.01ms!important;
    animation-iteration-count:1!important;
    scroll-behavior:auto!important;
    transition-duration:.01ms!important;
  }
}


/* FIX V5: alinear botón de modo noche a la derecha en móvil */
.topActions{
  margin-left:auto;
}

@media(max-width:860px){
  .top{
    display:flex;
  }

  .topTitle{
    min-width:0;
  }

  .topActions{
    margin-left:auto;
    flex:0 0 auto;
  }
}
