﻿/* ==========================================================================
   Aguas Las Lajitas — sistema de diseño v2
   Agua, limpieza, frescura, confianza. Mucho aire, pocas líneas, tarjetas.
   La CSP prohíbe estilos embebidos: todo el diseño vive en esta hoja.
   ========================================================================== */

:root {
  /* Marca */
  --azul-900: #062a52;
  --azul-800: #0a3d75;
  --azul-700: #0d55a0;
  --azul-600: #1069c9;
  --azul-500: #2a86e8;
  --azul-100: #dbeafe;
  --azul-50: #f0f7ff;
  --agua-600: #0e9bbd;
  --agua-500: #22b8d9;
  --agua-100: #d6f3fb;

  /* Neutros */
  --tinta: #0d1f33;
  --tinta-2: #3c4f66;
  --gris: #6b7f96;
  --gris-claro: #97a8bb;
  --linea: #e9eff6;
  --superficie: #ffffff;
  --superficie-2: #f7fafd;
  --fondo: #f1f5fa;

  /* Semánticos */
  --ok-bg: #e0f7ee; --ok: #06805a;
  --aviso-bg: #fff2d9; --aviso: #92610a;
  --error-bg: #ffe8ec; --error: #c22945;
  --info-bg: #e5f0ff; --info: #0d55a0;
  --violeta-bg: #eee9ff; --violeta: #5b3fc4;
  --cian-bg: #ddf4fb; --cian: #0a7d99;

  /* Formas */
  --r-sm: 12px;
  --r: 18px;
  --r-lg: 24px;
  --r-full: 999px;

  --sombra-1: 0 1px 2px rgba(13, 31, 51, .05);
  --sombra-2: 0 4px 16px rgba(13, 31, 51, .07);
  --sombra-3: 0 18px 44px rgba(6, 42, 82, .16);
  --sombra-alta: 0 28px 70px rgba(6, 42, 82, .28);

  --tap: 48px;
  --nav-alto: 66px;

  --tipo: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;

  color-scheme: light;
}

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  background: var(--fondo);
  color: var(--tinta);
  font-family: var(--tipo);
  /* 16px evita el zoom automático de iOS al enfocar un campo. */
  font-size: 16px;
  line-height: 1.5;
  overflow-x: hidden;
}

button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; background: none; border: 0; }
h1, h2, h3, h4 { margin: 0; line-height: 1.2; letter-spacing: -.02em; }
p { margin: 0; }
ul { margin: 0; padding: 0; list-style: none; }
a { color: var(--azul-700); }

:focus-visible {
  outline: 3px solid var(--azul-500);
  outline-offset: 2px;
  border-radius: 8px;
}

.skip-link {
  position: absolute; left: -9999px; top: 8px; z-index: 200;
  background: var(--superficie); color: var(--azul-700);
  padding: 12px 18px; border-radius: var(--r-sm); font-weight: 700;
  box-shadow: var(--sombra-3);
}
.skip-link:focus { left: 12px; }

.visually-hidden {
  position: absolute; width: 1px; height: 1px;
  margin: -1px; padding: 0; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

.noscript { padding: 28px; text-align: center; font-weight: 600; }

/* --- Marca ---------------------------------------------------------------- */
.gota {
  width: 38px; height: 38px; flex: none;
  border-radius: 50% 50% 50% 6px;
  transform: rotate(45deg);
  background: linear-gradient(140deg, var(--agua-500), var(--azul-600));
  box-shadow: 0 6px 16px rgba(16, 105, 201, .3);
}
.gota.grande { width: 54px; height: 54px; border-radius: 50% 50% 50% 9px; }

.boot {
  min-height: 100vh; display: grid; place-content: center;
  justify-items: center; gap: 20px; color: var(--gris);
}
.boot .gota { animation: latir 1.5s ease-in-out infinite; }
@keyframes latir { 0%, 100% { opacity: .4; transform: rotate(45deg) scale(.92); } 50% { opacity: 1; transform: rotate(45deg) scale(1); } }

/* --- Ingreso -------------------------------------------------------------- */
.login-wrap {
  min-height: 100vh;
  display: grid; place-items: center;
  padding: 24px 20px calc(28px + env(safe-area-inset-bottom));
  background:
    radial-gradient(1100px 520px at 8% -10%, #cfe9ff 0%, transparent 58%),
    radial-gradient(900px 460px at 110% 110%, #cdf0fa 0%, transparent 60%),
    linear-gradient(165deg, #f7fbff, #e8f1fa);
}
.login-card {
  width: min(420px, 100%);
  background: var(--superficie);
  border-radius: var(--r-lg);
  padding: 36px 28px 30px;
  box-shadow: var(--sombra-alta);
  text-align: left;
}
.login-card h1 { font-size: 27px; margin-top: 20px; }
.login-card .lead { color: var(--gris); margin: 8px 0 26px; font-size: 15px; }
.login-pie { margin-top: 22px; font-size: 13px; color: var(--gris-claro); text-align: center; }

/* --- Estructura ----------------------------------------------------------- */
.shell { min-height: 100vh; display: grid; grid-template-columns: 248px 1fr; }

.sidebar {
  position: sticky; top: 0; height: 100vh;
  background: linear-gradient(178deg, var(--azul-900), #072f5c 60%, #06305f);
  color: #b9cee6;
  padding: 22px 14px 18px;
  display: flex; flex-direction: column; gap: 4px;
  overflow-y: auto;
}
.sidebar-marca {
  display: flex; align-items: center; gap: 12px;
  padding: 2px 8px 22px; color: #fff;
}
.sidebar-marca strong { display: block; font-size: 15.5px; }
.sidebar-marca span { font-size: 12px; color: #8fadd0; }

.nav { display: grid; gap: 3px; }
.nav a, .nav button {
  display: flex; align-items: center; gap: 12px;
  width: 100%; min-height: var(--tap);
  padding: 11px 13px;
  border-radius: var(--r-sm);
  color: #b9cee6; text-align: left; text-decoration: none;
  font-weight: 600; font-size: 15px;
  transition: background .14s ease, color .14s ease;
}
.nav a:hover, .nav button:hover { background: rgba(255, 255, 255, .09); color: #fff; }
.nav a[aria-current="page"] {
  background: linear-gradient(135deg, var(--azul-600), var(--azul-500));
  color: #fff;
  box-shadow: 0 6px 18px rgba(16, 105, 201, .35);
}
.nav-icono { width: 22px; text-align: center; flex: none; font-size: 16px; }

.sidebar-pie {
  margin-top: auto; padding: 16px 12px 0;
  font-size: 11.5px; color: #7196bf;
  border-top: 1px solid rgba(255, 255, 255, .1);
}

.main { min-width: 0; display: flex; flex-direction: column; }

.topbar {
  position: sticky; top: 0; z-index: 30;
  display: flex; align-items: center; gap: 12px;
  min-height: 68px; padding: 12px 26px;
  background: rgba(255, 255, 255, .9);
  backdrop-filter: blur(10px);
  border-bottom: 1px solid var(--linea);
}
.topbar-relleno { flex: 1; }

.chip-usuario {
  display: flex; align-items: center; gap: 10px;
  padding: 5px 14px 5px 5px;
  border-radius: var(--r-full);
  background: var(--superficie-2);
  border: 1px solid var(--linea);
  min-height: 42px;
}
.avatar {
  width: 32px; height: 32px; flex: none;
  border-radius: 50%; display: grid; place-items: center;
  background: linear-gradient(135deg, var(--azul-600), var(--agua-500));
  color: #fff; font-weight: 800; font-size: 12.5px;
}
.chip-usuario .quien b { display: block; font-size: 13.5px; line-height: 1.15; }
.chip-usuario .quien span { font-size: 12px; color: var(--gris); }

.content {
  flex: 1; width: 100%; max-width: 1320px;
  margin: 0 auto;
  padding: 26px 26px calc(48px + env(safe-area-inset-bottom));
}

.page-head {
  display: flex; flex-wrap: wrap; align-items: flex-start;
  justify-content: space-between; gap: 14px; margin-bottom: 22px;
}
.page-head h1 { font-size: 27px; }
.page-head .sub { color: var(--gris); margin-top: 5px; font-size: 15px; }
.page-acciones { display: flex; flex-wrap: wrap; gap: 10px; }

/* Encabezado con botón volver, para pantallas de detalle. */
.volver {
  display: inline-flex; align-items: center; gap: 8px;
  color: var(--gris); font-weight: 650; font-size: 14.5px;
  margin-bottom: 14px; min-height: 40px; text-decoration: none;
}
.volver:hover { color: var(--azul-700); }

/* --- Buscador global ------------------------------------------------------ */
.buscador { position: relative; flex: 1; max-width: 440px; }
.buscador input { padding-left: 42px; background: var(--superficie-2); }
.buscador .lupa {
  position: absolute; left: 14px; top: 50%; transform: translateY(-50%);
  color: var(--gris-claro); pointer-events: none; font-size: 15px;
}
.resultados {
  position: absolute; top: calc(100% + 8px); left: 0; right: 0;
  background: var(--superficie); border: 1px solid var(--linea);
  border-radius: var(--r); box-shadow: var(--sombra-3);
  overflow: hidden auto; max-height: 62vh; z-index: 40;
}
.resultados .grupo {
  padding: 12px 16px 6px; font-size: 11px; font-weight: 800;
  text-transform: uppercase; letter-spacing: .07em; color: var(--gris-claro);
}
.resultados button {
  display: block; width: 100%; text-align: left;
  padding: 12px 16px; border-top: 1px solid var(--linea);
}
.resultados button:hover, .resultados button:focus-visible { background: var(--azul-50); }
.resultados b { display: block; font-size: 15px; }
.resultados small { color: var(--gris); }

/* --- Botones -------------------------------------------------------------- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  min-height: var(--tap); padding: 12px 20px;
  border: 1px solid var(--linea);
  border-radius: var(--r-sm);
  background: var(--superficie); color: var(--tinta-2);
  font-weight: 650; font-size: 15px; text-decoration: none;
  transition: background .14s ease, box-shadow .14s ease, transform .08s ease;
}
.btn:hover { background: var(--superficie-2); }
.btn:active { transform: translateY(1px); }
.btn[disabled], .btn[aria-disabled="true"] { opacity: .5; cursor: not-allowed; }

.btn.principal {
  background: linear-gradient(135deg, var(--azul-600), var(--azul-500));
  border-color: transparent; color: #fff;
  box-shadow: 0 8px 22px rgba(16, 105, 201, .3);
}
.btn.principal:hover { background: linear-gradient(135deg, var(--azul-700), var(--azul-600)); }
.btn.exito { background: linear-gradient(135deg, #0a9068, #12b183); border-color: transparent; color: #fff; box-shadow: 0 8px 22px rgba(10, 144, 104, .28); }
.btn.peligro { background: var(--error-bg); color: var(--error); border-color: #f8ccd5; }
.btn.plano { background: transparent; border-color: transparent; color: var(--azul-700); }
.btn.ancho { width: 100%; }
.btn.grande { min-height: 60px; font-size: 17px; font-weight: 750; border-radius: var(--r); }
.btn.chico { min-height: 38px; padding: 6px 14px; font-size: 14px; }

.btn-icono {
  width: var(--tap); height: var(--tap); flex: none;
  display: grid; place-items: center;
  border: 1px solid var(--linea); border-radius: var(--r-sm);
  background: var(--superficie); font-size: 17px;
}

/* --- Accesos grandes del inicio ------------------------------------------- */
.accesos { display: grid; gap: 14px; margin-bottom: 24px; }
.acceso-principal {
  display: flex; align-items: center; justify-content: center; gap: 12px;
  min-height: 84px;
  border-radius: var(--r-lg);
  background: linear-gradient(135deg, var(--azul-700), var(--azul-500) 55%, var(--agua-500));
  color: #fff; font-size: 21px; font-weight: 800;
  box-shadow: 0 16px 38px rgba(16, 105, 201, .32);
  letter-spacing: -.01em;
}
.acceso-principal:hover { filter: brightness(1.05); }
.acceso-principal .emoji { font-size: 26px; }

.acceso-fila { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.acceso {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 8px; min-height: 104px; padding: 14px 10px;
  background: var(--superficie); border: 1px solid var(--linea);
  border-radius: var(--r); box-shadow: var(--sombra-1);
  font-weight: 700; font-size: 14.5px; color: var(--tinta);
  text-align: center; text-decoration: none;
  transition: box-shadow .16s ease, transform .1s ease;
}
.acceso:hover { box-shadow: var(--sombra-2); transform: translateY(-2px); }
.acceso .emoji { font-size: 26px; }
.acceso .cuenta {
  font-size: 12.5px; color: var(--gris); font-weight: 650;
}

/* --- Resumen simple ------------------------------------------------------- */
.resumen {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: 1px; background: var(--linea);
  border: 1px solid var(--linea); border-radius: var(--r);
  overflow: hidden; margin-bottom: 22px;
}
.resumen-celda { background: var(--superficie); padding: 16px 14px; text-align: center; }
.resumen-celda .valor { font-size: 24px; font-weight: 800; letter-spacing: -.02em; }
.resumen-celda .etiqueta { font-size: 12.5px; color: var(--gris); font-weight: 600; margin-top: 2px; }
.resumen-celda .valor.deuda { color: var(--error); }
.resumen-celda .valor.ok { color: var(--ok); }

/* --- Tarjetas ------------------------------------------------------------- */
.card {
  background: var(--superficie);
  border: 1px solid var(--linea);
  border-radius: var(--r);
  padding: 18px;
  box-shadow: var(--sombra-1);
}
.card.limpia { padding: 0; overflow: hidden; }
.card-head {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 16px 18px; border-bottom: 1px solid var(--linea);
  font-weight: 750; font-size: 15.5px;
}
.card-body { padding: 18px; }

.seccion-titulo {
  font-size: 12px; font-weight: 800; text-transform: uppercase;
  letter-spacing: .07em; color: var(--gris-claro); margin-bottom: 12px;
}

.grid { display: grid; gap: 14px; }
.cols-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.cols-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.partido { grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr); align-items: start; }
.metricas { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }

.metrica .etiqueta { font-size: 11.5px; font-weight: 800; text-transform: uppercase; letter-spacing: .06em; color: var(--gris); }
.metrica .valor { font-size: 27px; font-weight: 800; margin-top: 6px; letter-spacing: -.025em; }
.metrica .valor.chico { font-size: 18px; }
.metrica .pista { font-size: 12.5px; color: var(--gris); margin-top: 3px; }
.metrica.destacada {
  background: linear-gradient(135deg, var(--azul-700), var(--azul-500));
  border-color: transparent; color: #fff;
}
.metrica.destacada .etiqueta, .metrica.destacada .pista { color: rgba(255, 255, 255, .8); }

/* --- Lista de tarjetas (reemplaza tablas en móvil) ------------------------- */
.lista { display: grid; gap: 10px; }
.item {
  display: flex; align-items: center; gap: 14px;
  width: 100%; text-align: left;
  padding: 15px 16px;
  background: var(--superficie);
  border: 1px solid var(--linea);
  border-radius: var(--r);
  box-shadow: var(--sombra-1);
  transition: box-shadow .16s ease, border-color .16s ease;
}
.item:hover { box-shadow: var(--sombra-2); border-color: var(--azul-100); }
.item-cuerpo { flex: 1; min-width: 0; }
.item-titulo { font-weight: 700; font-size: 16px; display: block; }
.item-sub { color: var(--gris); font-size: 13.5px; margin-top: 2px; display: block; }
.item-derecha { text-align: right; flex: none; display: grid; gap: 4px; justify-items: end; }
.item-monto { font-weight: 800; font-size: 16.5px; font-variant-numeric: tabular-nums; }
.item-flecha { color: var(--gris-claro); font-size: 20px; flex: none; }

.dato { display: flex; justify-content: space-between; gap: 14px; padding: 12px 0; border-bottom: 1px solid var(--linea); }
.dato:last-child { border-bottom: 0; }
.dato span { color: var(--gris); font-size: 14px; }
.dato b { font-variant-numeric: tabular-nums; text-align: right; }

/* --- Estados -------------------------------------------------------------- */
.estado {
  display: inline-flex; align-items: center; gap: 7px;
  border-radius: var(--r-full); padding: 6px 13px;
  font-size: 13px; font-weight: 750; white-space: nowrap;
  background: var(--info-bg); color: var(--info);
}
.estado::before { content: ""; width: 8px; height: 8px; border-radius: 50%; background: currentColor; flex: none; }
.estado.grande { font-size: 15px; padding: 9px 18px; }
.estado.RECEIVED { background: var(--info-bg); color: var(--info); }
.estado.PREPARING { background: var(--aviso-bg); color: var(--aviso); }
.estado.READY { background: var(--cian-bg); color: var(--cian); }
.estado.OUT_FOR_DELIVERY { background: var(--violeta-bg); color: var(--violeta); }
.estado.DELIVERED { background: var(--ok-bg); color: var(--ok); }
.estado.CANCELLED { background: var(--error-bg); color: var(--error); }
.estado.VOIDED { background: var(--error-bg); color: var(--error); }

.pastilla {
  display: inline-flex; align-items: center; gap: 6px;
  border-radius: var(--r-full); padding: 4px 11px;
  font-size: 12.5px; font-weight: 700;
  background: var(--superficie-2); color: var(--tinta-2);
  border: 1px solid var(--linea);
}
.pastilla.aviso { background: var(--aviso-bg); color: var(--aviso); border-color: #f3dfb4; }
.pastilla.error { background: var(--error-bg); color: var(--error); border-color: #f8ccd5; }
.pastilla.ok { background: var(--ok-bg); color: var(--ok); border-color: #bde9d8; }

.deuda { color: var(--error); font-weight: 750; }
.saldado { color: var(--ok); font-weight: 750; }
.gris { color: var(--gris); }
.nowrap { white-space: nowrap; }

/* --- Formularios ---------------------------------------------------------- */
.campo { display: grid; gap: 7px; margin-bottom: 16px; }
.campo > label { font-size: 14px; font-weight: 700; color: var(--tinta-2); }
.campo .ayuda { font-size: 13px; color: var(--gris); }
.req { color: var(--error); }

.input, .select, .textarea {
  width: 100%; min-height: var(--tap);
  border: 1px solid #d5e0ec; border-radius: var(--r-sm);
  padding: 12px 14px; background: var(--superficie);
  outline: none; font-size: 16px;
  transition: border-color .14s ease, box-shadow .14s ease;
}
.textarea { min-height: 92px; resize: vertical; }
.input:hover, .select:hover, .textarea:hover { border-color: #b8c9dc; }
.input:focus, .select:focus, .textarea:focus {
  border-color: var(--azul-500);
  box-shadow: 0 0 0 4px rgba(42, 134, 232, .15);
}
.input.grande { min-height: 58px; font-size: 17px; }
.select {
  appearance: none; padding-right: 40px;
  background-image: linear-gradient(45deg, transparent 50%, var(--gris) 50%), linear-gradient(135deg, var(--gris) 50%, transparent 50%);
  background-position: calc(100% - 20px) 52%, calc(100% - 14px) 52%;
  background-size: 6px 6px, 6px 6px; background-repeat: no-repeat;
}

.check {
  display: flex; align-items: center; gap: 12px;
  min-height: var(--tap); font-weight: 600; font-size: 15px; color: var(--tinta-2);
}
.check input { width: 22px; height: 22px; accent-color: var(--azul-600); flex: none; }

.form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 18px; }
.form-grid .full { grid-column: 1 / -1; }
.form-acciones { display: flex; flex-wrap: wrap; gap: 10px; justify-content: flex-end; margin-top: 6px; }

fieldset { border: 0; padding: 0; margin: 0 0 8px; }
legend {
  font-size: 12px; text-transform: uppercase; letter-spacing: .07em;
  color: var(--gris-claro); font-weight: 800; padding: 16px 0 10px;
}

/* Opciones grandes tipo botón (forma de pago, filtros) */
.opciones { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 10px; }
.opcion {
  display: flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 54px; padding: 10px 14px;
  border: 2px solid var(--linea); border-radius: var(--r-sm);
  background: var(--superficie); font-weight: 650; font-size: 15px;
  color: var(--tinta-2); text-align: center;
}
.opcion[aria-pressed="true"] {
  border-color: var(--azul-600); background: var(--azul-50); color: var(--azul-700);
  box-shadow: 0 0 0 3px rgba(42, 134, 232, .12);
}

/* --- Contador con botones grandes ----------------------------------------- */
.contador { display: grid; grid-template-columns: 52px minmax(0, 1fr) 52px; gap: 10px; align-items: center; }
.contador .btn-icono { width: 52px; height: 52px; font-size: 24px; font-weight: 700; border-radius: var(--r-sm); }
.contador input {
  text-align: center; font-size: 22px; font-weight: 800;
  min-height: 52px; font-variant-numeric: tabular-nums;
}

.fila-producto {
  display: grid; gap: 12px;
  padding: 16px; margin-bottom: 12px;
  border: 1px solid var(--linea); border-radius: var(--r);
  background: var(--superficie);
}
.fila-producto.activa { border-color: var(--azul-500); background: var(--azul-50); box-shadow: 0 0 0 3px rgba(42, 134, 232, .1); }
.fila-producto .cabecera { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.fila-producto .nombre { font-weight: 700; font-size: 16px; }
.fila-producto .precio { color: var(--gris); font-size: 14px; white-space: nowrap; }
.fila-producto .subtotal { text-align: right; font-weight: 750; font-variant-numeric: tabular-nums; }

/* Barra fija con el total y la acción principal */
.barra-total {
  position: sticky; bottom: 0; z-index: 15;
  display: flex; align-items: center; gap: 14px;
  padding: 14px 0 calc(14px + env(safe-area-inset-bottom));
  background: linear-gradient(to top, var(--fondo) 72%, transparent);
}
.barra-total .cifra { flex: 1; }
.barra-total .cifra .etiqueta { font-size: 12.5px; color: var(--gris); font-weight: 650; }
.barra-total .cifra .valor { font-size: 26px; font-weight: 850; letter-spacing: -.03em; }
.barra-total .btn { flex: 1.2; }

/* --- Tablas (sólo reportes y auditoría) ----------------------------------- */
.tabla-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
table { border-collapse: collapse; width: 100%; }
th, td { text-align: left; padding: 13px 16px; border-bottom: 1px solid var(--linea); font-size: 14.5px; }
th {
  font-size: 11px; text-transform: uppercase; letter-spacing: .06em;
  color: var(--gris); background: var(--superficie-2); font-weight: 800; white-space: nowrap;
}
tbody tr:last-child td { border-bottom: 0; }
tbody tr[data-href] { cursor: pointer; }
tbody tr[data-href]:hover { background: var(--azul-50); }
td.num, th.num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
td.fuerte { font-weight: 700; }
.celda-sub { display: block; color: var(--gris); font-size: 12.5px; }

/* --- Filtros -------------------------------------------------------------- */
.barra-filtros { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-bottom: 18px; }
.barra-filtros .input, .barra-filtros .select { max-width: 260px; min-width: 150px; }
.fichas { display: flex; flex-wrap: wrap; gap: 8px; }
.ficha {
  border: 1px solid var(--linea); background: var(--superficie);
  border-radius: var(--r-full); padding: 9px 16px;
  font-size: 14.5px; font-weight: 650; color: var(--tinta-2); min-height: 42px;
}
.ficha[aria-pressed="true"] { background: var(--azul-600); border-color: var(--azul-600); color: #fff; }

/* --- Estados vacíos, carga y avisos --------------------------------------- */
.vacio { padding: 48px 24px; text-align: center; color: var(--gris); }
.vacio .emoji { font-size: 40px; display: block; margin-bottom: 12px; }
.vacio h3 { color: var(--tinta); font-size: 17px; margin-bottom: 6px; }
.vacio .btn { margin-top: 18px; }

.esqueleto {
  background: linear-gradient(90deg, #eef2f7 25%, #f8fafc 37%, #eef2f7 63%);
  background-size: 400% 100%; animation: brillo 1.4s ease infinite;
  border-radius: 10px; height: 16px;
}
.esqueleto + .esqueleto { margin-top: 12px; }
.esqueleto.alto { height: 84px; }
@keyframes brillo { 0% { background-position: 100% 0; } 100% { background-position: 0 0; } }

@media (prefers-reduced-motion: reduce) {
  .esqueleto, .gota { animation: none; }
  * { transition: none !important; }
}

.aviso {
  display: flex; gap: 12px; align-items: flex-start;
  padding: 14px 16px; border-radius: var(--r-sm);
  font-size: 14.5px; margin-bottom: 16px; border: 1px solid transparent;
}
.aviso.error { background: var(--error-bg); color: var(--error); border-color: #f8ccd5; }
.aviso.alerta { background: var(--aviso-bg); color: var(--aviso); border-color: #f3dfb4; }
.aviso.info { background: var(--info-bg); color: var(--info); border-color: #cfe1f9; }
.aviso.ok { background: var(--ok-bg); color: var(--ok); border-color: #bde9d8; }

.alertas { display: grid; gap: 8px; margin-bottom: 22px; }
.alerta-fila {
  display: flex; align-items: center; justify-content: space-between; gap: 14px;
  padding: 14px 16px; border-radius: var(--r-sm);
  background: var(--superficie); border: 1px solid var(--linea);
  font-size: 14.5px; font-weight: 600;
}
.alerta-fila.alerta { background: var(--aviso-bg); border-color: #f3dfb4; color: var(--aviso); }

/* --- Diálogos ------------------------------------------------------------- */
.fondo-modal {
  position: fixed; inset: 0; z-index: 80;
  background: rgba(6, 25, 48, .55);
  display: grid; place-items: center; padding: 18px;
  overscroll-behavior: contain;
}
.modal {
  width: min(640px, 100%); max-height: min(92vh, 900px);
  display: flex; flex-direction: column;
  background: var(--superficie); border-radius: var(--r-lg);
  box-shadow: var(--sombra-alta); overflow: hidden;
}
.modal.angosto { width: min(440px, 100%); }
.modal.ancho { width: min(880px, 100%); }
.modal-head {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 14px;
  padding: 20px 22px 16px;
}
.modal-head h2 { font-size: 20px; }
.modal-head .sub { color: var(--gris); font-size: 14px; margin-top: 4px; }
.modal-body { padding: 0 22px 20px; overflow-y: auto; flex: 1; }
.modal-pie {
  display: flex; flex-wrap: wrap; gap: 10px; justify-content: flex-end;
  padding: 16px 22px calc(16px + env(safe-area-inset-bottom));
  border-top: 1px solid var(--linea); background: var(--superficie-2);
}

/* --- Línea de tiempo (secundaria, dentro de un desplegable) --------------- */
details.plegable { border-top: 1px solid var(--linea); padding-top: 4px; }
details.plegable > summary {
  cursor: pointer; list-style: none; padding: 16px 2px;
  font-weight: 700; color: var(--azul-700); font-size: 15px;
  display: flex; align-items: center; gap: 8px; min-height: var(--tap);
}
details.plegable > summary::-webkit-details-marker { display: none; }
details.plegable > summary::after { content: "▾"; color: var(--gris-claro); }
details.plegable[open] > summary::after { content: "▴"; }

.linea-tiempo {
  position: relative; margin: 6px 0 12px 10px; padding-left: 24px;
  border-left: 2px solid var(--linea); display: grid; gap: 18px;
}
.hito { position: relative; }
.hito::before {
  content: ""; position: absolute; left: -31px; top: 5px;
  width: 12px; height: 12px; border-radius: 50%;
  background: var(--azul-500); box-shadow: 0 0 0 4px var(--superficie);
}
.hito.CORRECTION::before { background: var(--aviso); }
.hito.PAYMENT::before { background: var(--ok); }
.hito.PAYMENT_VOID::before { background: var(--error); }
.hito b { display: block; font-size: 14.5px; }
.hito small { color: var(--gris); font-size: 13px; }
.hito .nota { font-size: 14px; color: var(--tinta-2); margin-top: 3px; }

/* --- Repartidor ----------------------------------------------------------- */
.marcador { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 20px; }
.marcador .card { padding: 14px 10px; text-align: center; }
.marcador .valor { font-size: 27px; font-weight: 800; }
.marcador .etiqueta { font-size: 12px; color: var(--gris); font-weight: 650; }

.entregas { display: grid; gap: 14px; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); }
.entrega-card { display: grid; gap: 14px; padding: 20px; }
.entrega-card .top { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.entrega-card .numero { color: var(--gris); font-size: 13px; font-weight: 750; letter-spacing: .04em; }
.entrega-card h3 { font-size: 19px; }
.entrega-card .donde { color: var(--tinta-2); font-size: 15px; }
/* Lista de productos del pedido: se usa igual en la tarjeta y en el detalle. */
.carga { display: grid; gap: 6px; font-size: 15.5px; font-weight: 650; margin: 4px 0 14px; }
.carga li::before { content: "• "; color: var(--azul-500); }

.contacto { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }

.bloque-entrega {
  border: 1px solid var(--linea); border-radius: var(--r);
  padding: 16px; margin-bottom: 14px; background: var(--superficie);
}
.bloque-entrega .titulo {
  display: flex; justify-content: space-between; gap: 12px; align-items: baseline;
  font-weight: 700; margin-bottom: 12px; font-size: 16px;
}
.bloque-entrega .pedido { color: var(--gris); font-weight: 650; font-size: 14px; }

/* --- Portal del cliente --------------------------------------------------- */
.portal { min-height: 100vh; display: flex; flex-direction: column; }
.portal .content { max-width: 720px; padding-bottom: calc(var(--nav-alto) + 32px + env(safe-area-inset-bottom)); }
.portal-top {
  position: sticky; top: 0; z-index: 30;
  display: flex; align-items: center; gap: 14px;
  padding: 14px 20px;
  background: linear-gradient(135deg, var(--azul-700), var(--azul-500) 60%, var(--agua-500));
  color: #fff;
}
.portal-top .gota { box-shadow: none; background: rgba(255, 255, 255, .22); }
.portal-top .btn { background: rgba(255, 255, 255, .16); border-color: transparent; color: #fff; }
.portal-marca { flex: 1; min-width: 0; }
.portal-marca strong { display: block; font-size: 15px; }
.portal-marca span { font-size: 13.5px; color: rgba(255, 255, 255, .82); }

.saldo-grande { font-size: 34px; font-weight: 850; letter-spacing: -.03em; margin: 2px 0 6px; }

/* Seguimiento del pedido, con el vocabulario del cliente. */
.progreso { display: grid; gap: 14px; }
.progreso li { display: flex; align-items: center; gap: 12px; color: var(--gris); font-size: 15.5px; }
.progreso li.hecho { color: var(--tinta); font-weight: 650; }
.progreso .marca {
  width: 28px; height: 28px; flex: none;
  display: grid; place-items: center; border-radius: 50%;
  background: var(--superficie-2); color: var(--gris-claro);
  border: 1px solid var(--linea); font-size: 14px; font-weight: 800;
}
.progreso li.hecho .marca { background: var(--ok-bg); color: var(--ok); border-color: #bde9d8; }

/* --- Piezas del panel v3 -------------------------------------------------- */
.acceso-fila-2 { grid-template-columns: repeat(2, 1fr); }
.acceso-principal.secundario {
  background: var(--superficie);
  color: var(--azul-700);
  border: 1px solid var(--linea);
  box-shadow: var(--sombra-1);
  font-size: 18px;
}
.acceso-principal.secundario:hover { background: var(--azul-50); filter: none; }

.resumen-3 { grid-template-columns: repeat(3, 1fr); }
/* Cuatro cifras van en dos filas de dos, nunca en una tira de cuatro: así se
   leen igual en el teléfono y en la computadora. */
.resumen-2 { grid-template-columns: repeat(2, 1fr); }

/* Un pedido hecho por el propio cliente se distingue de un vistazo. */
.item.destacado { border-color: var(--agua-500); box-shadow: 0 0 0 3px var(--agua-100); }

.acceso-portal { margin-bottom: 14px; }

.opciones-2 { grid-template-columns: repeat(2, 1fr); margin-bottom: 22px; }
.opciones-2 .opcion {
  flex-direction: column; gap: 6px; min-height: 82px;
  font-size: 14px; line-height: 1.25; padding: 12px 8px;
}
.opciones-2 .opcion .emoji { font-size: 22px; }
/* Separador con texto, para ofrecer el registro sin competir con "Ingresar". */
.separador {
  display: flex; align-items: center; gap: 12px;
  margin: 24px 0 14px; color: var(--gris-claro); font-size: 13.5px;
}
.separador::before, .separador::after {
  content: ""; flex: 1; height: 1px; background: var(--linea);
}

.registro { width: min(460px, 100%); }
.registro h1 { font-size: 25px; }
.bienvenida { text-align: center; }
.bienvenida h1 { margin-top: 18px; }
.bienvenida .lead { margin-bottom: 26px; }

/* Campo con botón pegado a la derecha (ver/ocultar contraseña). */
.con-boton { display: grid; grid-template-columns: minmax(0, 1fr) var(--tap); gap: 8px; }

.ayuda.coincide { color: var(--ok); font-weight: 650; }
.ayuda.no-coincide { color: var(--error); font-weight: 650; }

.login-pregunta {
  font-size: 13px; font-weight: 700; color: var(--gris);
  text-transform: uppercase; letter-spacing: .06em; margin-bottom: 10px;
}

.check-rol { align-items: flex-start; gap: 12px; padding: 10px 0; min-height: auto; }
.check-rol input { margin-top: 3px; }
.check-rol b { display: block; }

/* --- Avisos flotantes ----------------------------------------------------- */
.avisos {
  position: fixed; left: 50%; bottom: calc(22px + env(safe-area-inset-bottom));
  transform: translateX(-50%); z-index: 120;
  display: grid; gap: 10px; width: min(520px, calc(100vw - 28px));
  pointer-events: none;
}
.toast {
  pointer-events: auto;
  display: flex; align-items: center; gap: 12px;
  padding: 15px 18px; border-radius: var(--r-sm);
  background: var(--tinta); color: #fff;
  font-size: 15px; font-weight: 650;
  box-shadow: var(--sombra-3);
  animation: entrar .2s ease;
}
.toast.error { background: #96162f; }
.toast.ok { background: #06724f; }
@keyframes entrar { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }

/* --- Navegación móvil ----------------------------------------------------- */
.solo-movil { display: none; }

.nav-inferior {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 50;
  display: none; grid-auto-flow: column; grid-auto-columns: 1fr;
  background: rgba(255, 255, 255, .97);
  backdrop-filter: blur(10px);
  border-top: 1px solid var(--linea);
  padding-bottom: env(safe-area-inset-bottom);
}
.nav-inferior a {
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 3px; min-height: var(--nav-alto);
  color: var(--gris); font-size: 11.5px; font-weight: 650; text-decoration: none;
}
.nav-inferior a .emoji { font-size: 21px; line-height: 1; }
.nav-inferior a[aria-current="page"] { color: var(--azul-600); }

.fondo-cajon { position: fixed; inset: 0; background: rgba(6, 25, 48, .5); z-index: 90; }
.cajon {
  position: absolute; inset: auto 0 0 0;
  background: var(--superficie);
  border-radius: var(--r-lg) var(--r-lg) 0 0;
  padding: 10px 14px calc(18px + env(safe-area-inset-bottom));
  max-height: 80vh; overflow-y: auto;
  animation: subir .2s ease;
}
.cajon .agarre { width: 42px; height: 5px; border-radius: 3px; background: var(--linea); margin: 8px auto 14px; }
.cajon .nav a { color: var(--tinta-2); }
.cajon .nav a:hover { background: var(--azul-50); color: var(--azul-700); }
.cajon .nav a[aria-current="page"] { background: var(--azul-50); color: var(--azul-700); box-shadow: none; }
@keyframes subir { from { transform: translateY(100%); } to { transform: none; } }

/* --- Adaptación ----------------------------------------------------------- */
@media (max-width: 1100px) {
  .partido { grid-template-columns: 1fr; }
}

@media (max-width: 900px) {
  .shell { grid-template-columns: 1fr; }
  .sidebar { display: none; }
  .solo-movil { display: inline-flex; }
  .nav-inferior { display: grid; }

  .topbar { padding: 10px 14px; min-height: 62px; gap: 10px; }
  .chip-usuario .quien { display: none; }
  .chip-usuario { padding: 5px; }
  .buscador { max-width: none; }

  .content { padding: 18px 14px calc(var(--nav-alto) + 32px + env(safe-area-inset-bottom)); }
  .page-head { margin-bottom: 18px; }
  .page-head h1 { font-size: 23px; }
  .page-acciones { width: 100%; }
  .page-acciones .btn { flex: 1; }

  .cols-2, .cols-3 { grid-template-columns: 1fr; }
  .form-grid { grid-template-columns: 1fr; }
  .entregas { grid-template-columns: 1fr; }

  .fondo-modal { padding: 0; place-items: stretch; }
  .modal, .modal.angosto, .modal.ancho { width: 100%; max-height: 100vh; border-radius: 0; }
  .modal-pie { position: sticky; bottom: 0; }
  .modal-pie .btn { flex: 1; }

  .barra-total { bottom: calc(var(--nav-alto) + env(safe-area-inset-bottom)); }
}

@media (max-width: 430px) {
  .resumen { grid-template-columns: repeat(2, 1fr); }
  .resumen-celda .valor { font-size: 21px; }
  .acceso-principal { min-height: 76px; font-size: 19px; }
  .acceso { min-height: 96px; font-size: 13.5px; }
  .acceso .emoji { font-size: 23px; }
  .item { padding: 14px; gap: 10px; }
  .item-titulo { font-size: 15.5px; }
  .item-monto { font-size: 15.5px; }
  .contacto { grid-template-columns: 1fr; }
  .barra-total .cifra .valor { font-size: 22px; }
}

@media (max-width: 360px) {
  .acceso-fila { grid-template-columns: 1fr; }
  .contador { grid-template-columns: 48px minmax(0, 1fr) 48px; }
}

@media print {
  .sidebar, .topbar, .nav-inferior, .page-acciones, .barra-filtros, .avisos, .volver { display: none !important; }
  .content { padding: 0; max-width: none; }
  .card { box-shadow: none; border-color: #ccc; break-inside: avoid; }
}

/* --- V7: confirmación de pedido y demo comercial --------------------------- */
.pedido-recibido { text-align: center; padding: 28px 20px; display: grid; gap: 12px; }
.pedido-recibido .emoji-grande { font-size: 56px; line-height: 1; margin: 0; }
.pedido-recibido h1 { margin: 0; }

/* ==========================================================================
   V9 — Premium operativo: pagos, cierres, comprobante y agenda
   ========================================================================== */

/* Encabezado de Pagos: el número del día, grande y sin ruido. */
.cobrado-hoy { text-align: center; }
.cobrado-hoy .valor-grande { font-size: 40px; font-weight: 800; letter-spacing: -.02em; margin: 2px 0 14px; }
.cobrado-hoy .resumen { text-align: center; }
.resumen.resumen-4 { grid-template-columns: repeat(2, 1fr); }
@media (min-width: 768px) { .resumen.resumen-4 { grid-template-columns: repeat(4, 1fr); } }

/* Movimiento de pago: importe protagonista, datos de contexto debajo. */
.pago-mov .item-monto.grande { font-size: 22px; font-weight: 800; }
.pago-mov.anulado { opacity: .55; }
.gris-suave { color: var(--gris); }

/* Tarjeta de cobros por repartidor. */
.repartidor-cobros .card-head { margin-bottom: 6px; }

/* Filtros en línea (cobrador + fechas) sin desbordar en el celular. */
.filtros-linea { display: grid; grid-template-columns: 1fr; gap: 8px; margin-top: 8px; }
@media (min-width: 640px) { .filtros-linea { grid-template-columns: 2fr 1fr 1fr; } }

/* Comprobante de entrega: sobrio, presentable, listo para una captura. */
.comprobante { border: 1px solid var(--linea); }
.comprobante-marca { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; color: var(--azul-800); }
.comprobante-titulo { color: var(--gris); text-transform: uppercase; letter-spacing: .08em; font-size: 12px; margin: 0; }
.comprobante-numero { font-size: 26px; font-weight: 800; margin: 2px 0 14px; color: var(--tinta); }

/* Pastilla informativa cian para el tipo de cliente comercio. */
.pastilla.cian { background: var(--cian-bg); color: var(--cian); }

.agenda-tira { margin-bottom: 4px; }
.ficha.error[aria-pressed] { color: var(--error); }

/* Insignia de entorno demo: visible, discreta, imposible de confundir. */
.demo-badge {
  position: fixed; top: 10px; right: 10px; z-index: 300;
  background: var(--aviso-bg); color: var(--aviso);
  font-size: 11px; font-weight: 700; letter-spacing: .06em;
  padding: 4px 10px; border-radius: var(--r-full);
  pointer-events: none; box-shadow: var(--sombra-1);
}

/* V9.3 — cierre del día del repartidor */
.dato.destaque { border-top: 2px solid var(--linea); margin-top: 6px; padding-top: 10px; }
.dato.destaque .grande { font-size: 20px; }


/* --- V10-C: conciliación lado a lado ---------------------------------------- */
.acciones-dobles { display: flex; gap: 10px; flex-wrap: wrap; margin-bottom: 14px; }
.acciones-dobles > * { flex: 1 1 200px; }
.conc-lista { display: flex; flex-direction: column; gap: 10px; }
.conc-match { padding: 12px 14px; }
.conc-fila { display: grid; grid-template-columns: 1fr auto 1fr; gap: 12px; align-items: start; }
.conc-lado { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.conc-lado .etiqueta { font-size: 11px; letter-spacing: .06em; color: #6b7280; margin: 0 0 2px; }
.conc-resultado { display: flex; flex-direction: column; align-items: center; gap: 4px; text-align: center; min-width: 120px; }
.conc-acciones { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 10px; }
.explicacion { list-style: none; padding: 0; margin: 6px 0 0; display: flex; flex-direction: column; gap: 3px; font-size: 14px; }
.explicacion li.ok { color: var(--ok); }
.candidatos { margin-top: 8px; display: flex; flex-direction: column; gap: 6px; }
label.item { cursor: pointer; align-items: flex-start; }
label.item input[type="checkbox"] { margin-top: 6px; margin-right: 8px; }
@media (max-width: 600px) {
  .conc-fila { grid-template-columns: 1fr; }
  .conc-resultado { align-items: flex-start; text-align: left; }
}

/* --- V11: jornada, stock y términos ------------------------------------------ */
.texto-terminos p { margin: 0 0 10px; line-height: 1.5; }
.tabla-scroll { overflow-x: auto; }
.tabla { width: 100%; border-collapse: collapse; font-size: 14px; }
.tabla th, .tabla td { padding: 6px 8px; text-align: right; border-bottom: 1px solid #e5e7eb; white-space: nowrap; }
.tabla th:first-child, .tabla td:first-child { text-align: left; }
#gate-visita .acciones-dobles .btn { min-height: 64px; font-size: 20px; }

/* --- V11.1 hotfix: navegación al domicilio ------------------------------------ */
.navegacion .contacto .btn { min-height: 52px; font-size: 17px; flex: 1 1 45%; }

/* --- V11.2: modo ruta offline -------------------------------------------------- */
.conexion { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: 999px; background: #f3f4f6; font-size: 12px; line-height: 1.1; margin-right: 8px; }
.conexion .conexion-texto { display: flex; flex-direction: column; }
.conexion .conexion-texto span { color: #6b7280; font-size: 11px; }
.conexion[data-estado="OFFLINE"] { background: var(--aviso-bg); }
.conexion[data-estado="ERROR"] { background: var(--error-bg); }
.conexion[data-estado="SYNCING"], .conexion[data-estado="PENDING"] { background: var(--info-bg); }
@media (max-width: 600px) { .conexion .conexion-texto span { display: none; } }

.parada.nueva { border-left: 4px solid var(--aviso); }

/* V11.3 — franja flotante de pedidos nuevos (repartidor) */
.aviso-flotante {
  position: fixed; top: 0; left: 0; right: 0; z-index: 300;
  display: flex; gap: 12px; align-items: center; justify-content: center; flex-wrap: wrap;
  padding: 10px 14px; background: #b45309; color: #fff;
  box-shadow: 0 2px 8px rgba(0, 0, 0, .3); font-size: 15px;
}
.aviso-flotante[hidden] { display: none; }
.aviso-flotante .btn { flex: none; }

/* V11.3 — mesa de reparto y orden manual de paradas */
.parada-orden .item-derecha { display: flex; gap: 6px; }
.mesa-seleccion { position: sticky; bottom: 64px; z-index: 40; display: flex; gap: 10px; align-items: center; padding: 10px 14px; background: var(--panel, #fff); border: 1px solid var(--borde, #d8dee6); border-radius: 12px; box-shadow: 0 4px 14px rgba(0, 0, 0, .18); }
.check-pedido { width: 22px; height: 22px; flex: none; }

/* ===== Rediseño del panel admin (mapa operativo) ===== */
.tablero-cabecera { display: flex; justify-content: flex-end; margin-bottom: 14px; }
.acciones-rapidas { display: flex; gap: 10px; }
.acciones-rapidas .acceso-principal { padding: 10px 18px; font-size: 14.5px; border-radius: var(--r-sm); }

.kpis { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 12px; margin-bottom: 18px; }
.kpi { background: var(--superficie); border-radius: var(--r); box-shadow: var(--sombra-1); border: 1px solid var(--linea); padding: 14px; display: flex; gap: 10px; align-items: flex-start; }
.kpi .valor { font-size: 26px; font-weight: 800; line-height: 1.05; font-variant-numeric: tabular-nums; }
.kpi .etiqueta { font-size: 12.5px; color: var(--tinta-2); font-weight: 650; margin-top: 2px; }
.kpi-detalle { font-size: 11.5px; color: var(--gris); margin-top: 2px; }
.kpi-icono { width: 38px; height: 38px; border-radius: 12px; display: grid; place-items: center; background: var(--azul-50); flex: none; font-size: 18px; }
.kpi.ok .kpi-icono { background: var(--ok-bg); }
.kpi.aviso .kpi-icono { background: var(--aviso-bg); }
.kpi.error .kpi-icono { background: var(--error-bg); }
.kpi.cian .kpi-icono { background: var(--cian-bg); }

.tablero-central { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 14px; align-items: start; margin-bottom: 18px; }
.tablero-lateral { display: grid; gap: 14px; }
.mapa-card { padding: 16px 16px 12px; }
.mapa-head { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 0 0 10px; }
.mapa-filtros { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 10px; }
.mapa-filtros .input.chica { width: auto; min-width: 150px; padding: 8px 10px; font-size: 13.5px; }
.mapa-zona { position: relative; }
#mapa.mapa { position: relative; height: 520px; border-radius: var(--r-sm); overflow: hidden; background: #e8eef4; touch-action: none; }
.mapa-teselas, .mapa-capa { position: absolute; inset: 0; }
.tesela { position: absolute; width: 256px; height: 256px; user-select: none; pointer-events: none; }
.mapa-controles { position: absolute; top: 10px; left: 10px; display: grid; gap: 6px; z-index: 5; }
.btn-mapa { width: 38px; height: 38px; border-radius: 10px; background: #fff; border: 1px solid var(--linea); box-shadow: var(--sombra-1); font-size: 18px; font-weight: 700; cursor: pointer; }
.mapa-atribucion { position: absolute; right: 6px; bottom: 4px; z-index: 5; font-size: 10.5px; color: var(--gris); background: rgba(255, 255, 255, .78); padding: 1px 6px; border-radius: 6px; }
.marcador { position: absolute; z-index: 4; width: 14px; height: 14px; border-radius: 50%; background: #e11d2e; border: 2px solid #fff; box-shadow: 0 1px 4px rgba(0, 0, 0, .35); transform: translate(-50%, -50%); cursor: pointer; padding: 0; }
.marcador.pedido { background: var(--azul-600); }
.marcador.activo { width: 20px; height: 20px; box-shadow: 0 0 0 4px rgba(225, 29, 46, .25); }
.cluster { position: absolute; z-index: 4; transform: translate(-50%, -50%); width: 54px; height: 54px; border-radius: 50%; background: rgba(225, 29, 46, .92); color: #fff; border: 3px solid #fff; box-shadow: 0 2px 8px rgba(0, 0, 0, .3); display: grid; place-items: center; line-height: 1; cursor: pointer; }
.cluster b { font-size: 16px; }
.cluster span { font-size: 9px; }
#mapa-popup { position: absolute; z-index: 8; width: 272px; background: #fff; border-radius: var(--r-sm); box-shadow: var(--sombra-3); padding: 14px; display: grid; gap: 8px; }
#mapa-popup[hidden] { display: none; }
#mapa-popup h3 { font-size: 16px; padding-right: 26px; }
#mapa-popup .btn-icono { position: absolute; top: 8px; right: 8px; }
.popup-linea { font-size: 13px; color: var(--tinta-2); }

.lateral-fila { display: flex; justify-content: space-between; align-items: center; gap: 10px; border-radius: var(--r-sm); padding: 12px; margin-top: 10px; font-size: 13.5px; }
.aviso-bg { background: var(--aviso-bg); }
.error-bg { background: var(--error-bg); }
.info-bg { background: var(--info-bg); }
.valor-mediano { font-size: 22px; font-weight: 800; }
.zonas-lista { display: grid; gap: 8px; padding-left: 18px; }
.zonas-lista li { display: flex; justify-content: space-between; gap: 10px; font-size: 13.5px; }

.indicadores { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)) auto; gap: 12px; align-items: center; margin-bottom: 18px; }
.indicador { background: var(--superficie); border: 1px solid var(--linea); border-radius: var(--r); box-shadow: var(--sombra-1); padding: 12px 14px; display: flex; gap: 10px; align-items: center; }
.indicador .valor { font-size: 21px; font-weight: 800; }
.indicador .etiqueta { font-size: 12px; color: var(--gris); }

.tablero-pie { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 14px; margin-bottom: 18px; align-items: start; }
.feed { display: grid; gap: 10px; }
.feed-fila { display: flex; gap: 10px; align-items: flex-start; text-decoration: none; color: inherit; border-bottom: 1px solid var(--linea); padding-bottom: 8px; }
.feed-hora { flex: none; font-size: 12px; color: var(--gris); font-variant-numeric: tabular-nums; padding-top: 2px; }
.feed-texto { font-size: 13.5px; }
.avatar.chico { width: 30px; height: 30px; font-size: 13px; flex: none; }
.chico { font-size: 12.5px; }

.sidebar-estado { margin-top: auto; margin-bottom: 8px; background: rgba(255, 255, 255, .07); border-radius: var(--r-sm); padding: 10px 12px; font-size: 12px; color: #b9cee6; display: grid; gap: 2px; }
.sidebar-estado b { color: #fff; display: flex; align-items: center; gap: 6px; }
.sidebar-estado + .sidebar-pie { margin-top: 0; }

@media (max-width: 1100px) {
  .kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .tablero-central { grid-template-columns: 1fr; }
  .indicadores { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .tablero-pie { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  #mapa.mapa { height: 380px; }
}

/* ===== Corrección de fidelidad visual (maqueta del propietario) =====
   DEC-053: estas reglas son SÓLO de escritorio. Sueltas, pisaban el layout
   móvil (causa raíz del ancho muerto medido en el iPhone). */
@media (min-width: 901px) {
  .content { max-width: 1760px; }
  .shell { grid-template-columns: 256px 1fr; }
}
.icono { flex: none; display: inline-block; vertical-align: -4px; }
.nav-icono { display: inline-flex; width: 24px; justify-content: center; }
.nav a { font-size: 14.5px; padding: 11px 14px; }
.sidebar { padding: 22px 16px 18px; }
.sidebar-ayuda {
  display: flex; gap: 10px; align-items: center;
  margin: 8px 2px 0; padding: 10px 12px; border-radius: var(--r-sm);
  color: #b9cee6; font-size: 13.5px; font-weight: 600; text-decoration: none;
}
.sidebar-ayuda:hover { background: rgba(255, 255, 255, .09); color: #fff; }
.sidebar-ayuda .icono { width: 18px; height: 18px; }

@media (min-width: 901px) {
  .topbar { gap: 14px; padding: 12px 24px; }
  .buscador { max-width: 560px; }
}
.buscador .lupa { display: inline-flex; color: var(--gris-claro); }
.buscador .lupa .icono { width: 17px; height: 17px; }
.campana {
  position: relative; display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border-radius: 50%;
  border: 1px solid var(--linea); background: var(--superficie-2); color: var(--tinta-2);
}
.campana:hover { background: var(--azul-50); color: var(--azul-700); }
.campana-badge {
  position: absolute; top: -4px; right: -4px;
  background: var(--error); color: #fff; font-size: 10.5px; font-weight: 800;
  min-width: 17px; height: 17px; border-radius: 999px;
  display: grid; place-items: center; padding: 0 4px;
}
.campana-badge[hidden] { display: none; }
.chip-flecha { display: inline-flex; color: var(--gris-claro); }
.chip-flecha .icono { width: 15px; height: 15px; }
.btn-icono.solo-movil { width: 40px; height: 40px; align-items: center; justify-content: center; }

/* KPIs: etiqueta arriba, número protagonista, detalle en el color del estado */
.kpi { padding: 16px; gap: 12px; }
.kpi .etiqueta { margin: 0 0 2px; color: var(--gris); font-weight: 600; font-size: 12.5px; }
.kpi .valor { font-size: 30px; }
.kpi-detalle { font-weight: 600; color: var(--azul-600); font-size: 12px; }
.kpi.ok .kpi-detalle { color: var(--ok); }
.kpi.aviso .kpi-detalle { color: var(--aviso); }
.kpi.error .kpi-detalle { color: var(--error); }
.kpi.cian .kpi-detalle { color: var(--cian); }
.kpi-icono { width: 42px; height: 42px; color: var(--azul-700); }
.kpi.ok .kpi-icono { color: var(--ok); }
.kpi.aviso .kpi-icono { color: var(--aviso); }
.kpi.error .kpi-icono { color: var(--error); }
.kpi.cian .kpi-icono { color: var(--cian); }
.kpi-icono .icono, .indicador .kpi-icono .icono { width: 22px; height: 22px; }

/* Filtros del mapa compactos, con la vista al final de la fila */
.mapa-filtros .ficha { padding: 8px 14px; font-size: 13px; }
#mapa-vista { margin-left: auto; }
.mapa-head .seccion-titulo { display: flex; align-items: center; gap: 8px; text-transform: uppercase; letter-spacing: .03em; font-size: 14px; }
.mapa-head .seccion-titulo .icono { color: var(--azul-600); }
#mapa-sync { display: inline-flex; align-items: center; gap: 6px; color: var(--ok); font-weight: 650; }
#mapa-sync .icono { width: 16px; height: 16px; }
#mapa, #mapa.mapa { width: 100%; min-height: 520px; }
#mapa-popup .btn { text-transform: uppercase; font-size: 12.5px; letter-spacing: .02em; padding: 10px 12px; }
#mapa-popup h3 { text-transform: uppercase; letter-spacing: .02em; }

.lateral-texto { display: flex; gap: 10px; align-items: flex-start; }
.lateral-texto .icono { margin-top: 2px; }
.tono-aviso { color: var(--aviso); }
.tono-error { color: var(--error); }
.tono-info { color: var(--info); }
#zonas .seccion-titulo, .tablero-pie .seccion-titulo { text-transform: uppercase; letter-spacing: .03em; font-size: 13.5px; color: var(--tinta-2); }

@media (max-width: 900px) {
  .shell.menu-abierto .sidebar {
    display: flex; position: fixed; inset: 0 auto 0 0;
    width: min(300px, 84vw); z-index: 120;
    box-shadow: var(--sombra-alta);
  }
}

/* ===== Búsqueda de direcciones con selección (DEC-048) ===== */
.dir-acciones { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin: 4px 0 8px; }
.sugerencia-dir { width: 100%; text-align: left; }
.dir-confirmada { display: flex; justify-content: space-between; align-items: center; gap: 10px; color: var(--ok); font-weight: 750; margin-top: 6px; }
.mapa-preview { position: relative; height: 220px; border-radius: var(--r-sm); overflow: hidden; background: #e8eef4; margin: 8px 0; }
.mapa-preview.mapa { min-height: 220px; }
.dir-ajuste { display: flex; gap: 12px; flex-wrap: wrap; align-items: end; margin-top: 6px; }
.dir-ajuste .input.chica { width: 150px; }

/* ===== Cartografía vectorial (DEC-049) ===== */
.mapa-vector .mapa-controles, .mapa-vector .mapa-atribucion { display: none; }
.mapa-vector canvas { outline: none; }
.maplibregl-ctrl-top-left { top: 10px; left: 10px; }
.maplibregl-popup { display: none; } /* el popup es el nuestro (#mapa-popup) */
.mapa-preview.mapa-vector { min-height: 220px; }

/* ===== Inicio del cliente, extremadamente simple (DEC-051) ===== */
.portal-actual { display: block; padding: 18px; text-decoration: none; color: inherit; margin-bottom: 16px; }
.portal-actual-titulo { color: var(--gris); font-size: 13px; font-weight: 650; }
.portal-actual-estado { font-size: 24px; font-weight: 800; margin: 6px 0 4px; line-height: 1.2; }
.portal-actual-items { color: var(--tinta-2); font-size: 14.5px; }
.portal-actual-pie { display: flex; justify-content: space-between; align-items: center; margin-top: 12px; font-size: 18px; font-weight: 800; }
.portal-actual.vacio { text-align: center; padding: 26px 18px; }

/* ===== Responsive final del dashboard ADMIN (DEC-051) ===== */
@media (max-width: 1100px) {
  .indicadores { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  #ver-jornada { grid-column: 1 / -1; }
}
@media (max-width: 900px) {
  .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  /* Orden pedido para el celular: KPIs → Mapa → Mesa → Alertas → Actividad. */
  .tablero-pie { display: flex; flex-direction: column; }
  .tablero-pie > .card:nth-child(3) { order: -1; }
  .mapa-filtros .input.chica { flex: 1 1 140px; min-width: 0; }
  #mapa-vista { margin-left: 0; width: 100%; }
  #mapa-popup { width: min(272px, calc(100vw - 32px)); }
  .acciones-rapidas { width: 100%; }
  .acciones-rapidas .acceso-principal { flex: 1; justify-content: center; }
}
@media (max-width: 640px) {
  #mapa.mapa, #mapa { min-height: 400px; height: 400px; }
  .kpi .valor { font-size: 24px; }
  .kpi-icono { width: 36px; height: 36px; }
  .indicadores { grid-template-columns: 1fr; }
}

/* ===== Pase móvil premium (DEC-052): misma identidad, densidad de celular == */
:focus-visible { outline: 3px solid var(--agua-500, #1c9fe0); outline-offset: 2px; }
.btn:active, .acceso:active, .acceso-principal:active, .ficha:active { transform: scale(.98); }

/* Repartidor — hero de jornada y siguiente entrega (Mi día). */
.hero-dia {
  border-radius: var(--r-lg); padding: 18px;
  background: linear-gradient(135deg, var(--azul-700), var(--azul-500) 60%, var(--agua-500));
  color: #fff; box-shadow: 0 16px 38px rgba(16, 105, 201, .30);
  margin-bottom: 16px;
}
.hero-dia .hero-estado { font-size: 19px; font-weight: 800; margin-bottom: 12px; letter-spacing: -.01em; }
.hero-dia .hero-btn {
  background: rgba(255, 255, 255, .18); color: #fff;
  border: 1px solid rgba(255, 255, 255, .45); font-weight: 800;
}
.hero-dia .hero-btn:hover { background: rgba(255, 255, 255, .3); }

.siguiente-entrega .se-cliente { font-size: 20px; font-weight: 800; margin-top: 2px; }
.siguiente-entrega .se-direccion { color: var(--tinta-2); margin: 2px 0 4px; }
.siguiente-entrega .se-items { color: var(--gris); font-size: 14px; margin-bottom: 10px; }
.siguiente-entrega .acciones-dobles { margin-top: 10px; }
.siguiente-entrega .acciones-dobles .btn { flex: 1; }

/* ADMIN móvil — resumen de alertas arriba de todo, con números reales. */
.banda-alertas {
  display: none; width: 100%; text-align: left; cursor: pointer;
  border: 1px solid #f0c987; background: #fff7e8; color: #7a5200;
  border-radius: var(--r); padding: 12px 14px; font-weight: 700;
  min-height: var(--tap); margin-bottom: 14px; font-size: 14.5px;
}
@media (max-width: 900px) {
  .banda-alertas { display: block; }
  /* iOS no fuerza zoom si los campos tienen al menos 16px. */
  .input, .textarea, select.input { font-size: 16px; }
  .parada .btn, .entrega-card .btn, .conc-acciones .btn { min-height: var(--tap); }
  .siguiente-entrega .acciones-dobles { flex-direction: column; }
}

/* ===== DEC-053: home del repartidor como app móvil + header simple ======== */
.topbar-marca { align-items: center; gap: 9px; font-weight: 800; font-size: 15.5px; color: var(--azul-900); letter-spacing: -.01em; }
.hero-dia .hero-numeros { font-size: 14.5px; opacity: .95; margin: -8px 0 12px; }
.hero-dia .hero-numeros b { font-size: 17px; }

/* Resumen tipográfico: números con jerarquía, sin cards. */
.resumen-compacto { background: none; border: none; box-shadow: none; padding: 2px 0 6px; gap: 4px; grid-template-columns: repeat(4, minmax(0, 1fr)); }
.resumen-compacto .resumen-celda { background: none; border: none; box-shadow: none; padding: 4px 2px; text-align: center; }
.resumen-compacto .valor { font-size: 22px; }
.resumen-compacto .etiqueta { font-size: 11.5px; line-height: 1.25; }

/* Acciones rápidas: chips de acción, no tarjetas gigantes. */
.acceso-fila.campo { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-bottom: 16px; }
.acceso.compacto { flex-direction: row; justify-content: center; min-height: var(--tap); padding: 12px; font-size: 14.5px; gap: 8px; }

.card-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; flex-wrap: wrap; }

@media (max-width: 900px) {
  .shell.sin-hamburguesa #menu-movil { display: none; }
  .resumen.resumen-2.resumen-compacto { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}
@media (max-width: 430px) {
  .acceso-fila.campo { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .acceso.compacto { min-height: var(--tap); font-size: 13.5px; }
}
@media (max-width: 360px) {
  .acceso-fila.campo { grid-template-columns: 1fr; }
}

/* DEC-053 · hallazgos de la medición real (admin en 375-393px):
   el topbar y la nav inferior tenían un ancho MÍNIMO intrínseco de 417px
   (marca + buscador + acciones, y columnas 1fr con piso en min-content),
   lo que expandía el layout viewport = banda muerta a la derecha. */
@media (max-width: 900px) {
  /* La marca en el topbar es para quien no tiene hamburguesa (repartidor);
     el admin conserva hamburguesa + buscador y no necesita duplicarla. */
  .shell:not(.sin-hamburguesa) .topbar-marca { display: none; }
  .topbar > * { min-width: 0; }
  .buscador, .buscador input { min-width: 0; }
  .topbar .btn.chico { flex: none; }
  .nav-inferior { grid-auto-columns: minmax(0, 1fr); }
  .nav-inferior a { min-width: 0; padding: 0 2px; }
}

/* ===== DEC-057: semáforo de visitas en los marcadores del mapa ===== */
.marcador.visita-green { background: #16a34a; }
.marcador.visita-orange { background: #f59e0b; }
.marcador.visita-red { background: #e11d2e; }
#visita-metricas { white-space: nowrap; align-self: center; }

/* ===== DEC-064: estado de la ubicación en el marcador =====
   Sólido = confirmada por una persona; HUECO = pendiente de confirmar
   (geocodificación o importación que nadie validó en la puerta). El color
   sigue siendo el del semáforo de visitas: son dos dimensiones distintas. */
.marcador.ubicacion-pending { background: #fff; border-width: 3px; border-color: #e11d2e; }
.marcador.ubicacion-pending.visita-red { border-color: #e11d2e; }
.marcador.ubicacion-pending.visita-orange { border-color: #f59e0b; }
.marcador.ubicacion-pending.visita-green { border-color: #16a34a; }
.leyenda-ubicacion { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; align-self: center; }
.leyenda-ubicacion .punto { display: inline-block; width: 11px; height: 11px; border-radius: 50%; background: #e11d2e; border: 2px solid #fff; box-shadow: 0 0 0 1px rgba(0, 0, 0, .25); }
.leyenda-ubicacion .punto.hueco { background: #fff; border: 3px solid #e11d2e; width: 11px; height: 11px; }
