/* ===========================================================================
   EasyTable · base.css — fundamentos
   ---------------------------------------------------------------------------
   Tokens (variables), reset, tipografía, botones, campos de formulario y
   utilidades genéricas reutilizables en todo el proyecto.
   Orden de carga: base → layout → components → screens.
   =========================================================================== */
@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;600;700;800&display=swap');
:root {
  --bg: #eef0f4;
  --card: #ffffff;
  --ink: #2a2a48;
  --ink-soft: #3c3c5c;
  --muted: #9097a8;
  --line: #eef0f3;
  --line-2: #e3e6ec;

  --crimson: #ef1149;
  --crimson-d: #d20c40;
  --green: #1fbf6c;
  --green-d: #18a85d;
  --amber: #f5a623;
  --navy: #29274b;
  --navy-solid: #29274b; /* fondos sólidos "navy" (botón, insignias…): NO cambia con el tema, a diferencia de --navy (que sí, porque también se usa como color de texto de encabezados). */

  --purple: #a855f7;
  --blue: #3b82f6;
  --pink: #ec4899;

  --shadow: 0 8px 24px rgba(25, 28, 60, 0.06);
  --shadow-sm: 0 3px 10px rgba(25, 28, 60, 0.05);

  /* Tokens de superficie (además de --bg/--card) para que los rellenos
     tenues, inputs y overlays también respondan al tema oscuro. */
  --surface-soft: #f4f6fb;
  --surface-soft-2: #e7ebf5; /* segundo tono del degradado de logo/avatar */
  --input-bg: #ffffff;
  --overlay: rgba(40, 40, 70, .55);

  font-family: "Poppins", system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
}

/* ---- Modo oscuro ----------------------------------------------------------
   Se activa con [data-theme="dark"] en <html> (ver script inline en
   dashboard.html + ET.setTheme en et-api.js). Solo remapea tokens: el resto
   del CSS ya consume var(--bg)/var(--card)/var(--ink)/etc., así que hereda el
   tema automáticamente donde se usan las variables. */
[data-theme="dark"] {
  --bg: #14141f;
  --card: #1c1c2c;
  --ink: #eef0f7;
  --ink-soft: #c7c9db;
  --muted: #8b8fa3;
  --line: #2a2a3d;
  --line-2: #34344a;
  --navy: #f3f4fb;

  --surface-soft: #262638;
  --surface-soft-2: #2f2f45;
  --input-bg: #20202f;
  --overlay: rgba(0, 0, 0, .65);

  --shadow: 0 8px 24px rgba(0, 0, 0, .45);
  --shadow-sm: 0 3px 10px rgba(0, 0, 0, .35);
}

* { box-sizing: border-box; }
body { margin: 0; background: var(--bg); color: var(--ink); transition: background-color .15s, color .15s; }
h1, h2, h3, h4 { margin: 0; }

button {
  font: inherit; cursor: pointer; border: 1px solid var(--line-2); background: var(--card);
  color: var(--ink); border-radius: 10px; padding: 9px 14px;
  transition: filter .12s, background .12s, border-color .12s, box-shadow .12s, transform .12s;
}
/* Botones claros (por defecto): fondo gris suave; botones de color: elevación */
button:hover:not(:disabled) { filter: brightness(.96); }
.btn-crimson:hover:not(:disabled), .btn-green:hover:not(:disabled),
.btn-amber:hover:not(:disabled), .btn-navy:hover:not(:disabled) {
  filter: brightness(1.1); box-shadow: 0 5px 16px rgba(20, 20, 50, .16); transform: translateY(-1px);
}
.btn-outline-green:hover:not(:disabled) { background: #e4f5ec; border-color: var(--green); filter: none; }
button:disabled { opacity: .5; cursor: not-allowed; }
.btn-crimson { background: var(--crimson); border-color: var(--crimson); color: #fff; font-weight: 600; }
.btn-green { background: var(--green); border-color: var(--green); color: #fff; font-weight: 600; }
.btn-amber { background: var(--amber); border-color: var(--amber); color: #fff; font-weight: 600; }
.btn-navy { background: var(--navy-solid); border-color: var(--navy-solid); color: #fff; font-weight: 600; }
.btn-outline-green { color: var(--green-d); border: 1.5px dashed var(--green); background: #f3fbf6; font-weight: 600; }
/* Los <label> usados como botón (p.ej. envolviendo un <input type="file">) no heredan
   el estilo base de `button`, así que se les da la misma forma explícitamente. */
label.btn-crimson, label.btn-green, label.btn-amber, label.btn-navy, label.btn-outline-green {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  padding: 9px 14px; border-radius: 10px; font: inherit; cursor: pointer;
  transition: filter .12s, background .12s, border-color .12s, box-shadow .12s, transform .12s;
}
.btn-wide { padding: 12px 36px; }
input, select, textarea {
  font: inherit; background: var(--input-bg); color: var(--ink); border: 1px solid var(--line-2);
  border-radius: 10px; padding: 10px 12px; width: 100%;
}
input::placeholder, textarea::placeholder { color: #b6bccb; }
[data-theme="dark"] input::placeholder, [data-theme="dark"] textarea::placeholder { color: #62667e; }
textarea { min-height: 90px; resize: vertical; }

/* ---- Utilidades ---- */
.row { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }
.between { justify-content: space-between; }
.stack { display: flex; flex-direction: column; gap: 12px; }
.muted { color: var(--muted); }
.small { font-size: 13px; }
.tiny { font-size: 11px; letter-spacing: .04em; }
.upper { text-transform: uppercase; letter-spacing: .06em; }
.grow { flex: 1; }
/* Espaciado */
.mt-4 { margin-top: 4px; } .mt-6 { margin-top: 6px; } .mt-8 { margin-top: 8px; }
.mt-10 { margin-top: 10px; } .mt-12 { margin-top: 12px; } .mt-14 { margin-top: 14px; } .mt-16 { margin-top: 16px; }
.mb-6 { margin-bottom: 6px; } .mb-8 { margin-bottom: 8px; } .mb-10 { margin-bottom: 10px; }
.mb-12 { margin-bottom: 12px; } .mb-14 { margin-bottom: 14px; } .mb-16 { margin-bottom: 16px; }
.mt-18 { margin-top: 18px; } .mt-22 { margin-top: 22px; } .my-6 { margin: 6px 0; }
.gap-8 { gap: 8px; } .gap-10 { gap: 10px; } .gap-24 { gap: 24px; }
.items-start { align-items: flex-start; } .justify-end { justify-content: flex-end; }
.faded { opacity: .5; transition: opacity .15s; }
.w-80 { width: 80px; } .w-130 { width: 130px; } .pad-lg { padding: 48px; }
.gap-18 { gap: 18px; } .gap-28 { gap: 28px; }
.justify-center { justify-content: center; } .pointer { cursor: pointer; }
.minw-220 { min-width: 220px; } .col-span { grid-column: 1 / -1; }
.fs-17 { font-size: 17px; } .fs-22 { font-size: 22px; } .fs-26 { font-size: 26px; } .fs-34 { font-size: 34px; }
.hidden { display: none; } .mx-auto { margin-left: auto; margin-right: auto; }
.ellipsis { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.modal-sub { text-align: center; margin: -2px 0 10px; } .modal-sub.tight { margin: -2px 0 6px; }
.fs-20 { font-size: 20px; } .my-12 { margin: 12px 0; } .p-msg { margin: 8px 0 0; }
.op-90 { opacity: .9; } .op-85 { opacity: .85; }
/* Ícono tenue de cabecera de sección (un poco mayor que .tag-ic) */
.thumb-ic { width: 22px; height: 22px; opacity: .7; }
[data-theme="dark"] .thumb-ic { filter: brightness(0) invert(1); }
/* Enlace con apariencia de botón */
.a-btn { text-decoration: none; padding: 8px 14px; border-radius: 8px; }
/* Botón de acción peligrosa suave (borde rosado) */
.btn-danger-soft { color: var(--crimson); border-color: #f6c6d1; }
/* Aviso de mesa pendiente de habilitar (detalle de mesa) */
.mesa-pending { display: flex; flex-direction: column; background: #fff7e6; border: 1px solid #ffe0a3; border-radius: 12px; padding: 12px 14px; color: #8a5a00; }
/* Aviso de borrador retomado (Agregar producto) */
.draft-notice { display: flex; align-items: center; gap: 14px; background: #fff7e6; border: 1px solid #ffe0a3; border-radius: 12px; padding: 12px 16px; font-size: 13px; color: #8a5a00; }
.draft-notice button { flex: 0 0 auto; white-space: nowrap; }
/* Variantes de modal */
.modal.sm { width: min(420px, 100%); }
.modal-pad.scroll { max-height: 70vh; overflow: auto; }
.modal-head.navy { background: var(--navy-solid); }
/* Detalle de ticket */
.ticket-total { font-size: 30px; font-weight: 800; color: var(--navy); margin: 4px 0 14px; }
.tk-line { text-align: left; } .tk-line.top { border-top: 1px solid var(--line-2); padding-top: 12px; }
.tk-line.pad { padding: 6px 0; } .tk-line.bot { padding-bottom: 12px; }
/* Variantes puntuales reutilizables */
.staff-av.navy { border-color: var(--navy); background: rgba(41,39,75,.08); }
.btn-pad-18 { padding: 9px 18px; } .btn-md { padding: 10px 28px; }
.btn-crimson-outline { color: var(--crimson); border-color: var(--crimson); }
.card.flush { padding: 0; overflow: hidden; }
.grid.cols-2-1 { grid-template-columns: 2fr 1fr; }
.kpi-num { font-weight: 800; color: var(--navy); }
.stat-ring { margin: 10px auto; width: 170px; height: 170px; border-radius: 50%;
  border: 10px solid var(--green); display: grid; place-items: center; }
/* Variante animada: el aro se dibuja con conic-gradient (barrido 0→100%) y
   un ::before tapa el centro para dejar solo el anillo. */
.stat-ring.sweep { border: none; position: relative; }
.stat-ring.sweep::before { content: ""; position: absolute; inset: 10px; background: var(--card); border-radius: 50%; }
.stat-ring.sweep .ring-in { position: relative; z-index: 1; text-align: center; }
/* Texto */
.t-navy { color: var(--navy); } .t-green { color: var(--green-d); }
.t-crimson { color: var(--crimson); } .t-ink-soft { color: var(--ink-soft); }
.fw-600 { font-weight: 600; } .fw-700 { font-weight: 700; }
.fs-18 { font-size: 18px; }
.text-center { text-align: center; } .text-right { text-align: right; }
.w-full { width: 100%; } .min0 { min-width: 0; } .no-shrink { flex: 0 0 auto; }
/* Imagen que rellena su contenedor (miniaturas) */
.fill-img { width: 100%; height: 100%; object-fit: cover; border-radius: inherit; }
/* Ícono pequeño tenue (encabezados de tarjeta/sección) */
.tag-ic { width: 20px; height: 20px; opacity: .6; }
[data-theme="dark"] .tag-ic { filter: brightness(0) invert(1); }

/* Ícono por defecto (logo/producto/categoría sin imagen todavía): SVG de un
   solo tono, se invierte a blanco en oscuro igual que los íconos de línea. */
[data-theme="dark"] .default-icon { filter: brightness(0) invert(1) opacity(.6); }
/* Cabecera de sección sin fondo (título de pantalla "flotante") */
.section-bar { margin: 2px 2px 18px; padding: 0; }
.section-bar h2 { font-weight: 800; }
.section-head { display: flex; align-items: center; justify-content: space-between; margin: 22px 2px 12px; }
.section-head h3 { font-size: 13px; color: var(--muted); letter-spacing: .08em; text-transform: uppercase; }
.link { color: var(--muted); font-size: 13px; cursor: pointer; }
.link:hover { color: var(--crimson); }

/* Ícono monocromo recoloreable (usa los SVG de /img como máscara y los pinta
   con currentColor, así heredan el color del contexto). */
.ic { display: inline-block; flex: 0 0 auto; background-color: currentColor; vertical-align: middle;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  -webkit-mask-position: center; mask-position: center;
  -webkit-mask-size: contain; mask-size: contain; }

.card { background: var(--card); border: 1px solid var(--line); border-radius: 16px; padding: 18px; box-shadow: var(--shadow-sm); }
.grid { display: grid; gap: 16px; }
.auto-stats { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
.cards-3 { grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); }
.cards-2 { grid-template-columns: repeat(auto-fit, minmax(360px, 1fr)); }
.empty { text-align: center; color: var(--muted); padding: 26px; }

/* ---- Ajustes de modo oscuro para tintes de color fijo que no tienen token
   equivalente (verdes/rosados/ámbar suaves, pensados para fondo claro). ---- */
[data-theme="dark"] .btn-outline-green { background: rgba(31, 191, 108, .14); }
[data-theme="dark"] .btn-outline-green:hover:not(:disabled) { background: rgba(31, 191, 108, .22); }
[data-theme="dark"] .btn-danger-soft { border-color: rgba(239, 17, 73, .35); }
[data-theme="dark"] .mesa-pending { background: #2e2412; border-color: #4a3a16; color: #f0b429; }
[data-theme="dark"] .draft-notice { background: #2e2412; border-color: #4a3a16; color: #f0b429; }
