:root{
  --trz-fast-primary:#174a7c;
  --trz-fast-soft:#eff6ff;
  --trz-fast-border:#cfe1f2;
  --trz-fast-shadow:0 10px 28px rgba(15,23,42,.14);
}

#trzFastBar{
  position:fixed;
  left:0;
  top:0;
  width:100%;
  height:3px;
  z-index:2147483000;
  pointer-events:none;
  opacity:0;
  transform:translateY(-3px);
  transition:opacity .16s ease, transform .16s ease;
}

#trzFastBar span{
  display:block;
  height:100%;
  width:38%;
  border-radius:999px;
  background:linear-gradient(90deg, transparent, var(--trz-fast-primary), transparent);
  transform:translateX(-120%);
}

body.trz-fast-loading #trzFastBar{
  opacity:1;
  transform:translateY(0);
}

body.trz-fast-loading #trzFastBar span{
  animation:trzFastSlide .85s ease-in-out infinite;
}

@keyframes trzFastSlide{
  from{transform:translateX(-120%);}
  to{transform:translateX(280%);}
}

#trzFastToast{
  position:fixed;
  right:16px;
  bottom:16px;
  z-index:2147482999;
  display:flex;
  align-items:center;
  gap:8px;
  min-height:34px;
  padding:8px 12px;
  border:1px solid rgba(207,225,242,.95);
  border-radius:999px;
  background:rgba(255,255,255,.96);
  color:#173a63;
  font-size:12px;
  font-weight:900;
  box-shadow:var(--trz-fast-shadow);
  opacity:0;
  transform:translateY(10px);
  pointer-events:none;
  transition:opacity .18s ease, transform .18s ease;
  backdrop-filter:blur(8px);
}

#trzFastToast::before{
  content:"";
  width:10px;
  height:10px;
  border-radius:999px;
  border:2px solid #cfe1f2;
  border-top-color:var(--trz-fast-primary);
  animation:trzFastSpin .72s linear infinite;
}

body.trz-fast-waiting #trzFastToast{
  opacity:1;
  transform:translateY(0);
}

@keyframes trzFastSpin{
  to{transform:rotate(360deg);}
}

button,
.btn,
.menu-btn,
.card,
.panel,
.module,
.dispatch-cardbox,
.cert-card,
.cert-bandeja-card,
.admin-card{
  transition:
    transform .12s ease,
    box-shadow .12s ease,
    background-color .12s ease,
    border-color .12s ease,
    opacity .12s ease;
}

button:not(:disabled):active,
.btn:not(:disabled):active,
.menu-btn:not(:disabled):active{
  transform:translateY(1px) scale(.992);
}

button.trz-fast-busy,
.btn.trz-fast-busy{
  position:relative;
  pointer-events:none;
  opacity:.82;
}

button.trz-fast-busy::after,
.btn.trz-fast-busy::after{
  content:"";
  display:inline-block;
  width:11px;
  height:11px;
  margin-left:7px;
  border-radius:999px;
  border:2px solid currentColor;
  border-top-color:transparent;
  vertical-align:-2px;
  animation:trzFastSpin .72s linear infinite;
}

.trz-fast-enter{
  animation:trzFastEnter .18s ease both;
}

@keyframes trzFastEnter{
  from{opacity:.82; transform:translateY(3px);}
  to{opacity:1; transform:translateY(0);}
}

body.trz-fast-loading .leaflet-container,
body.trz-fast-loading .dashboard-panel,
body.trz-fast-loading .cert-bandeja-tabla-wrap,
body.trz-fast-loading .dispatch-mapbox{
  cursor:progress;
}

body.trz-fast-loading .trz-soft-pulse{
  animation:trzSoftPulse 1.2s ease-in-out infinite;
}

@keyframes trzSoftPulse{
  0%,100%{opacity:1;}
  50%{opacity:.86;}
}

.trz-skeleton{
  position:relative;
  overflow:hidden;
  background:#eef4fb;
  border-radius:10px;
  min-height:14px;
}

.trz-skeleton::after{
  content:"";
  position:absolute;
  inset:0;
  transform:translateX(-100%);
  background:linear-gradient(90deg, transparent, rgba(255,255,255,.72), transparent);
  animation:trzSkeleton 1.1s ease-in-out infinite;
}

@keyframes trzSkeleton{
  to{transform:translateX(100%);}
}

@media (prefers-reduced-motion: reduce){
  #trzFastBar span,
  #trzFastToast::before,
  button.trz-fast-busy::after,
  .btn.trz-fast-busy::after,
  .trz-skeleton::after{
    animation:none !important;
  }

  button,
  .btn,
  .menu-btn,
  .card,
  .panel,
  .module{
    transition:none !important;
  }
}
