/* VOLQTECH — tokens del sistema de diseño.
 * Fuente: "VOLQTECH Components.dc.html" / "VOLQTECH Landing.dc.html".
 *
 * Este fichero NO estiliza nada: sólo declara variables. Cada app sigue usando sus propios
 * nombres de token y de clase; su bloque :root los redefine en términos de estos --vq-*.
 * Por eso importarlo es un no-op verificable hasta que una app hace ese aliasing.
 *
 * Modo oscuro por defecto en :root; el claro se pide con [data-theme="light"] en cualquier
 * contenedor (así el formulario de incorporación puede ser claro dentro de la PWA oscura).
 */

:root {
  /* ── Tipografía ────────────────────────────────────────────────────────────── */
  --vq-font-sans: 'Archivo', system-ui, -apple-system, sans-serif;
  --vq-font-mono: 'IBM Plex Mono', ui-monospace, SFMono-Regular, monospace;

  /* Ejes de la variable Archivo. font-stretch necesita el eje wdth (62..125). */
  --vq-stretch-hero: 118%;
  --vq-stretch-display: 114%;
  --vq-stretch-heading: 112%;
  --vq-stretch-sub: 108%;

  --vq-tracking-hero: -0.03em;
  --vq-tracking-heading: -0.025em;
  --vq-tracking-tight: -0.02em;
  /* Tres escalones, no dos. El diseño usa: 0.12em en badges/chips/pestañas, 0.14em en
     etiquetas de campo (y en el lockup), 0.16em en los eyebrows. Sin el del medio las
     etiquetas de campo caían al escalón de los badges y el rótulo se leía más apretado
     que en el .dc.html. --vq-tracking-brand ES el mismo escalón (0.14em) con otro nombre:
     se conserva porque la marca es marca, no una etiqueta de campo. */
  --vq-tracking-mono: 0.12em;
  --vq-tracking-mono-mid: 0.14em;
  --vq-tracking-mono-wide: 0.16em;
  --vq-tracking-brand: 0.14em;

  /* ── Geometría ─────────────────────────────────────────────────────────────── */
  --vq-radius: 2px;
  --vq-radius-pill: 999px;
  --vq-rule-strong: 2px;
  --vq-accent-bar: 3px;

  /* ── Marca (literales en ambos modos) ──────────────────────────────────────── */
  --vq-volt: #B5FF2D;
  --vq-volt-hover: #CDFF6B;
  --vq-ink: #07080A;
  --vq-paper: #F2F3F0;
  /* Texto sobre un relleno volt. Ink sobre volt = 17.4:1. */
  --vq-on-accent: #07080A;
  /* Los dos de abajo son INVARIANTES entre temas a propósito: el relleno volt es el mismo
     en claro y en oscuro, así que lo que va encima tampoco puede cambiar. Sirven para
     re-atar los tokens de texto/borde dentro de una superficie acentuada (.vq-card--accent). */
  --vq-on-accent-muted: rgba(7, 8, 10, 0.72);
  --vq-on-accent-line: rgba(7, 8, 10, 0.22);
  /* Relleno del isotipo. En oscuro es volt; en claro el volt sobre blanco da 1.15:1 y el
     isotipo se evapora, así que el lockup pasa a tinta — que es como se dibuja cualquier marca
     clara-sobre-oscuro invertida. Se puede forzar por instancia:
     style="--vq-logo-fill: var(--vq-accent)" cuando el logo va sobre un héroe oscuro. */
  --vq-logo-fill: #B5FF2D;

  /* FORMA del isotipo: el hexágono con la flecha, que es la marca de verdad. Hasta acá las tres
     apps dibujaban un RAYO con un `clip-path` inventado —no es el logo de VOLQTECH y nunca lo
     fue—, mientras la landing y los favicones ya usaban el isotipo bueno.

     Va como máscara alfa y no como <img>: el color tiene que salir de --vq-logo-fill, porque el
     volt se evapora sobre blanco y el mismo lockup se usa en tema claro y en oscuro. Y va como
     dato incrustado y no como archivo: la CSS la comparten las tres apps y la sala de control,
     y un `url()` relativo obligaría a copiar el asset al `public/` de cada una.

     El alfa sale de packages/ui/assets/mark-mask.png, que se deriva del mark-512.png del .fig
     (misma silueta, sin color). No se traza a mano a un `path`: las esquinas del logo son
     redondeadas y una poligonal inventada volvería a no ser la marca. */
  --vq-logo-mask: url("data:image/png;base64,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");

  /* ── Superficies · OSCURO (por defecto) ────────────────────────────────────── */
  --vq-bg: #07080A;
  --vq-bg-alt: #0C0E11;
  --vq-surface: #0A0C0E;
  --vq-surface-2: #101317;
  --vq-surface-3: #14171B;
  --vq-elevated: linear-gradient(160deg, #14171B, #0A0C0E);
  --vq-scrim: rgba(7, 8, 10, 0.78);
  /* Verde bosque del héroe de la landing. RAMPA DE SIETE PARADAS, muestreada del .fig sobre
     zonas planas: el degradado real NO es radial, es LINEAL en diagonal (105deg) y va de
     verde arriba-a-la-izquierda a negro abajo-a-la-derecha. Los siete valores son las
     muestras reales, así que las intermedias también viven acá: la regla de la casa es que
     ni un literal de color se escriba fuera de este fichero, y un degradado con paradas
     "a ojo" entre dos tokens no reproduce la curva medida (el tramo 0→25% es casi plano y
     el 75→100% se desploma; interpolar de 0 a 100 lo aplanaría entero).
     El nombre de cada token ES su parada en la rampa, en tanto por ciento.
     Las siete son INVARIANTES entre temas —igual que --vq-ink y --vq-volt—: el héroe es una
     superficie de marca y es oscura siempre.
     CONTRASTES medidos contra --vq-forest, que es el caso peor (la parada más clara):
       · papel #F2F3F0 .................. 10.12:1
       · volt #B5FF2D ................... 9.29:1
       · --vq-text-secondary #A6ACB4 .... 4.93:1  (AA de texto normal)
       · --vq-border-button al 45% ...... 3.38:1  (WCAG 1.4.11 pide 3:1)
       · --vq-focus-ring al 55% ......... 4.01:1
     OJO con --vq-text-label (#7C838C): sobre --vq-forest da 2.94:1. NO se puede poner una
     .vq-t-label directamente sobre el héroe; el rótulo del héroe es un .vq-eyebrow, que va
     en volt. */
  --vq-forest: #194230;      /*   0% · arriba-izquierda */
  --vq-forest-12: #183F2D;   /*  12% */
  --vq-forest-25: #153625;   /*  25% */
  --vq-forest-mid: #112C1C;  /*  50% · centro */
  --vq-forest-75: #0A1B11;   /*  75% */
  --vq-forest-88: #07130C;   /*  88% */
  --vq-forest-deep: #000101; /* 100% · abajo-derecha */

  /* ── Texto · OSCURO ────────────────────────────────────────────────────────── */
  --vq-text: #F2F3F0;
  --vq-text-secondary: #A6ACB4;
  --vq-text-muted: #9AA0A8;
  --vq-text-label: #7C838C;
  --vq-text-disabled: #5B6169;
  --vq-text-inverse: #07080A;

  /* ── Bordes · OSCURO ───────────────────────────────────────────────────────── */
  --vq-border-hairline: rgba(242, 243, 240, 0.14);
  --vq-border: rgba(242, 243, 240, 0.16);
  /* El diseño trae .18 (1.60:1 sobre --vq-surface). Es el ÚNICO contorno de todos los
     campos del sistema, así que cae en WCAG 1.4.11 igual que el borde del botón: subido
     a .36 (3.06:1 sobre --vq-surface, 3.11:1 sobre --vq-surface-2). */
  --vq-border-input: rgba(242, 243, 240, 0.36);
  /* El diseño trae .28 (≈2.1:1): incumple WCAG 1.4.11, que pide 3:1 para el límite
     de un control cuando el borde es su único contorno visible. Subido a .45 (≈3.2:1). */
  --vq-border-button: rgba(242, 243, 240, 0.45);
  --vq-border-row: rgba(242, 243, 240, 0.09);
  --vq-border-strong: #F2F3F0;

  --vq-hover-wash: rgba(242, 243, 240, 0.06);
  --vq-row-hover: rgba(242, 243, 240, 0.04);
  --vq-neutral-tint: rgba(242, 243, 240, 0.08);

  /* ── Acento · OSCURO ───────────────────────────────────────────────────────── */
  /* --vq-accent es SÓLO relleno. Para texto/iconos/bordes usar --vq-accent-text.
     En claro son valores distintos: volt sobre blanco da 1.15:1 (ilegible). */
  --vq-accent: #B5FF2D;
  --vq-accent-text: #B5FF2D;
  --vq-accent-tint: rgba(181, 255, 45, 0.14);
  --vq-accent-wash: rgba(181, 255, 45, 0.08);
  --vq-accent-border: rgba(181, 255, 45, 0.40);
  /* Hover del relleno volt. En oscuro aclara (como el diseño); en claro NO puede aclarar,
     porque un volt más pálido sobre blanco desaparece: ahí satura hacia abajo. */
  --vq-accent-hover: #CDFF6B;

  /* ── Semánticos · OSCURO (éxito = volt) ────────────────────────────────────── */
  --vq-danger: #FF6B6B;
  --vq-danger-tint: rgba(255, 107, 107, 0.14);
  --vq-danger-wash: rgba(255, 107, 107, 0.08);
  --vq-danger-border: rgba(255, 107, 107, 0.62);
  /* El botón destructivo se rellena con -tint; al hover tiene que INTENSIFICAR, no aclarar
     (aclarar sobre oscuro sería el gesto contrario al del resto de los botones). */
  --vq-danger-tint-hover: rgba(255, 107, 107, 0.22);

  --vq-warn: #FFB74D;
  --vq-warn-tint: rgba(255, 183, 77, 0.14);
  --vq-warn-wash: rgba(255, 183, 77, 0.08);
  --vq-warn-border: rgba(255, 183, 77, 0.48);

  --vq-info: #7AB4FF;
  --vq-info-tint: rgba(122, 180, 255, 0.14);
  --vq-info-wash: rgba(122, 180, 255, 0.08);
  --vq-info-border: rgba(122, 180, 255, 0.54);

  --vq-success: #B5FF2D;
  --vq-success-tint: rgba(181, 255, 45, 0.14);

  --vq-focus-ring: 0 0 0 2px rgba(181, 255, 45, 0.55);
  --vq-shadow-card: none;
  --vq-shadow-pop: 0 8px 24px rgba(0, 0, 0, 0.45);
}

/* ── Modo claro ───────────────────────────────────────────────────────────────
 * Sólo se redefine lo que cambia. Los contrastes están medidos contra --vq-surface
 * (#FFFFFF) y todos superan 4.5:1.
 */
[data-theme='light'] {
  --vq-bg: #F2F3F0;
  --vq-bg-alt: #E9EAE6;
  --vq-surface: #FFFFFF;
  --vq-surface-2: #FFFFFF;
  --vq-surface-3: #F7F8F5;
  --vq-elevated: #FFFFFF;
  --vq-scrim: rgba(7, 8, 10, 0.55);

  --vq-text: #07080A;
  --vq-text-secondary: #3A4046;
  --vq-text-muted: #5B6169;
  --vq-text-label: #5F666E;
  --vq-text-disabled: #9AA0A8;
  --vq-text-inverse: #F2F3F0;

  --vq-border-hairline: rgba(7, 8, 10, 0.12);
  --vq-border: rgba(7, 8, 10, 0.14);
  /* .22 daba 1.66:1 sobre blanco. Es el ÚNICO contorno de input/select/textarea, del
     adjunto, de la casilla nativa, de los chips y de las celdas del grupo segmentado:
     una celda no seleccionada era blanco sobre blanco. .44 → 3.10:1 sobre blanco. */
  --vq-border-input: rgba(7, 8, 10, 0.44);
  /* .34 daba 2.30:1 sobre blanco: el borde del botón secundario es su único contorno y
     WCAG 1.4.11 pide 3:1. A .44 → 3.10:1 sobre blanco y 3.05:1 sobre --vq-bg. */
  --vq-border-button: rgba(7, 8, 10, 0.44);
  --vq-border-row: rgba(7, 8, 10, 0.09);
  --vq-border-strong: #07080A;

  --vq-hover-wash: rgba(7, 8, 10, 0.05);
  --vq-row-hover: rgba(7, 8, 10, 0.035);
  --vq-neutral-tint: rgba(7, 8, 10, 0.07);

  /* El relleno sigue siendo volt; el TEXTO acentuado pasa a verde oliva (6.8:1). */
  --vq-accent: #B5FF2D;
  --vq-accent-text: #465C00;
  --vq-accent-tint: rgba(70, 92, 0, 0.12);
  --vq-accent-wash: rgba(70, 92, 0, 0.07);
  /* OPACO a propósito. El oliva al 45% sobre blanco daba 2.14:1, y este borde es lo único
     que le pone contorno al relleno volt (volt sobre blanco = 1.15:1): botón primario,
     relleno del meter, opción segmentada seleccionada, checkbox marcado. Opaco da 7.52:1
     sobre blanco y 6.53:1 contra el propio volt. Mismo valor que --vq-accent-text, pero
     literal y no var(): así re-atar --vq-accent-text dentro de .vq-card--accent no
     repinta de golpe todos los contornos de la app. */
  --vq-accent-border: #465C00;
  --vq-accent-hover: #C4F02C;

  /* Lockup invertido: rayo de tinta sobre papel. Ver el comentario del token en :root. */
  --vq-logo-fill: #07080A;

  --vq-danger: #C22B2B;
  --vq-danger-tint: rgba(194, 43, 43, 0.12);
  --vq-danger-wash: rgba(194, 43, 43, 0.07);
  --vq-danger-border: #C22B2B;
  --vq-danger-tint-hover: rgba(194, 43, 43, 0.18);

  --vq-warn: #8A5200;
  --vq-warn-tint: rgba(138, 82, 0, 0.12);
  --vq-warn-wash: rgba(138, 82, 0, 0.07);
  --vq-warn-border: #8A5200;

  --vq-info: #1F5FBF;
  --vq-info-tint: rgba(31, 95, 191, 0.12);
  --vq-info-wash: rgba(31, 95, 191, 0.07);
  --vq-info-border: #1F5FBF;

  --vq-success: #3F6212;
  --vq-success-tint: rgba(63, 98, 18, 0.12);

  /* OPACO. Al 50% componía #A2AE80 → 2.37:1 sobre blanco, por debajo del 3:1 que WCAG
     1.4.11 le exige a un indicador de foco. Opaco: 7.52:1 sobre blanco, 6.75:1 sobre
     --vq-bg. (En oscuro el volt al 55% ya da 5.55:1 sobre el fondo tinta y se deja.) */
  --vq-focus-ring: 0 0 0 2px #465C00;
  --vq-shadow-card: 0 1px 2px rgba(7, 8, 10, 0.06);
  --vq-shadow-pop: 0 8px 24px rgba(7, 8, 10, 0.12);
}
