/* Sistema Puebla — Identidad institucional v4
   Paleta sobria inspirada en imagen gubernamental de Puebla/México:
   guinda, vino oscuro, dorado, crema, verde institucional y grises cálidos. */
:root {
  --puebla-guinda: #6a1b32;
  --puebla-guinda-700: #541126;
  --puebla-guinda-900: #3d0c1b;
  --puebla-dorado: #bc955c;
  --puebla-dorado-600: #a97f43;
  --puebla-dorado-soft: #ead8bd;
  --puebla-verde: #235b4e;
  --puebla-verde-700: #17443a;
  --puebla-crema: #f7f0e6;
  --puebla-crema-2: #fbf7f0;
  --puebla-tinta: #22191d;
  --puebla-muted: #746a6e;
  --puebla-border: #e4d8c8;
  --puebla-danger: #9f2241;
  --puebla-warning: #ddad4b;
  --puebla-info: #2f6f73;
  --puebla-success: #1f7a4d;
  --shadow-sm: 0 2px 10px rgba(61,12,27,.08);
  --shadow-md: 0 10px 28px rgba(61,12,27,.14);
  --shadow-lg: 0 18px 45px rgba(61,12,27,.20);
  --radius: 16px;
  --radius-sm: 10px;
  --bs-primary: var(--puebla-guinda);
  --bs-primary-rgb: 106,27,50;
  --bs-success: var(--puebla-success);
  --bs-success-rgb: 31,122,77;
  --bs-info: var(--puebla-info);
  --bs-info-rgb: 47,111,115;
  --bs-warning: var(--puebla-warning);
  --bs-warning-rgb: 221,173,75;
  --bs-danger: var(--puebla-danger);
  --bs-danger-rgb: 159,34,65;
  --bs-body-color: var(--puebla-tinta);
  --bs-body-bg: #f3eee7;
  --bs-border-color: var(--puebla-border);
  --bs-link-color: var(--puebla-guinda);
  --bs-link-hover-color: var(--puebla-guinda-700);
}

* { box-sizing: border-box; }

html { min-height: 100%; }

body {
  min-height: 100vh;
  font-size: .95rem;
  color: var(--puebla-tinta);
  background:
    radial-gradient(circle at 15% 0%, rgba(188,149,92,.16), transparent 30rem),
    radial-gradient(circle at 95% 5%, rgba(106,27,50,.12), transparent 28rem),
    linear-gradient(180deg, #fbf7f0 0%, #f3eee7 44%, #eee5d9 100%);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

body::before {
  content: "";
  position: fixed;
  inset: 0;
  pointer-events: none;
  opacity: .25;
  background-image:
    linear-gradient(135deg, rgba(188,149,92,.16) 0 1px, transparent 1px),
    linear-gradient(45deg, rgba(106,27,50,.05) 0 1px, transparent 1px);
  background-size: 38px 38px, 42px 42px;
  mask-image: linear-gradient(180deg, black, transparent 80%);
  z-index: -1;
}

a { text-decoration-thickness: .08em; text-underline-offset: .18em; }

/* Identidad principal */
.bg-puebla,
.navbar-dark.bg-puebla {
  background:
    linear-gradient(90deg, var(--puebla-guinda-900) 0%, var(--puebla-guinda) 52%, #7d2340 100%) !important;
  border-bottom: 4px solid var(--puebla-dorado);
}

.text-puebla { color: var(--puebla-guinda) !important; }
.text-gold { color: var(--puebla-dorado-600) !important; }
.bg-puebla-soft { background: var(--puebla-crema) !important; }
.border-gold { border-color: var(--puebla-dorado) !important; }

/* Navbar */
.navbar { min-height: 64px; }
.navbar-brand {
  letter-spacing: .01em;
  display: inline-flex;
  align-items: center;
  gap: .35rem;
}
.navbar-brand i {
  color: var(--puebla-dorado);
  filter: drop-shadow(0 1px 1px rgba(0,0,0,.25));
}
.navbar-dark.bg-puebla .nav-link {
  color: rgba(255,255,255,.84);
  border-radius: 999px;
  padding: .48rem .72rem;
  margin: .08rem .02rem;
  transition: background-color .16s ease, color .16s ease, transform .16s ease;
}
.navbar-dark.bg-puebla .nav-link:hover,
.navbar-dark.bg-puebla .nav-link:focus {
  color: #fff;
  background: rgba(255,255,255,.12);
  transform: translateY(-1px);
}
.navbar-dark.bg-puebla .nav-link.active,
.navbar-dark.bg-puebla .navbar-nav .show > .nav-link {
  color: #fff;
  background: rgba(188,149,92,.28);
  font-weight: 700;
}
.navbar-toggler { border-color: rgba(255,255,255,.28); }

main.container-fluid {
  width: min(100%, 1440px);
  padding: 1.35rem clamp(.75rem, 1.5vw, 1.75rem) !important;
}

/* Encabezados */
h1,h2,h3,h4,h5,h6 { color: #2a171d; }
h4 { font-weight: 800; letter-spacing: -.02em; }
h4 > i, h5 > i { color: var(--puebla-guinda); }

/* Cards */
.card {
  border: 1px solid rgba(188,149,92,.22);
  border-radius: var(--radius);
  box-shadow: var(--shadow-sm);
  background: rgba(255,255,255,.94);
  overflow: hidden;
  transition: box-shadow .2s ease, transform .2s ease, border-color .2s ease;
}
.card:hover { box-shadow: var(--shadow-md); border-color: rgba(188,149,92,.35); }
.card-header {
  border-bottom: 1px solid rgba(188,149,92,.25);
  font-weight: 700;
  color: var(--puebla-guinda-900);
  background:
    linear-gradient(90deg, rgba(247,240,230,.98), rgba(255,255,255,.96)) !important;
}
.card-footer {
  border-top: 1px solid rgba(188,149,92,.22);
  background: var(--puebla-crema-2) !important;
}

/* Tarjetas KPI / fondos Bootstrap adaptados */
.kpi-card,
.card.bg-primary,
.card.bg-success,
.card.bg-info,
.card.bg-danger,
.card.bg-warning {
  border: none;
  position: relative;
  isolation: isolate;
  box-shadow: var(--shadow-md);
}
.card.bg-primary,
.bg-primary {
  background: linear-gradient(135deg, var(--puebla-guinda) 0%, var(--puebla-guinda-900) 100%) !important;
}
.card.bg-success,
.bg-success {
  background: linear-gradient(135deg, var(--puebla-verde) 0%, var(--puebla-verde-700) 100%) !important;
}
.card.bg-info,
.bg-info {
  background: linear-gradient(135deg, #31797d 0%, #1f4d51 100%) !important;
  color: #fff !important;
}
.card.bg-danger,
.bg-danger {
  background: linear-gradient(135deg, var(--puebla-danger) 0%, #68152c 100%) !important;
}
.card.bg-warning,
.bg-warning {
  background: linear-gradient(135deg, #e7c071 0%, var(--puebla-dorado-600) 100%) !important;
}
.card.bg-primary::after,
.card.bg-success::after,
.card.bg-info::after,
.card.bg-danger::after {
  content: "";
  position: absolute;
  right: -34px;
  bottom: -50px;
  width: 150px;
  height: 150px;
  border-radius: 50%;
  background: rgba(255,255,255,.12);
  z-index: -1;
}
.bg-light {
  background: linear-gradient(180deg, var(--puebla-crema-2), var(--puebla-crema)) !important;
}

/* Botones */
.btn {
  border-radius: 999px;
  font-weight: 700;
  letter-spacing: .005em;
  box-shadow: none !important;
  transition: transform .16s ease, filter .16s ease, background-color .16s ease, border-color .16s ease;
}
.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0); }
.btn-primary,
.btn-puebla {
  color: #fff !important;
  border-color: var(--puebla-guinda) !important;
  background: linear-gradient(135deg, var(--puebla-guinda) 0%, var(--puebla-guinda-700) 100%) !important;
}
.btn-primary:hover,
.btn-puebla:hover,
.btn-primary:focus,
.btn-puebla:focus {
  color: #fff !important;
  border-color: var(--puebla-guinda-900) !important;
  background: linear-gradient(135deg, var(--puebla-guinda-700) 0%, var(--puebla-guinda-900) 100%) !important;
}
.btn-outline-primary,
.btn-outline-puebla {
  color: var(--puebla-guinda) !important;
  border-color: var(--puebla-guinda) !important;
  background: rgba(255,255,255,.72);
}
.btn-outline-primary:hover,
.btn-outline-puebla:hover {
  color: #fff !important;
  background: var(--puebla-guinda) !important;
  border-color: var(--puebla-guinda) !important;
}
.btn-outline-success { color: var(--puebla-verde) !important; border-color: var(--puebla-verde) !important; }
.btn-outline-success:hover { color:#fff !important; background: var(--puebla-verde) !important; }
.btn-outline-secondary { border-color: #b9a99a; color: #5f5559; }
.btn-outline-secondary:hover { background: #5f5559; color: #fff; border-color: #5f5559; }
.btn-danger { background: var(--puebla-danger) !important; border-color: var(--puebla-danger) !important; }
.btn-sm { padding-inline: .75rem; }

/* Formularios */
.form-label { color: #4c3039; }
.form-control,
.form-select,
.input-group-text {
  border-radius: var(--radius-sm);
  border-color: #d8c9b8;
  background-color: rgba(255,255,255,.96);
}
.input-group > .form-control:not(:first-child),
.input-group > .form-select:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; }
.input-group > .input-group-text:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; }
.form-control:focus,
.form-select:focus {
  border-color: var(--puebla-dorado-600);
  box-shadow: 0 0 0 .22rem rgba(188,149,92,.22);
}
.form-control::placeholder { color: #9b8c82; }
.form-check-input:checked {
  background-color: var(--puebla-guinda);
  border-color: var(--puebla-guinda);
}

/* Tablas */
.table {
  --bs-table-color: var(--puebla-tinta);
  --bs-table-hover-bg: rgba(188,149,92,.13);
  margin-bottom: 0;
}
.table > :not(caption) > * > * {
  border-bottom-color: rgba(188,149,92,.22);
  vertical-align: middle;
}
.table-light,
.table thead,
thead.table-light {
  --bs-table-bg: #efe3d4;
  --bs-table-color: var(--puebla-guinda-900);
  color: var(--puebla-guinda-900);
  border-color: rgba(188,149,92,.3);
}
.table-hover tbody tr:hover { background: rgba(188,149,92,.13); }
.sticky-top { position: sticky; top: 0; z-index: 10; }
.table-responsive { border-radius: 0 0 var(--radius) var(--radius); }

/* Listas */
.list-group-item {
  border-color: rgba(188,149,92,.20);
  background: rgba(255,255,255,.9);
}
.list-group-item-action { transition: background-color .16s ease, color .16s ease, padding-left .16s ease; }
.list-group-item-action:hover,
.list-group-item-action:focus {
  background: var(--puebla-crema);
  color: var(--puebla-guinda);
  padding-left: 1.25rem;
}

/* Badges */
.badge {
  border-radius: 999px;
  font-weight: 700;
  letter-spacing: .01em;
}
.badge.bg-primary { background: var(--puebla-guinda) !important; }
.badge.bg-secondary { background: #6d6265 !important; }
.badge.bg-success { background: var(--puebla-verde) !important; }
.badge.bg-info { background: #d7ebe9 !important; color: #1f4d51 !important; }
.badge.bg-warning { background: #ffe2a3 !important; color: #513916 !important; }
.badge.bg-danger { background: var(--puebla-danger) !important; }

/* Alertas */
.alert {
  border-radius: var(--radius-sm);
  border-width: 1px;
}
.alert-success { background:#e9f5ef; color:#18513a; border-color:#badfce; }
.alert-danger { background:#fae9ee; color:#71152d; border-color:#ecc1cd; }
.alert-warning { background:#fff4d8; color:#5f461b; border-color:#f0d08a; }
.alert-info { background:#e8f3f3; color:#1f4d51; border-color:#c8e2e1; }

/* Progress */
.progress {
  height: .9rem;
  border-radius: 999px;
  background: #e6d8c8;
  overflow: hidden;
}
.progress-bar { border-radius: 999px; }
.progress-bar.bg-success { background: var(--puebla-verde) !important; }
.progress-bar.bg-warning { background: var(--puebla-warning) !important; }
.progress-bar.bg-danger { background: var(--puebla-danger) !important; }

/* Utilidades visuales */
.shadow-sm { box-shadow: var(--shadow-sm) !important; }
.rounded-bottom { border-bottom-right-radius: var(--radius) !important; border-bottom-left-radius: var(--radius) !important; }
.text-primary { color: var(--puebla-guinda) !important; }
.text-success { color: var(--puebla-verde) !important; }
.text-info { color: var(--puebla-info) !important; }
.text-warning { color: var(--puebla-dorado-600) !important; }
.text-danger { color: var(--puebla-danger) !important; }
.text-muted { color: var(--puebla-muted) !important; }
.tracking-wide { letter-spacing: .15em; }
.font-monospace.tracking-wide,
.tracking-wide { font-variant-numeric: tabular-nums; }

/* Login / pantallas auth */
.auth-page,
body.auth-page {
  min-height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1rem;
  background:
    radial-gradient(circle at top left, rgba(188,149,92,.22), transparent 28rem),
    radial-gradient(circle at bottom right, rgba(35,91,78,.16), transparent 24rem),
    linear-gradient(135deg, var(--puebla-guinda-900) 0%, var(--puebla-guinda) 48%, var(--puebla-verde-700) 100%);
}
.auth-card {
  width: 100%;
  max-width: 440px;
  border: 1px solid rgba(255,255,255,.25);
  box-shadow: var(--shadow-lg);
}
.auth-card-wide { max-width: 760px; }
.brand-icon,
.auth-brand-icon {
  display: inline-grid;
  place-items: center;
  width: 72px;
  height: 72px;
  border-radius: 50%;
  color: var(--puebla-guinda);
  background: linear-gradient(135deg, #fff 0%, var(--puebla-crema) 100%);
  border: 3px solid var(--puebla-dorado);
  box-shadow: 0 10px 24px rgba(106,27,50,.18);
  font-size: 2.35rem !important;
}
.auth-header {
  color: #fff;
  background: linear-gradient(135deg, var(--puebla-guinda-900), var(--puebla-guinda)) !important;
  border-bottom: 4px solid var(--puebla-dorado);
}

/* Footer */
footer {
  background: linear-gradient(90deg, #f7f0e6, #fbf7f0) !important;
  border-top: 1px solid var(--puebla-border) !important;
}

/* Mapas */
.leaflet-container {
  font-family: inherit;
  background: #efe3d4;
}
#mapa-dash,
#mapa,
[id^="mapa"] {
  border: 1px solid rgba(188,149,92,.25);
}

/* GPS blink */
.blink,
.blink-dot { animation: blink 1s step-end infinite; }
@keyframes blink { 50% { opacity: .28; } }

/* Animación página */
main { animation: fadeIn .24s ease; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }

/* Scrollbar suave */
* {
  scrollbar-width: thin;
  scrollbar-color: rgba(106,27,50,.45) rgba(247,240,230,.8);
}
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-track { background: rgba(247,240,230,.8); }
*::-webkit-scrollbar-thumb { background: rgba(106,27,50,.45); border-radius: 999px; border: 2px solid rgba(247,240,230,.8); }
*::-webkit-scrollbar-thumb:hover { background: rgba(106,27,50,.65); }

/* PWA safe area */
@media (display-mode: standalone) {
  .navbar { padding-top: env(safe-area-inset-top, 0); }
  body { padding-bottom: env(safe-area-inset-bottom, 0); }
}

/* Responsive */
@media (max-width: 991.98px) {
  .navbar-dark.bg-puebla .nav-link { border-radius: var(--radius-sm); padding: .62rem .75rem; }
  .navbar-nav { padding-block: .5rem; }
}
@media (max-width: 576px) {
  body { font-size: .91rem; }
  main.container-fluid { padding: .9rem .65rem !important; }
  .card { border-radius: 14px; }
  .card-body { padding: 1rem; }
  .table th, .table td { font-size: .82rem; padding: .48rem .55rem; }
  .btn-sm { font-size: .78rem; padding: .35rem .6rem; }
  h4 { font-size: 1.12rem; }
  .display-6 { font-size: 1.75rem; }
}

/* Impresión limpia para reportes */
@media print {
  body { background: #fff !important; color: #000; }
  body::before,
  .navbar,
  footer,
  .btn,
  form,
  script { display: none !important; }
  main.container-fluid { width: 100%; padding: 0 !important; }
  .card { box-shadow: none !important; border: 1px solid #bbb; break-inside: avoid; }
}

/* Mapas online */
.map-online-error{display:flex;align-items:center;justify-content:center;min-height:240px;height:100%;padding:1.5rem;text-align:center;background:linear-gradient(135deg,#f8f3ec,#efe4d6);border:1px dashed rgba(106,27,50,.35);color:#4b1730}
.map-online-error .box{max-width:420px;background:rgba(255,255,255,.78);border-radius:18px;padding:1rem 1.25rem;box-shadow:0 8px 22px rgba(61,12,27,.08)}
.map-online-error strong{display:block;color:#6a1b32;font-size:1rem;margin-bottom:.25rem}
.map-online-error small{color:#746a6e}
.leaflet-container{background:#efe4d6;border-radius:inherit}
.leaflet-control-attribution{font-size:10px}

/* Visor OSM propio: se usa únicamente si Leaflet CDN no carga. Sigue usando mapas online. */
.puebla-osm-map{background:#e9dfcf;cursor:grab;user-select:none;touch-action:none;position:relative;overflow:hidden}
.puebla-osm-map.is-dragging{cursor:grabbing}
.puebla-osm-tiles,.puebla-osm-overlays,.puebla-osm-popups{position:absolute;inset:0;overflow:hidden}
.puebla-osm-tiles img{position:absolute;width:256px;height:256px;max-width:none!important;max-height:none!important;border:0}
.puebla-osm-overlays,.puebla-osm-popups{pointer-events:none;z-index:410}
.puebla-osm-marker{position:absolute;transform:translate(-50%,-50%);z-index:450;pointer-events:auto;cursor:pointer}
.puebla-osm-dot{width:16px;height:16px;background:#6a1b32;border:3px solid #fff;border-radius:50%;box-shadow:0 2px 8px rgba(0,0,0,.4)}
.puebla-osm-polyline{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none;z-index:430}
.puebla-osm-popup{position:absolute;transform:translate(-50%,-100%);min-width:160px;max-width:260px;background:#fff;color:#3d1b25;border:1px solid rgba(61,27,37,.18);border-radius:12px;padding:.65rem .85rem;box-shadow:0 8px 24px rgba(0,0,0,.22);font-size:.86rem;z-index:480;pointer-events:auto}
.puebla-osm-popup:after{content:"";position:absolute;left:50%;bottom:-9px;transform:translateX(-50%);border-width:9px 8px 0 8px;border-style:solid;border-color:#fff transparent transparent transparent}
.puebla-osm-popup button{position:absolute;right:.35rem;top:.2rem;border:0;background:transparent;color:#6a1b32;font-size:1.15rem;line-height:1;cursor:pointer}
.puebla-osm-popup a{color:#6a1b32;font-weight:700;text-decoration:none}
.puebla-osm-controls{position:absolute;z-index:500;left:12px;top:12px;border-radius:10px;overflow:hidden;box-shadow:0 4px 12px rgba(0,0,0,.18)}
.puebla-osm-controls button{display:block;width:34px;height:34px;border:0;border-bottom:1px solid #e0d2c0;background:#fff;color:#6a1b32;font-size:1.25rem;font-weight:800;line-height:1;cursor:pointer}
.puebla-osm-controls button:last-child{border-bottom:0}
.puebla-osm-controls button:hover{background:#f8f3ec}
.puebla-osm-attrib{position:absolute!important;right:8px!important;bottom:6px!important;z-index:500;background:rgba(255,255,255,.86);padding:2px 6px;border-radius:8px;color:#5f575a!important}

/* Corrección final de mapas: apariencia tipo visor online real */
.leaflet-container,
.puebla-osm-map {
  background: #f3f1eb !important;
}
.leaflet-tile,
.puebla-osm-tiles img {
  image-rendering: auto;
}
.leaflet-tile-container img.leaflet-tile,
.puebla-osm-tiles img {
  background: #f3f1eb;
}
/* Evita que se vea el ícono de imagen rota si un proveedor bloquea un mosaico aislado. */
.puebla-osm-tiles img:not([src]),
.puebla-osm-tiles img[src=""] {
  visibility: hidden;
}
.leaflet-control-zoom a,
.puebla-osm-controls button {
  color: var(--puebla-guinda) !important;
  font-weight: 800;
}
.leaflet-control-attribution,
.puebla-osm-attrib {
  background: rgba(255,255,255,.88) !important;
  border-radius: 999px;
  padding: 2px 9px !important;
}

/* Corrección definitiva: mapas online reales, sin cuadrícula local */
.leaflet-container {
  background: #eef1f2 !important;
  color: #263238;
  isolation: isolate;
}
.leaflet-tile-pane,
.leaflet-tile-container,
.leaflet-layer {
  filter: none !important;
}
.leaflet-tile {
  max-width: none !important;
  max-height: none !important;
  width: 256px !important;
  height: 256px !important;
  image-rendering: auto !important;
  background: #eef1f2 !important;
}
.leaflet-tile[src^="data:image/gif"] {
  visibility: hidden !important;
}
.puebla-map-dot-icon {
  background: transparent !important;
  border: 0 !important;
}
.leaflet-control-zoom {
  border: 0 !important;
  box-shadow: 0 4px 14px rgba(0,0,0,.16) !important;
}
.leaflet-control-zoom a {
  color: var(--puebla-guinda) !important;
  border-color: #e2d2c0 !important;
}
.leaflet-control-attribution {
  background: rgba(255,255,255,.88) !important;
  border-radius: 999px !important;
  padding: 2px 9px !important;
  margin: 0 8px 6px 0 !important;
}


/* Mapas online robustos */
.puebla-map-embed-wrap,
.leaflet-container {
  width: 100%;
  min-height: 240px;
  background: #f7f2e8;
}
.puebla-map-iframe {
  display: block;
  width: 100%;
  height: 100%;
  min-height: inherit;
  border: 0;
  border-radius: inherit;
  background: #f7f2e8;
}
#mapa .puebla-map-iframe,
#mapa-live .puebla-map-iframe { min-height: 520px; }
#mapa-dash .puebla-map-iframe { min-height: 310px; }
#mapa-casa .puebla-map-iframe { min-height: 200px; }
.leaflet-container img { max-width: none !important; }
.leaflet-control-attribution { font-size: 10px !important; }

/* ────────────────────────────────────────────────
   Mapas locales 100% offline
──────────────────────────────────────────────── */
.puebla-local-map {
  position: relative;
  overflow: hidden;
  min-height: 220px;
  background: #f4efe7;
  border: 1px solid #dfd0c1;
  border-radius: 12px;
  isolation: isolate;
}
.puebla-local-map-canvas {
  position: absolute;
  inset: 0;
  cursor: grab;
  user-select: none;
  background:
    radial-gradient(circle at 55% 46%, rgba(188,149,92,.16), transparent 20%),
    radial-gradient(circle at 30% 68%, rgba(35,91,78,.10), transparent 18%),
    linear-gradient(180deg, #fbf8f2 0%, #efe7dc 100%);
}
.puebla-local-map-canvas.is-dragging { cursor: grabbing; }
.puebla-local-map-bg {
  position: absolute;
  inset: 0;
  background-image:
    linear-gradient(rgba(106,27,50,.055) 1px, transparent 1px),
    linear-gradient(90deg, rgba(106,27,50,.055) 1px, transparent 1px);
  background-size: 72px 72px;
  opacity: .9;
}
.puebla-local-map-roads,
.puebla-local-map-svg {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
.puebla-local-map-svg { z-index: 3; }
.puebla-local-map-roads { z-index: 1; }
.puebla-local-map-roads path {
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.puebla-local-map-roads .roads-secondary path,
.puebla-local-map-roads .roads-secondary {
  stroke: rgba(114,108,104,.34);
  stroke-width: 5;
}
.puebla-local-map-roads .road-main {
  stroke: rgba(106,27,50,.22);
  stroke-width: 13;
}
.puebla-local-map-label {
  position: absolute;
  z-index: 2;
  padding: .22rem .55rem;
  border-radius: 999px;
  background: rgba(255,255,255,.76);
  border: 1px solid rgba(188,149,92,.22);
  color: rgba(58,42,47,.72);
  font-size: .78rem;
  font-weight: 700;
  pointer-events: none;
  box-shadow: 0 6px 18px rgba(0,0,0,.06);
}
.puebla-local-map-label.label-main { left: 24px; top: 18px; color: #6a1b32; }
.puebla-local-map-label.label-zone { right: 22px; top: 22px; }
.puebla-local-map-label.label-note { right: 20px; bottom: 16px; font-weight: 600; }
.puebla-local-map-zoom {
  position: absolute;
  z-index: 8;
  left: 18px;
  top: 18px;
  display: flex;
  flex-direction: column;
  overflow: hidden;
  border-radius: 14px;
  box-shadow: 0 12px 24px rgba(58,42,47,.16);
}
.puebla-local-map-label.label-main + .label-zone ~ .puebla-local-map-zoom,
.puebla-local-map .puebla-local-map-zoom { top: 20px; }
.puebla-local-map-zoom button {
  width: 46px;
  height: 46px;
  border: 0;
  background: rgba(255,255,255,.94);
  color: #6a1b32;
  font-size: 1.45rem;
  font-weight: 800;
  line-height: 1;
}
.puebla-local-map-zoom button + button { border-top: 1px solid #eadfd5; }
.puebla-local-map-zoom button:hover { background: #fff7ed; }
.local-route {
  fill: none;
  stroke-linecap: round;
  stroke-linejoin: round;
  filter: drop-shadow(0 3px 4px rgba(0,0,0,.22));
}
.local-marker { cursor: pointer; pointer-events: auto; }
.local-marker .marker-halo {
  fill: rgba(255,255,255,.86);
  filter: drop-shadow(0 4px 6px rgba(0,0,0,.35));
}
.local-marker .marker-dot { stroke: #fff; stroke-width: 3; }
.puebla-local-map-popup {
  position: absolute;
  z-index: 9;
  max-width: 230px;
  padding: .55rem .7rem;
  border-radius: 12px;
  background: rgba(255,255,255,.97);
  border: 1px solid #eadfd5;
  box-shadow: 0 16px 34px rgba(0,0,0,.22);
  color: #3a2a2f;
  font-size: .82rem;
}
.puebla-local-map-popup a { color: #6a1b32; font-weight: 700; }
.puebla-map-iframe, .puebla-map-embed-wrap, .map-online-error { display: none !important; }
.local-polygon {
  stroke-linejoin: round;
  filter: drop-shadow(0 2px 3px rgba(0,0,0,.12));
}

/* ============================================================
   UI Responsive Pro — Sistema Puebla
   Objetivo: hacer todo el sitio adaptable a móvil, tablet y PC
   sin modificar lógica de controladores/modelos.
============================================================ */
:root {
  --sp-focus: 0 0 0 .24rem rgba(188,149,92,.24);
  --sp-glass: rgba(255,255,255,.82);
  --sp-input-h: 44px;
}

html { scroll-behavior: smooth; }
body { overflow-x: hidden; }
img, video, canvas, svg, iframe { max-width: 100%; }

/* Layout fluido para escritorio grande */
.container,
.container-sm,
.container-md,
.container-lg,
.container-xl,
.container-xxl,
main.container-fluid {
  max-width: 1480px;
}

main.container-fluid {
  margin-inline: auto;
  min-height: calc(100vh - 130px);
}

/* Navbar más usable y adaptable */
.navbar .container-fluid {
  gap: .65rem;
}
.navbar-brand {
  min-width: 0;
  white-space: nowrap;
  font-size: clamp(1rem, 2vw, 1.18rem);
}
.navbar-collapse {
  min-width: 0;
}
.navbar-nav {
  gap: .16rem;
}
.navbar-dark.bg-puebla .nav-link {
  min-height: 40px;
  display: inline-flex;
  align-items: center;
  gap: .18rem;
}
.navbar .badge,
.navbar .btn {
  min-height: 34px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

/* Cabeceras de pantalla */
.page-header,
.card-header,
.d-flex.justify-content-between.align-items-center.mb-3,
.d-flex.justify-content-between.align-items-center.mb-4 {
  gap: .8rem;
}
.d-flex.justify-content-between.align-items-center.mb-3,
.d-flex.justify-content-between.align-items-center.mb-4 {
  flex-wrap: wrap;
}

/* Cards más limpias */
.card {
  backdrop-filter: blur(8px);
}
.card-body {
  min-width: 0;
}
.card .card-title,
.card h1,
.card h2,
.card h3,
.card h4,
.card h5,
.card h6 {
  overflow-wrap: anywhere;
}

/* Botones profesionales y táctiles */
.btn {
  --sp-btn-shadow: 0 8px 18px rgba(61,12,27,.10);
  min-height: 42px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .35rem;
  padding: .58rem 1rem;
  border-width: 1px;
  box-shadow: var(--sp-btn-shadow) !important;
  text-decoration: none !important;
  line-height: 1.15;
  white-space: nowrap;
}
.btn:hover {
  filter: saturate(1.04) contrast(1.02);
  box-shadow: 0 10px 24px rgba(61,12,27,.16) !important;
}
.btn:focus-visible,
.form-control:focus,
.form-select:focus,
.form-check-input:focus {
  outline: none;
  box-shadow: var(--sp-focus) !important;
}
.btn-sm {
  min-height: 36px;
  padding: .42rem .78rem;
}
.btn-lg {
  min-height: 50px;
  padding: .75rem 1.25rem;
}
.btn-warning,
.btn-outline-warning:hover {
  color: #3b2810 !important;
}
.btn-success {
  background: linear-gradient(135deg, var(--puebla-verde), var(--puebla-verde-700)) !important;
  border-color: var(--puebla-verde) !important;
}
.btn-outline-light {
  border-color: rgba(255,255,255,.65) !important;
}
.btn-group,
.btn-toolbar,
.action-buttons,
.table-actions {
  flex-wrap: wrap;
  gap: .4rem;
}
.table td .btn,
.table td .btn-sm {
  margin-block: .12rem;
}

/* Formularios y buscadores */
.form-control,
.form-select,
.input-group-text {
  min-height: var(--sp-input-h);
  font-size: .95rem;
}
.form-control-sm,
.form-select-sm,
.input-group-sm > .form-control,
.input-group-sm > .form-select,
.input-group-sm > .input-group-text {
  min-height: 38px;
}
.form-label {
  margin-bottom: .35rem;
  font-weight: 700;
}
.form-text {
  color: var(--puebla-muted);
}
form .row {
  --bs-gutter-x: 1rem;
  --bs-gutter-y: .9rem;
}
.form-control[type="search"],
.sp-search-input {
  padding-left: 2.55rem;
  border-radius: 999px;
  background-color: var(--sp-glass);
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' fill='none' stroke='%236a1b32' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='8' cy='8' r='5'/%3E%3Cpath d='m13 13 3.5 3.5'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-size: 18px 18px;
  background-position: .95rem center;
}
.sp-table-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: .75rem;
  padding: .8rem;
  background: linear-gradient(90deg, rgba(247,240,230,.92), rgba(255,255,255,.82));
  border: 1px solid rgba(188,149,92,.22);
  border-bottom: 0;
  border-radius: var(--radius) var(--radius) 0 0;
}
.sp-table-toolbar .sp-search-wrap {
  position: relative;
  width: min(100%, 430px);
}
.sp-table-toolbar .sp-table-count {
  color: var(--puebla-muted);
  font-size: .84rem;
  font-weight: 700;
  white-space: nowrap;
}
.sp-table-shell {
  border-radius: var(--radius);
  overflow: hidden;
  box-shadow: var(--shadow-sm);
}
.sp-table-shell > .table-responsive,
.sp-table-shell > table {
  border-radius: 0 0 var(--radius) var(--radius);
}

/* Tablas más adaptables */
.table-responsive {
  width: 100%;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  background: rgba(255,255,255,.92);
}
.table {
  min-width: 720px;
}
.table.table-sm {
  min-width: 620px;
}
.table th {
  font-size: .78rem;
  text-transform: uppercase;
  letter-spacing: .035em;
  white-space: nowrap;
}
.table td {
  max-width: 360px;
  overflow-wrap: anywhere;
}
.table td:last-child,
.table th:last-child {
  white-space: nowrap;
}

/* Mapas y gráficos responsive */
#mapa,
#mapa-live,
#mapa-dash,
[id^="mapa"] {
  width: 100% !important;
  min-height: clamp(280px, 56vh, 620px);
  border-radius: var(--radius);
  overflow: hidden;
}
canvas {
  max-width: 100% !important;
}

/* Toast responsivo */
#sp-toast-container {
  max-width: min(92vw, 380px);
}
#sp-toast-container > div {
  border-radius: 14px !important;
}

/* Mejor adaptación en tablets */
@media (max-width: 1199.98px) {
  main.container-fluid {
    padding-inline: 1rem !important;
  }
  .navbar-dark.bg-puebla .nav-link {
    padding-inline: .62rem;
    font-size: .91rem;
  }
}

@media (max-width: 991.98px) {
  .navbar-collapse {
    margin-top: .75rem;
    padding: .75rem;
    border-radius: 18px;
    background: rgba(61,12,27,.28);
    border: 1px solid rgba(255,255,255,.14);
  }
  .navbar-nav.me-auto,
  .navbar-nav.ms-auto {
    width: 100%;
  }
  .navbar-dark.bg-puebla .nav-link {
    width: 100%;
    justify-content: flex-start;
  }
  .navbar .navbar-nav.ms-auto {
    align-items: stretch !important;
  }
  .navbar .navbar-nav.ms-auto .nav-item,
  .navbar .navbar-nav.ms-auto .btn,
  .navbar .navbar-nav.ms-auto .badge {
    width: 100%;
  }
  .row > [class*="col-"] {
    min-width: 0;
  }
}

/* Móvil: controles apilados, tablas tipo tarjeta cuando se pueda */
@media (max-width: 767.98px) {
  :root { --sp-input-h: 46px; }
  body {
    font-size: .93rem;
  }
  main.container-fluid {
    padding: .8rem .7rem 1.15rem !important;
  }
  h1 { font-size: 1.55rem; }
  h2 { font-size: 1.38rem; }
  h3 { font-size: 1.22rem; }
  h4 { font-size: 1.12rem; }
  .card-header,
  .card-body,
  .card-footer {
    padding: .95rem;
  }
  .d-flex.gap-2,
  .d-flex.gap-3,
  form.d-flex,
  .card-header.d-flex,
  .card-footer.d-flex {
    flex-wrap: wrap;
  }
  form.d-flex > *,
  .card-footer.d-flex > *,
  .d-flex.justify-content-between.align-items-center.mb-3 > *,
  .d-flex.justify-content-between.align-items-center.mb-4 > * {
    flex: 1 1 100%;
  }
  .btn,
  .btn-sm,
  .btn-lg {
    width: 100%;
    white-space: normal;
  }
  .input-group {
    flex-wrap: nowrap;
  }
  .sp-table-toolbar {
    flex-direction: column;
    align-items: stretch;
    padding: .7rem;
  }
  .sp-table-toolbar .sp-search-wrap {
    width: 100%;
  }
  .sp-table-toolbar .sp-table-count {
    text-align: center;
  }
  .table {
    min-width: 680px;
  }
  #mapa,
  #mapa-live,
  #mapa-dash,
  [id^="mapa"] {
    min-height: 360px;
  }
  footer {
    padding-inline: .75rem;
  }
}

@media (max-width: 575.98px) {
  .navbar-brand {
    max-width: calc(100vw - 92px);
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .card {
    border-radius: 14px;
  }
  .card:hover {
    transform: none;
  }
  .table th,
  .table td {
    font-size: .8rem;
    padding: .55rem .58rem;
  }
  .badge {
    white-space: normal;
  }
  .modal-dialog {
    margin: .75rem;
  }
  #mapa,
  #mapa-live,
  #mapa-dash,
  [id^="mapa"] {
    min-height: 320px;
  }
}

/* Escritorio: mejor presentación de tablas y acciones */
@media (min-width: 992px) {
  .table-responsive {
    border-radius: var(--radius);
  }
  .card .table-responsive {
    border-radius: 0 0 var(--radius) var(--radius);
  }
  .btn-icon-only {
    width: 42px;
    padding-inline: .6rem;
  }
}

/* Accesibilidad: menos animaciones si el usuario lo prefiere */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
    transition-duration: .001ms !important;
  }
}

/* Ajuste solicitado: login perfectamente centrado */
html:has(body.auth-page) {
  min-height: 100%;
  height: 100%;
}

body.auth-page {
  width: 100%;
  min-height: 100vh;
  min-height: 100dvh;
  margin: 0;
  display: grid !important;
  place-items: center !important;
  padding: clamp(1rem, 3vw, 2rem);
  overflow-x: hidden;
}

body.auth-page .auth-card {
  margin: auto !important;
  justify-self: center;
  align-self: center;
}

@supports not selector(:has(*)) {
  html {
    min-height: 100%;
  }
}

@media (max-height: 640px) {
  body.auth-page {
    align-items: start !important;
    place-items: start center !important;
    padding-top: 1rem;
    padding-bottom: 1rem;
  }
}


/* Registro y recuperación de contraseña */
.auth-links a { color: var(--puebla-guinda); }
.auth-links a:hover { color: var(--puebla-guinda-700); text-decoration: underline; }
.auth-card-wide .form-text { font-size: .78rem; }
body.auth-page .auth-card-wide { width: min(760px, calc(100vw - 2rem)); }
@media (max-width: 576px) {
  .auth-links { flex-direction: column; gap: .55rem; }
  body.auth-page .auth-card-wide { width: min(100%, calc(100vw - 1rem)); }
}

/* =========================================================
   HOTFIX RESPONSIVE MOBILE — Sistema Puebla
   Ajuste para celulares/tablets/escritorio sin desbordes.
   ========================================================= */
html {
  width: 100%;
  min-width: 320px;
  overflow-x: hidden;
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
}
body {
  width: 100%;
  min-width: 320px;
  overflow-x: hidden;
}
img, svg, video, canvas, iframe {
  max-width: 100%;
}
.container,
.container-fluid,
.row,
.card,
.table-responsive,
.navbar,
main {
  max-width: 100%;
}
.row { --bs-gutter-x: clamp(.75rem, 3vw, 1.5rem); }

/* Formularios táctiles: evita zoom y cajas deformadas en móvil */
input,
select,
textarea,
button,
.form-control,
.form-select,
.btn {
  font-size: max(16px, 1rem);
}
.form-control,
.form-select,
.input-group-text,
.input-group .btn {
  min-height: 48px;
  line-height: 1.25;
}
.input-group {
  flex-wrap: nowrap;
  width: 100%;
}
.input-group-text {
  flex: 0 0 48px;
  width: 48px;
  justify-content: center;
  padding-inline: .65rem;
  overflow: hidden;
}
.input-group > .form-control,
.input-group > .form-select {
  min-width: 0;
  flex: 1 1 auto;
}
.input-group > .btn {
  flex: 0 0 auto;
  white-space: nowrap;
}
.form-control::placeholder { opacity: .85; }

/* Login/auth 100% responsivo y centrado real */
body.auth-page {
  min-height: 100vh;
  min-height: 100svh;
  width: 100%;
  padding: max(.75rem, env(safe-area-inset-top)) max(.75rem, env(safe-area-inset-right)) max(.75rem, env(safe-area-inset-bottom)) max(.75rem, env(safe-area-inset-left));
  display: grid !important;
  place-items: center !important;
  overflow-x: hidden;
  overflow-y: auto;
}
body.auth-page::before { opacity: .12; }
body.auth-page .auth-card {
  width: min(440px, calc(100vw - 1.5rem));
  max-width: calc(100vw - 1.5rem);
  margin: auto !important;
  border-radius: clamp(16px, 4vw, 24px);
}
body.auth-page .auth-card-wide {
  width: min(760px, calc(100vw - 1.5rem));
  max-width: calc(100vw - 1.5rem);
}
body.auth-page .card-body {
  padding: clamp(1.15rem, 5vw, 2.5rem) !important;
}
body.auth-page .auth-brand-icon,
body.auth-page .brand-icon {
  width: clamp(58px, 16vw, 72px);
  height: clamp(58px, 16vw, 72px);
  font-size: clamp(1.75rem, 8vw, 2.35rem) !important;
}
body.auth-page h4 {
  font-size: clamp(1.08rem, 5.3vw, 1.45rem);
  line-height: 1.2;
}
body.auth-page .text-muted.small,
body.auth-page .small {
  line-height: 1.35;
}
body.auth-page .alert {
  font-size: .92rem;
  line-height: 1.35;
  padding-right: 2.4rem;
  word-break: normal;
}
body.auth-page .form-label {
  margin-bottom: .45rem;
}
body.auth-page .form-control,
body.auth-page .input-group-text,
body.auth-page .input-group .btn {
  min-height: 52px;
}
body.auth-page .btn[type="submit"] {
  min-height: 54px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: .35rem;
}
.auth-links {
  gap: .75rem;
  flex-wrap: wrap;
}
.auth-links a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 36px;
  text-align: center;
}
body.auth-page .card-footer {
  padding-inline: .75rem;
  line-height: 1.35;
}

/* Navegación adaptable */
.navbar .container-fluid {
  gap: .5rem;
}
.navbar-brand {
  max-width: calc(100vw - 96px);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.navbar-collapse {
  max-width: 100%;
}
.navbar-nav .badge,
.navbar-nav .btn {
  white-space: normal;
  text-align: center;
}

/* Tarjetas, tablas y filtros en pantallas pequeñas */
.card-body,
.card-header,
.card-footer {
  min-width: 0;
}
.table-responsive {
  width: 100%;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.table {
  min-width: 620px;
}
.table.table-sm {
  min-width: 560px;
}
.d-flex {
  min-width: 0;
}
.text-truncate-mobile,
.card-title,
.card-text {
  min-width: 0;
}

/* Mapas/GPS: altura útil en móvil sin romper layout */
#mapa,
#mapa-live,
#mapa-dash,
#mapa-casa,
[id^="mapa"],
.puebla-local-map,
.leaflet-container,
.puebla-map-embed-wrap {
  max-width: 100%;
  min-height: clamp(260px, 58vh, 560px);
  border-radius: clamp(12px, 3vw, 18px);
}
#mapa-casa { min-height: clamp(220px, 45vh, 420px); }
#mapa-dash { min-height: clamp(260px, 45vh, 420px); }

@media (max-width: 991.98px) {
  main.container-fluid {
    width: 100%;
    padding: 1rem .85rem !important;
  }
  .navbar-dark.bg-puebla .nav-link {
    width: 100%;
    display: flex;
    align-items: center;
    gap: .45rem;
  }
  .navbar-nav.ms-auto {
    align-items: stretch !important;
  }
  .navbar-nav.ms-auto .nav-item,
  .navbar-nav.ms-auto .btn,
  .navbar-nav.ms-auto .badge {
    width: 100%;
    display: inline-flex;
    justify-content: center;
    align-items: center;
  }
  .btn:not(.btn-sm) {
    min-height: 46px;
  }
}

@media (max-width: 576px) {
  body { font-size: .94rem; }
  main.container-fluid { padding: .75rem .55rem !important; }
  .card {
    border-radius: 14px;
  }
  .card-body { padding: .9rem !important; }
  .card-header,
  .card-footer { padding-inline: .9rem; }
  .btn,
  .btn-sm {
    width: 100%;
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
  }
  .btn-group,
  .btn-toolbar {
    width: 100%;
    flex-wrap: wrap;
    gap: .45rem;
  }
  .btn-group > .btn {
    border-radius: 999px !important;
    flex: 1 1 100%;
  }
  .d-flex.justify-content-between,
  .d-flex.align-items-center {
    gap: .65rem;
  }
  h1 { font-size: 1.45rem; }
  h2 { font-size: 1.32rem; }
  h3 { font-size: 1.22rem; }
  h4 { font-size: 1.12rem; }
  .display-5 { font-size: 2rem; }
  .display-6 { font-size: 1.65rem; }
  footer {
    padding-inline: .75rem;
    line-height: 1.4;
  }
  body.auth-page {
    padding: max(.55rem, env(safe-area-inset-top)) max(.55rem, env(safe-area-inset-right)) max(.55rem, env(safe-area-inset-bottom)) max(.55rem, env(safe-area-inset-left));
  }
  body.auth-page .auth-card {
    width: min(100%, calc(100vw - 1.1rem));
    max-width: calc(100vw - 1.1rem);
  }
  body.auth-page .card-body {
    padding: 1rem !important;
  }
  body.auth-page .mb-4 { margin-bottom: 1rem !important; }
  .auth-links {
    flex-direction: column;
    align-items: stretch !important;
    gap: .35rem;
  }
  .auth-links a {
    width: 100%;
  }
  .table { min-width: 700px; }
}

@media (max-width: 380px) {
  body.auth-page .auth-card {
    width: calc(100vw - .75rem);
    max-width: calc(100vw - .75rem);
  }
  body.auth-page .card-body { padding: .85rem !important; }
  body.auth-page .auth-brand-icon,
  body.auth-page .brand-icon {
    width: 54px;
    height: 54px;
    font-size: 1.65rem !important;
  }
  body.auth-page .form-control,
  body.auth-page .input-group-text,
  body.auth-page .input-group .btn {
    min-height: 48px;
  }
}

@media (max-height: 700px) and (orientation: portrait) {
  body.auth-page {
    place-items: start center !important;
    padding-top: .75rem;
    padding-bottom: .75rem;
  }
  body.auth-page .text-center.mb-4 { margin-bottom: .9rem !important; }
  body.auth-page .auth-brand-icon,
  body.auth-page .brand-icon {
    width: 54px;
    height: 54px;
    font-size: 1.6rem !important;
  }
}

/* =========================================================
   FIX MOBILE INPUT GROUP + GPS PERMISSION UI — v1.0.27
   Evita que botones dentro de input-group ocupen 100% en celular
   y que el campo de contraseña quede demasiado pequeño.
   ========================================================= */
.input-group > .btn,
.input-group .btn,
body.auth-page .input-group > .btn,
body.auth-page .input-group .btn {
  width: auto !important;
  min-width: 52px !important;
  flex: 0 0 auto !important;
  padding-left: .85rem !important;
  padding-right: .85rem !important;
  white-space: nowrap !important;
}
.input-group > .form-control,
.input-group > input.form-control,
body.auth-page .input-group > .form-control,
body.auth-page .input-group > input.form-control {
  width: 1% !important;
  min-width: 0 !important;
  flex: 1 1 auto !important;
}
body.auth-page input[type="email"],
body.auth-page input[type="password"],
body.auth-page input[type="text"],
body.auth-page .form-control {
  font-size: 16px !important;
  min-height: 56px !important;
  padding-top: .8rem !important;
  padding-bottom: .8rem !important;
}
body.auth-page #toggle-pass {
  min-width: 58px !important;
  width: 58px !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
  display: inline-flex !important;
  align-items: center !important;
  justify-content: center !important;
}
.gps-action-wrap {
  display: flex;
  flex-wrap: wrap;
  gap: .5rem;
  align-items: center;
  margin-top: .6rem;
}
.gps-action-wrap .btn {
  width: auto !important;
  min-height: 42px;
}
@media (max-width: 576px) {
  .gps-action-wrap .btn {
    width: 100% !important;
  }
  body.auth-page .input-group-text {
    width: 50px !important;
    flex-basis: 50px !important;
  }
  body.auth-page #toggle-pass {
    width: 56px !important;
    min-width: 56px !important;
  }
  body.auth-page .input-group > .form-control {
    min-width: 0 !important;
  }
}
