/* variables.css */

/* Montserrat self-hosteada, no un @import de Google Fonts: mismo criterio
 * que ya usa el proyecto para socket.io (server.js) — nada de terceros en
 * runtime, no se filtra la IP del cliente a un tercero en cada carga, y la
 * CSP se mantiene en fontSrc:'self' sin abrir excepciones. Solo el subset
 * "latin" (cubre español: acentos, ñ, ¿¡), y solo los 4 pesos que el panel
 * usa de verdad (400/500/600/700) — no los 6 que traía el @import viejo. */
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/fonts/montserrat-400.woff2') format('woff2');
}
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url('/fonts/montserrat-500.woff2') format('woff2');
}
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/fonts/montserrat-600.woff2') format('woff2');
}
@font-face {
  font-family: 'Montserrat';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/fonts/montserrat-700.woff2') format('woff2');
}

:root {
  /* El panel es oscuro y no tiene modo claro. Declararlo hace que el navegador
     dibuje TODO lo que renderiza el sistema —y que el CSS no puede tocar— con
     la paleta oscura: la lista desplegable de un <select>, las flechitas de un
     <input type="number">, el reloj de un <input type="time">, el resaltado de
     autocompletado. Sin esto, el popup del select de categorías salía blanco
     sobre el panel oscuro, porque lo pinta el sistema operativo y no la hoja
     de estilos. */
  color-scheme: dark;

  /* Colors - Food Theme (Warm & Appetizing) */
  --bg-color: #1a0f0a; /* Oscuro con tono chocolate/café */
  --sidebar-bg: #291511; 
  --chat-panel-bg: #21110a;
  --primary-color: #f97316; /* Naranja vibrante */
  --primary-hover: #fb923c; 
  --secondary-color: #ef4444; /* Rojo tomate */
  --text-primary: #fff7ed; /* Crema muy claro */
  --text-secondary: #fdba74; /* Naranja pastel */
  --sent-bubble: #9a3412; /* Naranja quemado oscuro */
  --received-bubble: #3f1d13; /* Marrón oscuro */
  --danger-color: #ef4444;
  --warning-color: #f59e0b;
  --success-color: #22c55e;
  /* Azul de estado — el único color frío de la paleta, a propósito: marca lo
     que está "en curso" (un pedido en preparación, una acción de tránsito) y
     tiene que leerse como distinto de los cálidos de la marca, que ya están
     tomados por primario/pendiente. Estaba hardcodeado como #3b82f6 en
     orders.css y en orders.js. */
  --info-color: #3b82f6;
  --info-hover: #2563eb;
  --glass-bg: rgba(41, 21, 17, 0.7);
  --glass-border: rgba(249, 115, 22, 0.15);

  /* Fonts */
  --font-sans: 'Montserrat', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
  --font-mono: 'JetBrains Mono', monospace;
  --text-xs: 0.75rem;
  /* Piso absoluto de legibilidad — timestamps de mensajes y metadata
     similar. Montserrat es geométrica y más angosta de "cintura" que
     Inter (la fuente anterior); a menos de esto se sentía apretada.
     Antes eran 0.65rem (burbujas del chat) y 0.7rem (lista de
     contactos) sin ninguna razón para ser distintos — quedan
     unificados acá, con el valor más grande de los dos. */
  --text-2xs: 0.7rem;
  --text-sm: 0.875rem;
  --text-base: 1rem;
  --text-lg: 1.125rem;
  --text-xl: 1.25rem;
  --text-2xl: 1.5rem;
  /* Tamaños que no calzan en la escala de arriba pero se repetían literales
     en dashboard.html (extraídos con su valor exacto, no forzados al rung
     más cercano — eso cambiaría el tamaño real del texto). */
  --text-label: 0.8rem;    /* labels de formulario, headers de métrica — 10 usos */
  --text-body-sm: 0.9rem;  /* subtítulos/descripciones de card — 3 usos */
  --text-heading: 1.2rem;  /* títulos de card y valores grandes de métrica — 6 usos */

  /* Spacing */
  --space-1: 0.25rem;
  --space-1-5: 0.375rem; /* 6px — recurría hardcodeado (9 veces) en labels de dashboard.html */
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-6: 1.5rem;
  --space-8: 2rem;

  /* Border Radius */
  --radius-sm: 0.25rem;
  --radius-md: 0.5rem;
  --radius-lg: 1rem;
  --radius-xl: 1.5rem;
  --radius-full: 9999px;

  /* Shadows */
  --shadow-subtle: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
  --shadow-md: 0 10px 15px -3px rgba(0, 0, 0, 0.2), 0 4px 6px -2px rgba(0, 0, 0, 0.1);
  --shadow-elevated: 0 20px 25px -5px rgba(0, 0, 0, 0.3), 0 10px 10px -5px rgba(0, 0, 0, 0.2);
  --shadow-nav-active: 0 4px 12px rgba(249, 115, 22, 0.35);
  --focus-ring: 0 0 0 3px rgba(249, 115, 22, 0.35);
  --glow-green: 0 0 15px rgba(0, 212, 170, 0.5);
  --glow-indigo: 0 0 15px rgba(99, 102, 241, 0.5);
  --glow-success: 0 0 8px rgba(34, 197, 94, 0.6);
  --glow-danger: 0 0 8px rgba(239, 68, 68, 0.6);
  --glow-info: 0 0 8px rgba(59, 130, 246, 0.6);
  --glow-primary: 0 0 8px rgba(249, 115, 22, 0.6);

  /* Transitions — una sola escala; todo lo que sea interacción de UI
     (hover, toggle, modal) referencia uno de estos tres. Las animaciones
     decorativas de duración larga (partículas, spinner, pulso del logo,
     typing indicator) quedan fuera a propósito: no son parte del mismo
     lenguaje de "respuesta a una interacción", son piezas de marca con su
     propio ritmo. */
  --transition-fast: 150ms ease-in-out;
  --transition-base: 300ms ease-in-out;
  --transition-slow: 500ms ease-in-out;

  /* Border radius — circular, separado de la escala lineal (sm/md/lg/xl/full)
     porque es un concepto distinto: "hacé esto un círculo perfecto" no
     escala con el tamaño del elemento como sí lo hace la escala de radios. */
  --radius-circle: 50%;

  /* Z-Index */
  --z-base: 1;
  --z-elevated: 10;
  --z-dropdown: 50;
  --z-sticky: 100;
  --z-modal: 1000;
  --z-toast: 2000;
}

[data-theme="minimal-dark"] {
  color-scheme: dark;
  --bg-color: #0f1115;
  --sidebar-bg: #181b21; 
  --chat-panel-bg: #0f1115;
  --primary-color: #f3f4f6; 
  --primary-hover: #ffffff; 
  --secondary-color: #6b7280; 
  --text-primary: #f3f4f6; 
  --text-secondary: #9ca3af; 
  --sent-bubble: #1f2937; 
  --received-bubble: #181b21; 
  --danger-color: #ef4444;
  --warning-color: #f59e0b;
  --success-color: #10b981;
  --info-color: #3b82f6;
  --info-hover: #2563eb;
  --glass-bg: rgba(24, 27, 33, 0.95);
  --glass-border: rgba(255, 255, 255, 0.08);
  --shadow-nav-active: 0 4px 12px rgba(255, 255, 255, 0.1);
  --focus-ring: 0 0 0 3px rgba(255, 255, 255, 0.2);
  --glow-primary: 0 0 8px rgba(255, 255, 255, 0.3);
}

[data-theme="minimal-light"] {
  color-scheme: light;
  --bg-color: #f9fafb;
  --sidebar-bg: #ffffff; 
  --chat-panel-bg: #f3f4f6;
  --primary-color: #111827; 
  --primary-hover: #000000; 
  --secondary-color: #9ca3af; 
  --text-primary: #111827; 
  --text-secondary: #4b5563; 
  --sent-bubble: #e5e7eb; 
  --received-bubble: #ffffff; 
  --danger-color: #ef4444;
  --warning-color: #f59e0b;
  --success-color: #10b981;
  --info-color: #3b82f6;
  --info-hover: #2563eb;
  --glass-bg: rgba(255, 255, 255, 0.95);
  --glass-border: rgba(0, 0, 0, 0.08);
  --shadow-nav-active: 0 4px 12px rgba(0, 0, 0, 0.15);
  --focus-ring: 0 0 0 3px rgba(0, 0, 0, 0.1);
  --glow-primary: 0 0 8px rgba(0, 0, 0, 0.15);
}

* {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

body {
  font-family: var(--font-sans);
  background-color: var(--bg-color);
  color: var(--text-primary);
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* Custom Scrollbar */
::-webkit-scrollbar {
  width: 6px;
  height: 6px;
}

::-webkit-scrollbar-track {
  background: var(--bg-color);
}

::-webkit-scrollbar-thumb {
  background: var(--glass-border);
  border-radius: var(--radius-full);
}

::-webkit-scrollbar-thumb:hover {
  background: var(--primary-color);
}

.glass-panel {
  background: var(--glass-bg);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border: 1px solid var(--glass-border);
}
