/* Small runtime overrides for shared UI polish. Keep this file unminified on purpose. */

/* El viewport ya bloquea el zoom (ver App.razor), pero esto es lo que de verdad
   mata el doble-tap-para-ampliar en iOS Safari: sin el, el gesto se detecta y se
   descarta DESPUES de haber animado el zoom, asi que la pantalla igual "salta" un
   instante. touch-action:manipulation le dice al navegador desde el principio que
   ni pellizcar ni doble-tocar van a hacer nada aqui, y de paso quita el retraso de
   300ms que todo navegador movil mete antes de disparar un click, esperando a ver
   si viene un segundo toque. */
html, body {
  touch-action: manipulation;
}

/* El rail del POS en movil SE MUDO a input.css, bajo `[data-nv-host="web"]`. Estaba aqui, y aqui
   fallaba en silencio: este archivo se enlazaba sin huella, o sea que el navegador de quien ya
   habia entrado antes se quedaba con la copia vieja y la hamburguesa seguia saliendo por mucho que
   la regla estuviera escrita. Ver el comentario del <body> en App.razor. */

.nv-draft-card {
  border-color: color-mix(in srgb, var(--nv-border) 88%, var(--nv-primary) 12%);
  box-shadow: 0 12px 26px rgba(10, 10, 10, 0.06);
}

.nv-draft-grid {
  align-items: end;
}

.nv-draft-span-2 {
  grid-column: span 2 / span 2;
}

/* 36px, LA MISMA ALTURA QUE CUALQUIER OTRO CAMPO. Aqui median 42, y no por una
   razon de los editores de documento: simplemente nacio con ese numero cuando la
   base media 44. Al bajar la base a 36 se quedaron 6px por encima, o sea la
   misma clase de descuadre que se vino corrigiendo — solo que repartido entre
   pantallas en vez de dentro de una.

   La cuenta sale exacta y por eso el relleno es 7 y no 9: 7 + 20 de linea + 7 +
   2 de borde = 36. Con `padding: 0` como en la base, el <textarea> pegaria el
   texto al borde de arriba.

   El tamaño de letra tambien va fijo. Sin el lo decide el padre, que es como en
   `.nv-input` acabaron conviviendo campos de 14px con otros de 16 sin que nadie
   escribiera nada distinto.

   Lo que NO cambia es el aspecto propio de hoja de documento: el borde mas
   marcado, el radio de 6 y el brillo interior. Eso si distingue al editor. */
.nv-draft-control,
.nv-input.nv-draft-control,
.nv-textarea.nv-draft-control {
  box-sizing: border-box !important;
  display: block !important;
  width: 100% !important;
  min-height: 36px !important;
  border: 1px solid var(--nv-border-strong) !important;
  border-radius: 6px !important;
  background-color: var(--nv-surface) !important;
  color: var(--nv-text) !important;
  font-size: 14px !important;
  padding: 7px 11px !important;
  line-height: 20px !important;
  box-shadow: inset 0 1px 0 rgba(10, 10, 10, 0.03) !important;
}

.nv-draft-control:focus,
.nv-input.nv-draft-control:focus,
.nv-textarea.nv-draft-control:focus {
  border-color: var(--nv-primary) !important;
  outline: none !important;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--nv-primary) 18%, transparent) !important;
}

.nv-draft-control:disabled,
.nv-input.nv-draft-control:disabled,
.nv-textarea.nv-draft-control:disabled {
  background-color: var(--nv-surface-muted) !important;
  color: var(--nv-muted) !important;
  opacity: 1 !important;
}

.nv-draft-textarea {
  min-height: 78px !important;
}

.nv-draft-primary-action {
  display: inline-flex;
  min-height: 40px;
  align-items: center;
  justify-content: center;
  border: 1px solid transparent;
  border-radius: 8px;
  background: var(--nv-primary);
  color: #ffffff;
  padding: 9px 18px;
  font-size: 14px;
  font-weight: 800;
  cursor: pointer;
  transition: background-color 0.18s ease, transform 0.12s ease, box-shadow 0.18s ease;
  box-shadow: 0 8px 18px color-mix(in srgb, var(--nv-primary) 22%, transparent);
}

.nv-draft-primary-action:hover:not(:disabled) {
  background: var(--nv-primary-dark);
  transform: translateY(-1px);
}

.nv-draft-primary-action:disabled {
  cursor: not-allowed;
  opacity: 0.6;
  box-shadow: none;
}

.nv-nav-theme-switch {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-height: 38px;
  width: 100%;
  border: 1px solid rgba(255, 255, 255, 0.14);
  border-radius: 9px;
  background: rgba(255, 255, 255, 0.06);
  color: color-mix(in srgb, var(--nv-brand-ice-silver) 88%, transparent);
  padding: 9px 11px;
  font-size: 12px;
  font-weight: 800;
  cursor: pointer;
  transition: background 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}

.nv-nav-theme-switch:hover {
  background: rgba(255, 255, 255, 0.12);
  border-color: color-mix(in srgb, var(--nv-brand-iris) 45%, transparent);
  color: #ffffff;
}

@media (min-width: 1024px) {
  .nv-nav-theme-switch {
    width: 38px;
    padding: 9px;
  }

  .nv-nav-theme-switch span {
    display: none;
  }

  .nv-nav:is(:hover, .is-pinned) .nv-nav-theme-switch {
    width: 100%;
    justify-content: flex-start;
    padding: 9px 11px;
  }

  .nv-nav:is(:hover, .is-pinned) .nv-nav-theme-switch span {
    display: inline;
  }
}

/* Fila compacta en el pie del nav admin: toggle de tema (icono) junto a "Cerrar sesion". */
.nv-nav-logout-row {
  display: flex;
  align-items: center;
  gap: 8px;
}

.nv-nav-theme-inline {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 40px;
  min-height: 34px;
  border: 1px solid rgba(255, 255, 255, 0.18);
  border-radius: 8px;
  background: rgba(255, 255, 255, 0.06);
  color: color-mix(in srgb, var(--nv-brand-ice-silver) 88%, transparent);
  cursor: pointer;
  transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
}

.nv-nav-theme-inline:hover {
  background: rgba(255, 255, 255, 0.12);
  border-color: color-mix(in srgb, var(--nv-brand-iris) 45%, transparent);
  color: #ffffff;
}

.nv-nav-theme-inline .nv-nav-link-icon {
  width: 18px;
  height: 18px;
}

@media (max-width: 767px) {
  .nv-draft-span-2 {
    grid-column: auto;
  }
}

/* Precios (listas de precios) premium iris accents. Light/dark aware. */
.nv-precios-hero {
  border: 1px solid var(--nv-brand-ice-blue);
  border-radius: 12px;
  background: linear-gradient(135deg, var(--nv-brand-iris) 0%, var(--nv-brand-deep-blue) 55%, var(--nv-brand-violet) 100%);
  color: #ffffff;
  box-shadow: 0 10px 24px color-mix(in srgb, var(--nv-brand-deep-blue) 26%, transparent);
}

.nv-precios-hero .nv-precios-hero-chip {
  display: inline-flex;
  align-items: center;
  border-radius: 9999px;
  background: rgba(255, 255, 255, 0.18);
  border: 1px solid rgba(255, 255, 255, 0.3);
  color: #ffffff;
  padding: 4px 12px;
  font-size: 12px;
  font-weight: 800;
}

[data-nv-theme=dark] .nv-precios-hero {
  border-color: color-mix(in srgb, var(--nv-brand-iris) 40%, transparent);
  background: linear-gradient(135deg, var(--nv-brand-deep-blue) 0%, var(--nv-brand-graphite) 60%, var(--nv-brand-night) 100%);
  box-shadow: 0 10px 26px rgba(0, 0, 0, 0.45);
}

.nv-precios-tab {
  padding: 8px 16px;
  font-size: 14px;
  font-weight: 700;
  color: var(--nv-muted);
  background: none;
  border: 0;
  border-bottom: 2px solid transparent;
  cursor: pointer;
  transition: color 0.15s ease, border-color 0.15s ease;
}

.nv-precios-tab:hover {
  color: var(--nv-text);
}

.nv-precios-tab-active {
  color: var(--nv-brand-deep-blue);
  border-bottom-color: var(--nv-brand-iris);
}

[data-nv-theme=dark] .nv-precios-tab-active {
  color: var(--nv-brand-ice-blue);
}

.nv-precios-chip {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border-radius: 9999px;
  border: 1px solid var(--nv-border);
  background: var(--nv-surface);
  color: var(--nv-muted);
  padding: 6px 14px;
  font-size: 12px;
  font-weight: 700;
  cursor: pointer;
  transition: color 0.15s ease, border-color 0.15s ease, background 0.15s ease;
}

.nv-precios-chip:hover {
  color: var(--nv-text);
  border-color: color-mix(in srgb, var(--nv-brand-iris) 50%, var(--nv-border));
}

.nv-precios-chip-active {
  border-color: transparent;
  background: linear-gradient(135deg, var(--nv-brand-iris), var(--nv-brand-deep-blue));
  color: #ffffff;
  box-shadow: 0 6px 14px color-mix(in srgb, var(--nv-brand-deep-blue) 30%, transparent);
}

.nv-precios-chip-active:hover {
  color: #ffffff;
}

.nv-precios-accent-card {
  border: 1px solid color-mix(in srgb, var(--nv-brand-iris) 35%, var(--nv-border));
  border-radius: 12px;
  background: linear-gradient(180deg, color-mix(in srgb, var(--nv-brand-ice-blue) 22%, var(--nv-surface)) 0%, var(--nv-surface) 62%);
}

[data-nv-theme=dark] .nv-precios-accent-card {
  border-color: color-mix(in srgb, var(--nv-brand-iris) 30%, transparent);
  background: linear-gradient(180deg, color-mix(in srgb, var(--nv-brand-deep-blue) 22%, var(--nv-surface)) 0%, var(--nv-surface) 70%);
}

.nv-precios-metric {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border-radius: 9999px;
  border: 1px solid color-mix(in srgb, var(--nv-brand-iris) 30%, var(--nv-border));
  background: var(--nv-surface);
  color: var(--nv-text);
  padding: 4px 12px;
  font-size: 12px;
  font-weight: 700;
}

.nv-precios-metric strong {
  color: var(--nv-brand-deep-blue);
}

[data-nv-theme=dark] .nv-precios-metric strong {
  color: var(--nv-brand-ice-blue);
}

/* Dark-theme fix: @tailwindcss/forms base reset hardcodes a white background on
   typed inputs ([type=number], [type=date], select, textarea...), which overrides
   .nv-input and leaves light text on white in dark mode. Restore theme surfaces. */
[data-nv-theme=dark] .nv-input,
[data-nv-theme=dark] .nv-textarea {
  background-color: var(--nv-surface);
  color: var(--nv-text);
  border-color: var(--nv-border);
  color-scheme: dark;
}

[data-nv-theme=dark] .nv-input::placeholder,
[data-nv-theme=dark] .nv-textarea::placeholder {
  color: var(--nv-muted);
}

/* Documento borrador: hoja tipo factura. Papel blanco con texto oscuro en ambos
   temas (los utilitarios slate de Tailwind no se compilan en este proyecto). */
.nv-invoice {
  background: #ffffff;
  color: #334155;
}

.nv-invoice * {
  border-color: #e2e8f0;
}

.nv-invoice .inv-title {
  color: #0f172a;
}

.nv-invoice .inv-muted {
  color: #64748b;
}

.nv-invoice .inv-faint {
  color: #94a3b8;
}

/* La variante compacta .nv-input-sm SE MUDO al CSS compartido (input.css).
   Aqui exigia las dos clases —.nv-input.nv-input-sm— y en seis pantallas estaba
   escrita suelta, asi que no aplicaba y esos campos salian desnudos. Ademas este
   archivo esta duplicado a mano para Web y para MAUI, o sea dos sitios donde
   corregirla. En input.css funciona sola y compila a los dos. */

/* Etiqueta mini de campo (mayúsculas, 11px) para editores/filtros compactos */
.nv-flabel {
  font-size: 11px;
  font-weight: 800;
  letter-spacing: 0.03em;
  line-height: 1.2;
  text-transform: uppercase;
  color: var(--nv-muted);
}
