:root {
  --bg: #0f172a; --panel: #1e293b; --line: #334155; --text: #e2e8f0;
  --muted: #94a3b8; --accent: #22c55e; --danger: #ef4444; --warn: #f59e0b;
}
* { box-sizing: border-box; }
body {
  margin: 0; font-family: system-ui, -apple-system, "Segoe UI", sans-serif;
  background: var(--bg); color: var(--text);
}
.barra {
  display: flex; align-items: center; justify-content: space-between;
  padding: .75rem 1rem; background: #020617; border-bottom: 1px solid var(--line);
}
.chip {
  font-size: .8rem; padding: .15rem .6rem; border-radius: 999px;
  background: var(--line); color: var(--text);
}
.chip.online { background: rgba(34,197,94,.2); color: var(--accent); }
.chip.offline { background: rgba(245,158,11,.2); color: var(--warn); }
.layout {
  display: grid; grid-template-columns: 1fr 340px; gap: 1rem; padding: 1rem;
  max-width: 1100px; margin: 0 auto;
}
@media (max-width: 720px) { .layout { grid-template-columns: 1fr; } }
h2 { font-size: .95rem; text-transform: uppercase; letter-spacing: .05em; color: var(--muted); }
.grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(120px, 1fr)); gap: .6rem; }
.producto {
  background: var(--panel); border: 1px solid var(--line); border-radius: .6rem;
  padding: .7rem; text-align: left; color: var(--text); cursor: pointer; font: inherit;
}
.producto:hover { border-color: var(--accent); }
.producto .nombre { display: block; font-weight: 600; }
.producto .precio { display: block; color: var(--muted); font-size: .85rem; margin-top: .3rem; }
.producto .stock { display: block; font-size: .72rem; margin-top: .25rem; color: var(--muted); }
.producto .stock.bajo { color: var(--warn); }
.producto .stock.agotado { color: var(--danger); }
.np-check { display: flex; align-items: center; gap: .35rem; font-size: .82rem; color: var(--muted); flex: 1 1 8rem; }
.np-check input { flex: 0 0 auto; }
.admin-fila small.stock-bajo { color: var(--warn); }
.ticket { background: var(--panel); border: 1px solid var(--line); border-radius: .6rem; padding: 1rem; }
.lineas { list-style: none; margin: 0; padding: 0; min-height: 80px; }
.lineas li { display: flex; justify-content: space-between; padding: .35rem 0; border-bottom: 1px solid var(--line); font-size: .9rem; }
.totales { margin: 1rem 0; }
.totales > div { display: flex; justify-content: space-between; padding: .2rem 0; }
.totales .total { font-size: 1.2rem; font-weight: 700; border-top: 1px solid var(--line); padding-top: .5rem; margin-top: .3rem; }
.totales dt, .totales dd { margin: 0; }
.cobrar {
  width: 100%; padding: .9rem; border: 0; border-radius: .6rem; font: inherit; font-weight: 700;
  background: var(--accent); color: #04210f; cursor: pointer;
}
.cobrar:disabled { background: var(--line); color: var(--muted); cursor: not-allowed; }
.mensaje { min-height: 1.2rem; font-size: .85rem; margin: .6rem 0 0; }
.mensaje.ok { color: var(--accent); }
.mensaje.err { color: var(--danger); }
.pendientes-info { color: var(--muted); font-size: .8rem; margin-top: .8rem; }
.vacio { color: var(--muted); font-size: .85rem; }

/* --- Login de cajero --- */
.barra-der { display: flex; align-items: center; gap: .6rem; }
.cajero { color: var(--muted); font-size: .85rem; }
.logout { background: transparent; border: 1px solid var(--line); color: var(--text); border-radius: .4rem; padding: .25rem .6rem; font: inherit; font-size: .8rem; cursor: pointer; }
.logout:hover { border-color: var(--danger); color: var(--danger); }
.overlay { position: fixed; inset: 0; z-index: 50; display: flex; align-items: center; justify-content: center; background: rgba(2,6,23,.92); padding: 1rem; }
.overlay[hidden] { display: none; }
.login-error { color: var(--danger); font-size: .8rem; min-height: 1rem; margin: 0; }
.pw-cancelar { background: transparent !important; color: var(--muted) !important; border: 1px solid var(--line) !important; font-weight: 400 !important; }

/* ==========================================================================
   Login unificado "Premier Nexus" — spec canónico compartido con NexusFact y
   NexusCont. Los tres deben verse IDÉNTICOS. Única diferencia del POS (§7 del
   spec): el título dice "NexusPOS" y bajo él va un subtítulo FIJO
   ("PUNTO DE VENTA") en lugar del slider rotativo de productos — el cajero no
   elige sistema, entra directo a vender. Por eso aquí no hay JS de slider.
   ========================================================================== */

/* Paleta de marca. No se tocan las variables del tema oscuro del POS (--bg,
   --panel, --danger...): estas conviven con ellas y solo se usan en el login. */
:root {
  --navy: #0A1628; --gold: #C9A84C; --gold3: #E6C463; --text3: #6B7280;
  /* auxiliares de la caja blanca (mismos valores que NexusFact) */
  --pn-white: #FFFFFF; --pn-gray2: #E8ECF2; --pn-text: #1A2238; --pn-text2: #4A5568;
  --pn-navy2: #152238; --pn-danger: #C0392B;
}

/* El overlay del login pasa de "caja centrada" a marco de pantalla completa.
   OJO: no se toca `display` con el selector de ID, porque le ganaría por
   especificidad a `.overlay[hidden]` y el login no se podría ocultar. */
#login-overlay { align-items: stretch; padding: 0; background: var(--navy); }

#login-screen {
  flex: 1 1 auto; min-width: 0;
  min-height: 100vh;
  background: radial-gradient(1100px 600px at 22% 28%, #12224e 0%, var(--navy) 58%);
  display: flex; align-items: center; justify-content: center;
  /* Este gap ES el hueco visible entre el logo y la tarjeta, porque la columna del logo ya
     no se estira (ver .login-hero). Igual que en el portal y en NexusFact. */
  gap: clamp(24px, 6vw, 160px); padding: 32px;
  overflow-y: auto;   /* pantallas muy bajas (caja pequeña): que se pueda desplazar */
}

/* --- Columna izquierda: solo el logo, grande --- */
.login-hero {
  /* flex:0 1 auto (antes 1 1 50%): la columna se ciñe al logo. Estirándose, el logo quedaba
     centrado en una columna mucho más ancha que él y ESE vacío —no el gap— era el hueco que
     lo separaba de la tarjeta. Ahora el par se centra junto y el hueco lo fija el gap. */
  flex: 0 1 auto; min-width: 0;
  display: flex; align-items: center; justify-content: center;
  /* SIN overflow:hidden: era la causa del recorte del diamante. */
}
.hero-logo-wrap {
  position: relative;
  /* overflow:hidden aquí es seguro y NO recorta el logo: la img mide width:100% de esta caja,
     así que la caja calca al logo. Solo contiene el barrido de .hero-shine. */
  overflow: hidden;
  /* Sin el término 90%: la columna ahora se ciñe a este ancho, así que un porcentaje del
     padre sería circular. vw/vh no dependen del padre y dan el mismo tamaño. */
  width: min(48vw, 80vh);
  animation: heroFloat 6s ease-in-out infinite;
}
.hero-diamante {
  display: block; width: 100%; height: auto;   /* height:auto preserva el aspecto 1:1 */
  filter: drop-shadow(0 18px 44px rgba(0,0,0,.45));
  animation: heroFadeIn 1.2s ease both;
}
.hero-shine {
  position: absolute; inset: 0; pointer-events: none;
  /* Enmascarado con la silueta del logo: el brillo recorre SOLO la gema, no el cuadro
     transparente que la rodea (si no, se ve un rectángulo tenue sobre el navy).
     La custom property evita repetir el data URI; -webkit- es para Safari viejo. */
  --gem: url("data:image/png;base64,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");
  -webkit-mask-image: var(--gem); mask-image: var(--gem);
  -webkit-mask-size: 100% 100%; mask-size: 100% 100%;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  background: linear-gradient(115deg,transparent 42%,rgba(255,255,255,.32) 50%,transparent 58%);
  background-size: 220% 100%; background-repeat: no-repeat; background-position: 200% 0;
  animation: heroShine 6s ease-in-out 1.2s infinite;
}

/* --- Columna derecha: la caja blanca --- */
.login-box {
  flex: 0 1 400px; max-width: 400px; width: 100%;
  background: var(--pn-white); color: var(--pn-text);
  border-radius: 16px; padding: 40px; text-align: center;
  box-shadow: 0 16px 60px rgba(0,0,0,.3);
}
.login-logo-mini { display: none; }              /* en desktop ya está el hero */
.login-logo-mini img { width: 120px; height: auto; display: block; margin: 0 auto 12px; }

.login-title {
  margin: 0;
  font-weight: 800; font-size: 22px; color: var(--navy);
  letter-spacing: .3px; text-align: center;
}

/* Subtítulo. En NexusFact/NexusCont este mismo elemento rota entre productos;
   en el POS es fijo (§7), así que no lleva la clase .fading ni JS. */
.login-slider-wrap { min-height: 18px; margin: 4px 0 6px; text-align: center; }
.login-slider {
  display: inline-block;
  font-size: 11px; color: var(--text3);
  text-transform: uppercase; letter-spacing: 1.5px;
  transition: opacity .25s ease, transform .25s ease;
}
.login-slider.fading { opacity: 0; transform: translateY(-4px); }
.login-divider { height: 1px; background: var(--pn-gray2); margin: 20px 0; }

/* --- Formulario dentro de la caja (mismos controles que NexusFact) --- */
.login-box form { margin: 0; display: flex; flex-direction: column; gap: 12px; }
.login-box .login-sub { margin: 0 0 4px; color: var(--text3); font-size: 12px; text-align: left; }
.login-box label {
  display: flex; flex-direction: column; gap: 4px;
  text-align: left; font-size: 12px; font-weight: 600; color: var(--pn-text2);
}
.login-box input {
  width: 100%; padding: 8px 10px; font: inherit; font-size: 13px;
  border: 1.5px solid var(--pn-gray2); border-radius: 8px;
  background: var(--pn-white); color: var(--pn-text); transition: border .15s;
}
.login-box input:focus {
  outline: none; border-color: var(--gold); box-shadow: 0 0 0 3px rgba(201,168,76,.12);
}
.login-box button {
  width: 100%; padding: 10px 16px; border: 0; border-radius: 8px;
  background: var(--navy); color: var(--gold);
  font: inherit; font-size: 13px; font-weight: 600; cursor: pointer;
  transition: background .15s;
}
.login-box button:hover { background: var(--pn-navy2); }
.login-box .login-error { color: var(--pn-danger); font-size: 12px; text-align: left; }
.login-box .pw-cancelar {
  background: transparent !important; color: var(--pn-text2) !important;
  border: 1.5px solid var(--pn-gray2) !important;
}

/* El modal de cambio de contraseña reutiliza la MISMA caja (marco, tipografías y
   controles), pero sin la columna del hero: es un modal sobre la app ya abierta.
   Padding algo menor porque lleva tres campos y dos botones. */
#password-overlay .login-box { padding: 28px; }

@keyframes heroFloat { 0%,100% { transform: translateY(0) } 50% { transform: translateY(-14px) } }
@keyframes heroFadeIn { from { opacity: 0; transform: scale(.94) } to { opacity: 1; transform: scale(1) } }
@keyframes heroShine { 0% { background-position: 200% 0 } 55%,100% { background-position: -100% 0 } }

/* --- Responsive: bajo 900px se oculta el hero y aparece el logo mini --- */
@media (max-width: 900px) {
  #login-screen { flex-direction: column; gap: 0; padding: 24px 16px; }
  .login-hero { display: none; }
  .login-logo-mini { display: block; }
  .login-box { width: 100%; max-width: 380px; flex: 0 0 auto; }
}

/* --- Accesibilidad: sin animación si el usuario la desactivó --- */
@media (prefers-reduced-motion: reduce) {
  .hero-logo-wrap, .hero-diamante, .hero-shine { animation: none; }
  .login-slider { transition: none; }
}

/* Aviso "cambia tu contraseña" */
.aviso-password { background: #7c2d12; color: #fed7aa; padding: .5rem 1rem; font-size: .85rem; text-align: center; }
.aviso-password[hidden] { display: none; }
.aviso-link { background: transparent; border: 0; color: #fff; text-decoration: underline; font: inherit; font-weight: 700; cursor: pointer; padding: 0; }

/* --- Panel de administración --- */
.admin-overlay { align-items: flex-start; overflow: auto; }
.admin-panel { background: var(--panel); border: 1px solid var(--line); border-radius: .8rem; padding: 1.2rem; width: 100%; max-width: 640px; display: flex; flex-direction: column; gap: 1.2rem; }
.admin-head { display: flex; align-items: center; justify-content: space-between; }
.admin-head h1 { margin: 0; font-size: 1.3rem; }
.admin-seccion h2 { margin: 0 0 .6rem; font-size: 1.05rem; }
.admin-seccion h3 { margin: 0 0 .4rem; font-size: .9rem; color: var(--muted); }
.admin-lista { display: flex; flex-direction: column; gap: .4rem; margin-bottom: .8rem; max-height: 30vh; overflow: auto; }
.admin-fila { display: flex; align-items: center; justify-content: space-between; gap: .6rem; padding: .5rem .7rem; border: 1px solid var(--line); border-radius: .5rem; background: var(--bg); }
.admin-fila.inactivo { opacity: .55; }
.admin-fila small { color: var(--muted); }
.admin-acciones { display: flex; gap: .4rem; flex-shrink: 0; }
.admin-btn-sec { background: transparent; border: 1px solid var(--line); color: var(--text); border-radius: .4rem; padding: .3rem .6rem; font: inherit; font-size: .78rem; cursor: pointer; }
.admin-btn-sec:hover { border-color: var(--accent); }
.admin-form { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.admin-form h3 { flex-basis: 100%; }
.admin-form input, .admin-form select { padding: .5rem; border-radius: .5rem; border: 1px solid var(--line); background: var(--bg); color: var(--text); font: inherit; flex: 1 1 8rem; min-width: 0; }
.admin-form button { padding: .55rem .9rem; border: 0; border-radius: .5rem; background: var(--accent); color: #04210f; font: inherit; font-weight: 700; cursor: pointer; }
.admin-msg { font-size: .82rem; min-height: 1rem; margin: .2rem 0 0; }
.admin-msg.ok { color: var(--accent); }
.admin-msg.err { color: var(--danger); }

/* --- Recibo fiscal (representación impresa) --- */
.ri-overlay {
  position: fixed; inset: 0; background: rgba(2,6,23,.7); display: flex;
  align-items: flex-start; justify-content: center; padding: 1.5rem; overflow: auto; z-index: 50;
}
.ri-modal { background: #fff; color: #111; border-radius: .5rem; width: 340px; max-width: 100%; }
.ri-print { padding: 1rem 1.1rem; }
.ri-acciones { display: flex; gap: .5rem; padding: .6rem 1.1rem 1rem; }
.ri-btn { flex: 1; padding: .7rem; border: 0; border-radius: .4rem; font: inherit; font-weight: 700; cursor: pointer; }
.ri-imprimir { background: var(--accent); color: #04210f; }
.ri-cerrar { background: #e2e8f0; color: #111; }
/* documento del recibo (ancho tipo ticket térmico ~80mm) */
.ri-doc { font-family: "Courier New", ui-monospace, monospace; font-size: 12px; color: #000; }
.ri-head { text-align: center; margin-bottom: .5rem; }
.ri-head strong { font-size: 14px; }
.ri-tipo { margin-top: .3rem; font-weight: 700; }
.ri-aviso { border: 2px dashed #b45309; color: #b45309; text-align: center; padding: .4rem; margin: .4rem 0; font-weight: 700; }
.ri-items { width: 100%; border-collapse: collapse; margin: .5rem 0; }
.ri-items th, .ri-items td { padding: .12rem .1rem; border-bottom: 1px dotted #999; }
.ri-items th { text-align: left; }
.ri-items .c { text-align: center; } .ri-items .r { text-align: right; }
.ri-tot > div { display: flex; justify-content: space-between; padding: .1rem 0; }
.ri-total { font-weight: 700; font-size: 14px; border-top: 1px solid #000; margin-top: .2rem; padding-top: .2rem; }
.ri-fiscal { margin: .6rem 0; }
.ri-fiscal div { display: flex; justify-content: space-between; gap: .5rem; }
.ri-fiscal span { color: #555; }
.ri-qr { text-align: center; margin: .6rem 0; }
.ri-qr svg { width: 150px; height: 150px; }
.ri-qr-txt { font-size: 10px; margin: .3rem 0 0; }
.ri-qr-pend { font-size: 10px; color: #b45309; text-align: center; }
.ri-pie { text-align: center; font-size: 10px; color: #555; margin-top: .6rem; }

/* --- Modal de cobro (medios de pago + vuelto + pago dividido) --- */
.pg-overlay { position: fixed; inset: 0; z-index: 60; display: flex; align-items: center; justify-content: center; background: rgba(2,6,23,.92); padding: 1rem; }
.pg-modal { background: var(--panel); border: 1px solid var(--line); border-radius: .8rem; padding: 1.2rem; width: 100%; max-width: 400px; }
.pg-modal h2 { margin: 0 0 .6rem; font-size: 1.2rem; color: var(--text); text-transform: none; letter-spacing: 0; }
.pg-total { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: .8rem; color: var(--muted); }
.pg-total strong { color: var(--text); font-size: 1.25rem; }
.pg-lineas { display: flex; flex-direction: column; gap: .5rem; }
.pg-linea { display: flex; gap: .4rem; }
.pg-linea select { flex: 1 1 auto; min-width: 0; }
.pg-linea input { width: 8rem; }
.pg-linea select, .pg-linea input { padding: .55rem; border-radius: .5rem; border: 1px solid var(--line); background: var(--bg); color: var(--text); font: inherit; }
.pg-quitar { flex: 0 0 auto; width: 2.2rem; background: transparent; border: 1px solid var(--line); color: var(--muted); border-radius: .5rem; font-size: 1.1rem; cursor: pointer; }
.pg-quitar:disabled { opacity: .3; cursor: not-allowed; }
.pg-agregar { margin: .6rem 0; background: transparent; border: 1px dashed var(--line); color: var(--muted); border-radius: .5rem; padding: .5rem; width: 100%; font: inherit; cursor: pointer; }
.pg-agregar:hover { border-color: var(--accent); color: var(--text); }
.pg-resumen { border-top: 1px solid var(--line); padding-top: .6rem; }
.pg-resumen > div { display: flex; justify-content: space-between; padding: .2rem 0; color: var(--muted); }
.pg-resumen .pg-recibido { color: var(--text); }
.pg-vuelto-row { font-weight: 700; }
.pg-vuelto-row span:last-child { color: var(--accent); }
.pg-falta-row span:last-child { color: var(--warn); }
.pg-error { color: var(--danger); font-size: .82rem; min-height: 1rem; margin: .3rem 0 0; }
.pg-acciones { display: flex; gap: .5rem; margin-top: .6rem; }
.pg-acciones button { flex: 1; padding: .75rem; border: 0; border-radius: .5rem; font: inherit; font-weight: 700; cursor: pointer; }
.pg-ok { background: var(--accent); color: #04210f; }
.pg-ok:disabled { background: var(--line); color: var(--muted); cursor: not-allowed; }
.pg-sec { background: transparent; border: 1px solid var(--line) !important; color: var(--muted); }

/* --- Modal de devolución (nota de crédito E34) --- */
.dev-modal { max-width: 440px; }
.dev-ref { color: var(--muted); font-size: .85rem; margin-bottom: .6rem; }
.dev-estado { color: var(--text); font-weight: 600; }
.dev-aviso { background: #7c2d12; color: #fed7aa; border-radius: .5rem; padding: .5rem .7rem; font-size: .82rem; margin-bottom: .7rem; }
.dev-aviso[hidden] { display: none; }
.dev-lineas { display: flex; flex-direction: column; gap: .4rem; max-height: 40vh; overflow: auto; }
.dev-linea { display: flex; align-items: center; justify-content: space-between; gap: .6rem; padding: .5rem .6rem; border: 1px solid var(--line); border-radius: .5rem; background: var(--bg); }
.dev-linea small { color: var(--muted); display: block; }
.dev-qty { width: 5rem; flex: 0 0 auto; padding: .5rem; border-radius: .5rem; border: 1px solid var(--line); background: var(--panel); color: var(--text); font: inherit; }
.dev-qty:disabled { opacity: .4; }
.dev-motivo { display: flex; flex-direction: column; gap: .3rem; font-size: .82rem; color: var(--muted); margin: .7rem 0 0; }
.dev-motivo-inp { padding: .55rem; border-radius: .5rem; border: 1px solid var(--line); background: var(--bg); color: var(--text); font: inherit; }
.dev-total { color: var(--accent); font-weight: 700; }
.dev-modal .pg-acciones { flex-wrap: wrap; }
.dev-modal .pg-acciones button { flex: 1 1 30%; }

/* --- Botón "Enviar por WhatsApp" en el recibo --- */
.ri-wa-row { display: flex; gap: .4rem; padding: 0 1.1rem .2rem; }
.ri-wa-tel { flex: 1 1 auto; min-width: 0; padding: .55rem; border: 1px solid #cbd5e1; border-radius: .4rem; font: inherit; }
.ri-wa { flex: 0 0 auto; background: #25d366; color: #05310f; }

/* --- Panel de Caja (turno + arqueo + movimientos) --- */
.caja-cuerpo { display: flex; flex-direction: column; gap: .7rem; }
.caja-apertura { display: flex; flex-direction: column; gap: .6rem; max-width: 320px; }
.caja-apertura h3 { margin: 0; }
.caja-apertura select, .caja-apertura input { padding: .6rem; border-radius: .5rem; border: 1px solid var(--line); background: var(--bg); color: var(--text); font: inherit; }
.caja-hint { color: var(--muted); font-size: .85rem; margin: 0; }
.caja-info { color: var(--muted); font-size: .9rem; padding: .5rem .7rem; border: 1px solid var(--line); border-radius: .5rem; background: var(--bg); }
.caja-info strong { color: var(--text); }
.caja-acciones { display: flex; gap: .5rem; align-items: stretch; margin-top: .3rem; }
.caja-acciones .cobrar { flex: 1; }
.caja-acciones .admin-btn-sec { flex: 1; }

/* --- Arqueo (X/Z): hereda el color del contexto (panel oscuro o recibo blanco) --- */
.arq h4 { margin: .7rem 0 .3rem; font-size: .82rem; text-transform: uppercase; letter-spacing: .04em; opacity: .75; }
.arq-grid { display: flex; flex-direction: column; gap: .12rem; }
.arq-row { display: flex; justify-content: space-between; gap: .6rem; padding: .12rem 0; }
.arq-tot { font-weight: 700; border-top: 1px solid rgba(148,163,184,.4); margin-top: .2rem; padding-top: .25rem; }
.arq-dif { font-weight: 700; }

/* al imprimir, mostrar SOLO el recibo */
@media print {
  body > *:not(.ri-overlay) { display: none !important; }
  .ri-overlay { position: static; padding: 0; background: #fff; display: block; }
  .ri-modal { width: auto; }
  .ri-acciones, .ri-wa-row { display: none !important; }
}
