/* =====================================================================
   estilo.css — Sistema de diseño compartido
   DIRECCIÓN: "SALA DE MÁQUINAS"
   ---------------------------------------------------------------------
   Lo usan las dos páginas del sitio:
     index.html  → la calculadora pública  (contexto CLARO: chapa)
     panel.html  → el panel de flota       (contexto OSCURO: chasis)

   IDEA — el sitio está construido como el equipamiento que describe.
   Chapa de aluminio anodizado, chasis de grafito, señalización amarilla
   y datos GRABADOS. El resultado no se muestra: se troquela.

   REGLA DEL ARCHIVO — cero valores mágicos. Todo tamaño, espacio, color
   y radio sale de un token. Si necesitas un valor que no existe, el
   problema es el token, no la regla.
   ===================================================================== */

/* =====================================================================
   0. TIPOGRAFÍAS
   ---------------------------------------------------------------------
   Dos familias variables autoalojadas en ./fuentes (90 KB en total).
   Sin CDN y sin build: funcionan abriendo el archivo con doble clic
   (comprobado: Chrome carga woff2 desde file:// si están al lado).

   Subset LATIN para las dos (el español entra entero en U+0000-00FF).
   LATIN-EXT solo para la mono, que es la única que tiene que pintar el
   símbolo ₿ (U+20BF) de fmtBTC().

   Martian Mono trae dos ejes, wght y wdth, y por eso UNA sola familia
   cubre los dos registros del sitio: estrecha y pesada en titulares
   (rótulo industrial), ancha en la cifra protagonista (troquelada) y
   estrecha otra vez en las tablas densas del panel.
   ===================================================================== */

@font-face{
  font-family:"Martian Mono";
  src:url("fuentes/martianmono-latin.woff2") format("woff2");
  font-weight:100 800; font-stretch:75% 112.5%;
  font-display:swap;
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,
    U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,
    U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"Martian Mono";
  src:url("fuentes/martianmono-latin-ext.woff2") format("woff2");
  font-weight:100 800; font-stretch:75% 112.5%;
  font-display:swap;
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,
    U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,
    U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;
}
@font-face{
  font-family:"Public Sans";
  src:url("fuentes/publicsans-latin.woff2") format("woff2");
  font-weight:300 800;
  font-display:swap;
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,
    U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,
    U+2212,U+2215,U+FEFF,U+FFFD;
}

/* =====================================================================
   1. TOKENS
   ===================================================================== */
:root{

  /* ---- PALETA BRUTA -------------------------------------------------
     Cada color con su contraste medido. Los que no aparecen aquí, no
     existen: no hay hex sueltos en ninguna regla del proyecto. */

  /* Aluminio anodizado */
  --chapa:#D9DCDE;         /* fondo de página */
  --chapa-honda:#C3C8CB;   /* superficies HUNDIDAS: controles, ventana */
  --chapa-alta:#EDEEEF;    /* superficies ELEVADAS: la placa */

  /* Chasis de grafito */
  --grafito:#1B1E22;       /* chasis, cabecera, barra fija */
  --grafito-2:#2A2F35;     /* superficies dentro del chasis */
  --grafito-3:#3A4046;     /* superficies hundidas dentro del chasis */

  /* Líneas grabadas */
  --grabado:#9AA1A6;       /* reglas y separadores (decorativo) */
  --grabado-fuerte:#6E767B;/* bordes de CONTROL — 3,98:1 sobre chapa-alta,
                              cumple WCAG 1.4.11 para elementos de UI */
  --grabado-luz:#5A6167;   /* el equivalente dentro del chasis */

  /* Señalización industrial. Amarillo de seguridad, no naranja Bitcoin:
     está 40° más al verde y mucho más saturado. */
  --senal:#EDB200;         /* 8,74:1 con grafito → SIEMPRE relleno con
                              tinta oscura encima, NUNCA texto sobre chapa
                              (ahí daría 1,39:1) */
  --senal-honda:#A87F00;   /* relieve inferior del botón */
  --senal-tinte:#F7E4A8;   /* fondo suave sobre chapa. 13,2:1 con tinta */

  /* Semántica. El signo del dinero es lo ÚNICO que se codifica en color,
     y tiene dos versiones porque el sitio tiene dos fondos. */
  --frio:#17594A;          /* margen positivo sobre chapa. 4,86:1 mínimo */
  --calor:#96280F;         /* pérdida sobre chapa.        4,78:1 mínimo */
  --calor-honda:#6E1C08;   /* franja oscura del rayado de señalización */
  --frio-luz:#4FC79E;      /* margen positivo sobre chasis. 7,97:1 */
  --calor-luz:#FF7A5E;     /* pérdida sobre chasis.         6,53:1 */

  /* Tinta */
  --tinta:#1B1E22;         /* 12,1:1 sobre chapa */
  --tinta-2:#4A5257;       /* secundario. 4,73:1 sobre chapa-honda, que es
                              el fondo más exigente donde aparece */
  --luz:#E9EBEC;           /* 13,9:1 sobre grafito */
  --luz-2:#A7ADB1;         /* 7,38:1 sobre grafito, 5,95:1 sobre grafito-2 */

  /* ---- ESPACIADO — base 4, sin excepciones ----
     Antes había 41 valores distintos de rem. Ahora hay nueve. */
  --e1:.25rem;  /*  4px */
  --e2:.5rem;   /*  8px */
  --e3:.75rem;  /* 12px */
  --e4:1rem;    /* 16px */
  --e5:1.5rem;  /* 24px */
  --e6:2rem;    /* 32px */
  --e7:3rem;    /* 48px */
  --e8:4rem;    /* 64px */
  --e9:6rem;    /* 96px */

  /* ---- ESCALA TIPOGRÁFICA — razón 1,25 desde 16px ----
     Antes había ~19 tamaños elegidos a ojo. Ahora hay nueve peldaños. */
  --t-xxs:.6875rem; /* 11 — solo micro-etiquetas de la cabecera móvil */
  --t-xs:.8125rem;  /* 13 — etiquetas grabadas, notas al pie */
  --t-s:.875rem;    /* 14 — texto secundario, filas de datos */
  --t-m:1rem;       /* 16 — cuerpo */
  --t-l:1.25rem;    /* 20 — entradilla, h3 */
  --t-xl:1.5625rem; /* 25 — h2, cifras de cinta */
  --t-2xl:1.9375rem;/* 31 */
  --t-3xl:2.4375rem;/* 39 — cifra troquelada en móvil */
  --t-4xl:3.0625rem;/* 49 — cifra troquelada */
  --t-5xl:3.8125rem;/* 61 — h1 */

  /* ---- RADIOS — TRES, y cada uno con motivo ----
     Antes había ocho sin criterio. El metal no se redondea: o es plano,
     o lleva un chaflán mecanizado. Lo único redondo de una máquina es
     un piloto. */
  --r-plano:0;
  --r-chaflan:3px;
  --r-led:999px;

  /* ---- TIPOGRAFÍAS ---- */
  --display:"Martian Mono",ui-monospace,"Cascadia Mono",Consolas,monospace;
  --cuerpo:"Public Sans",system-ui,-apple-system,"Segoe UI",sans-serif;
  --dato:var(--display);

  /* ---- SOMBRAS — solo dos, y las dos describen relieve real ---- */
  --hundido:inset 0 2px 4px rgba(27,30,34,.16),
            inset 0 -1px 0 rgba(255,255,255,.65);
  --elevado:0 1px 0 rgba(255,255,255,.9) inset,
            0 10px 24px rgba(27,30,34,.18),
            0 2px 4px rgba(27,30,34,.12);
}

/* =====================================================================
   2. CONTEXTOS — la misma pieza, dos materiales
   ---------------------------------------------------------------------
   Aquí está la clave de que un solo archivo vista dos productos. Los
   componentes NO conocen los colores: usan --sup-*, --tx, --linea y
   --acento-tx. Lo que cambia es el contexto en el que están metidos.

     por defecto  → CHAPA   (calculadora pública)
     .chasis      → GRAFITO (cabecera de las dos páginas, y el panel entero)

   La placa de aluminio atornillada sobre el chasis oscuro es exactamente
   como se ve una máquina de verdad. No son dos estéticas: son las dos
   caras de la misma.
   ===================================================================== */
:root,.chapa{
  --sup-0:var(--chapa);
  --sup-1:var(--chapa-alta);
  --sup-2:var(--chapa-honda);
  --tx:var(--tinta);
  --tx2:var(--tinta-2);
  --linea:var(--grabado);
  --linea-fuerte:var(--grabado-fuerte);
  --pos:var(--frio);
  --neg:var(--calor);
  /* El acento NUNCA es texto sobre chapa: sobre claro solo rellena. */
  --acento-tx:var(--tinta);
  --acento-suave:var(--senal-tinte);
  --foco:var(--grafito);
  --relieve:var(--hundido);
}
.chasis,body.chasis{
  --sup-0:var(--grafito);
  --sup-1:var(--grafito-2);
  --sup-2:var(--grafito-3);
  --tx:var(--luz);
  --tx2:var(--luz-2);
  --linea:var(--grafito-3);
  --linea-fuerte:var(--grabado-luz);
  --pos:var(--frio-luz);
  --neg:var(--calor-luz);
  /* Sobre grafito el amarillo SÍ es legible (8,74:1) y hace de acento. */
  --acento-tx:var(--senal);
  --acento-suave:rgba(237,178,0,.14);
  --foco:var(--senal);
  --relieve:inset 0 2px 4px rgba(0,0,0,.4);
  color:var(--tx);
  background:var(--sup-0);
}

/* ---- ALIAS HEREDADOS -----------------------------------------------
   El panel tiene ~200 reglas escritas contra los nombres antiguos. En vez
   de reescribirlas una a una, sus nombres apuntan al token contextual que
   les corresponde: así adoptan la identidad nueva de golpe y sin riesgo.
   No añadas alias nuevos — esto es deuda heredada, no una API. */
:root{
  --bg:var(--sup-0);      --panel:var(--sup-1);   --panel2:var(--sup-2);
  --border:var(--linea);  --acc:var(--acento-tx); --acc-suave:var(--acento-suave);
  --ok:var(--pos);        --bad:var(--neg);       --radius:var(--r-chaflan);
  --r:var(--r-chaflan);
  --ambar:var(--senal);   --ambar-suave:var(--acento-suave);
  --verde:var(--pos);     --rojo:var(--neg);
  --serif:var(--display); --sans:var(--cuerpo);   --mono:var(--dato);
  --carbon:var(--sup-0);  --carbon2:var(--sup-1); --carbon3:var(--sup-2);
  --borde:var(--linea);   --papel:var(--chapa-alta); --tinta-papel:var(--tinta);
}

/* =====================================================================
   3. BASE
   ===================================================================== */
*{box-sizing:border-box;margin:0;padding:0}
html{font-size:16px;-webkit-text-size-adjust:100%}

body{
  background:var(--sup-0);
  color:var(--tx);
  font-family:var(--cuerpo);
  font-size:var(--t-m);
  line-height:1.55;
  overflow-x:hidden;
  /* Aluminio cepillado. Un rayado de 3px, no una textura de stock: a
     tamaño real no se ve como patrón, solo impide que la superficie se
     lea como "gris plano de plantilla". */
  background-image:repeating-linear-gradient(90deg,
    rgba(255,255,255,.42) 0 1px, transparent 1px 3px);
}
body.chasis{background-image:none}

/* ---- TITULARES: rótulo industrial ----
   Mono estrecha, pesada, en caja alta y muy apretada. Es la misma familia
   que las cifras: la voz del sitio es la voz de la máquina. Lo que separa
   un titular de un dato no es la familia, es el ancho y el peso. */
h1,h2,h3{
  font-family:var(--display);
  font-stretch:75%;
  line-height:1.02;
  letter-spacing:-.015em;
  text-transform:uppercase;
  text-wrap:balance;
}
h1{font-weight:800;font-size:clamp(2rem,5.5vw,var(--t-5xl));
   margin-bottom:var(--e4);max-width:16ch}
h2{font-weight:800;font-size:clamp(1.375rem,3.6vw,var(--t-xl));
   margin-bottom:var(--e4)}
h3{font-weight:700;font-size:var(--t-m);letter-spacing:.04em;
   margin-bottom:var(--e2)}

p{margin-bottom:var(--e3);max-width:68ch}
a{color:var(--tx);text-decoration-color:var(--linea-fuerte);
  text-underline-offset:3px}
a:hover{text-decoration-color:currentColor}
strong{font-weight:700;color:var(--tx)}

small,.mut,.mini{color:var(--tx2);font-size:var(--t-xs)}
.nota,.pista{font-size:var(--t-xs);color:var(--tx2);margin-top:var(--e2);
  max-width:64ch}

.envoltorio{max-width:1080px;margin:0 auto;padding:0 var(--e5)}
.seccion{padding:var(--e7) 0}
.seccion + .seccion{border-top:1px solid var(--linea)}

.pos{color:var(--pos)} .neg{color:var(--neg)}
.amb,.naranja{color:var(--acento-tx)}
.mb{margin-bottom:var(--e3)} .mt{margin-top:var(--e3)}
.derecha{text-align:right}

/* ---- RÓTULO DE SECCIÓN ----
   Sustituye a los <h2> genéricos cuando la sección es un bloque funcional:
   número de canal + nombre + regla que llega al borde. Es lo que lleva
   grabado un panel de verdad, y da ritmo sin pedir más tamaños de fuente. */
.rotulo{display:flex;align-items:center;gap:var(--e3);
  font-family:var(--display);font-weight:600;font-stretch:78%;
  font-size:var(--t-xs);letter-spacing:.16em;text-transform:uppercase;
  color:var(--tx2);margin-bottom:var(--e3)}
.rotulo::after{content:"";flex:1;height:1px;background:var(--linea)}

/* ---- REGLA GRABADA ----
   Dos líneas de 1px, una oscura y una clara. Es fresado en metal, no un
   <hr> gris. Sobre chasis solo queda la oscura. */
.grabado,hr{height:2px;border:0;margin:var(--e6) 0;
  background:linear-gradient(var(--linea) 0 1px, rgba(255,255,255,.8) 1px 2px)}
.chasis .grabado,.chasis hr{background:var(--linea)}

/* =====================================================================
   4. CHASIS — cabecera y navegación del sitio
   El marcado se repite en las dos páginas a propósito: son veinte líneas,
   y así no hay salto visual al cargar ni dependemos de JS para navegar.
   ===================================================================== */
header{background:var(--grafito);border-bottom:3px solid var(--senal)}
header,.chasis{--sup-0:var(--grafito);--sup-1:var(--grafito-2);
  --sup-2:var(--grafito-3);--tx:var(--luz);--tx2:var(--luz-2);
  --linea:var(--grafito-3);--linea-fuerte:var(--grabado-luz);--pos:var(--frio-luz);
  --neg:var(--calor-luz);--acento-tx:var(--senal);
  --acento-suave:rgba(237,178,0,.14);--foco:var(--senal);
  color:var(--tx)}

.cab{display:flex;align-items:center;gap:var(--e3) var(--e5);
  flex-wrap:wrap;min-height:56px}

.marca{display:flex;align-items:center;gap:var(--e3);
  font-family:var(--display);font-weight:700;font-stretch:85%;
  font-size:var(--t-s);letter-spacing:.01em;text-transform:uppercase;
  color:var(--luz);text-decoration:none;
  /* Área táctil ≥44px sin mover el diseño */
  padding:var(--e2) var(--e2);margin:calc(var(--e2)*-1)}
.marca .troquel,.marca span:first-child{
  width:26px;height:26px;background:var(--senal);color:var(--grafito);
  display:grid;place-items:center;flex-shrink:0;border-radius:var(--r-chaflan)}
/* El pico ocupa el 66% del troquel: es el aire que necesita una silueta
   maciza para no parecer que revienta la caja. En porcentaje y no en px
   para que el troquel de 22px del móvil escale solo. */
.marca .troquel svg,.marca span:first-child svg{width:66%;height:66%;display:block}
.marca:hover{color:#fff}

/* Etiqueta de "no oficial": es honesto y evita que la web se confunda con
   la oficial de GoMining, que sería un problema de confianza. */
.no-oficial{font-family:var(--display);font-weight:500;font-stretch:78%;
  font-size:var(--t-xs);text-transform:uppercase;letter-spacing:.12em;
  color:var(--luz-2);border:1px solid #4A5157;border-radius:var(--r-chaflan);
  padding:var(--e1) var(--e2);white-space:nowrap}

.navsitio{display:flex;gap:var(--e1);margin-left:auto}
.navsitio a{display:inline-flex;align-items:center;min-height:44px;
  padding:var(--e2) var(--e3);border-radius:var(--r-chaflan);
  font-family:var(--display);font-weight:500;font-stretch:82%;
  font-size:var(--t-xs);letter-spacing:.06em;text-transform:uppercase;
  text-decoration:none;color:var(--luz-2)}
.navsitio a:hover{color:var(--luz)}
.navsitio a[aria-current=page]{background:var(--senal);color:var(--grafito);
  font-weight:700}

/* ---- SELECTOR DE IDIOMA ----
   Dos troqueles pegados: el activo se invierte igual que la pestaña activa
   del panel y que los atajos de la calculadora. Es el mismo gesto en todo
   el sitio, así que no hay que aprenderlo tres veces. */
.idiomas{display:flex;gap:1px;flex-shrink:0;
  background:var(--grafito-3);border-radius:var(--r-chaflan);overflow:hidden}
/* En la calculadora son <a> (dos archivos: index.html y en.html); en el
   panel son <button>, porque ahí el idioma se aplica en caliente sobre el
   mismo archivo. Misma pieza visual, dos elementos: la diferencia es de
   arquitectura, no de diseño. */
.idiomas a,.idiomas button{display:inline-flex;align-items:center;justify-content:center;
  position:relative;min-height:36px;min-width:40px;padding:0 var(--e2);
  background:var(--grafito-2);color:var(--luz-2);text-decoration:none;
  border:0;cursor:pointer;
  font-family:var(--display);font-weight:600;font-stretch:78%;
  font-size:var(--t-xxs);letter-spacing:.1em}
/* El objetivo táctil real llega a 48px sin engordar la pieza */
.idiomas a::before,.idiomas button::before{content:"";position:absolute;inset:-6px}
.idiomas a:hover,.idiomas button:hover{color:var(--luz)}
.idiomas a[aria-current],.idiomas button[aria-current]{background:var(--senal);
  color:var(--grafito);font-weight:700}

/* ---- SUGERENCIA DE IDIOMA ----
   Aparece solo si el navegador está en el otro idioma, y solo una vez.
   No redirige: ofrece. */
.sugerencia{background:var(--grafito-2);color:var(--luz);
  border-bottom:1px solid var(--linea);
  border-left:4px solid var(--senal);
  padding:var(--e3) var(--e5);
  display:flex;align-items:center;gap:var(--e3) var(--e4);flex-wrap:wrap;
  font-size:var(--t-s);
  --tx:var(--luz);--tx2:var(--luz-2);--linea-fuerte:var(--grabado-luz);
  --foco:var(--senal)}
.sugerencia span{flex:1;min-width:min(100%,220px)}
.sugerencia .btn-linea{color:var(--luz)}

/* ---- TELEMETRÍA ----
   Antes eran tres chips en tres filas: 190px de cromo en móvil antes de la
   primera palabra de contenido. Ahora es UNA línea de lectura de aparato,
   con su piloto de estado. */
.vivo{display:flex;align-items:center;gap:var(--e4);flex-wrap:wrap;
  width:100%;border-top:1px solid #33383E;padding:var(--e2) 0;
  font-family:var(--display);font-weight:400;font-stretch:78%;
  font-size:var(--t-xs);letter-spacing:.04em;color:var(--luz-2)}
.dato{white-space:nowrap}
.dato b{color:var(--luz);font-weight:600}
.dato.est b,.dato b.est{color:var(--calor-luz)}
.dato:last-child{margin-left:auto}

/* Piloto de estado. Lo único redondo del sitio, y se lo ha ganado. */
.led{width:6px;height:6px;border-radius:var(--r-led);flex-shrink:0;
  display:inline-block;margin-right:var(--e2);vertical-align:1px;
  background:var(--frio-luz);box-shadow:0 0 6px rgba(79,199,158,.85)}
.led.est{background:var(--calor-luz);box-shadow:0 0 6px rgba(255,122,94,.85)}

/* En móvil la cabecera medía 204px: el 26% de la pantalla gastado en cromo
   antes de la primera palabra. Tres filas compactas y medidas, no cuatro
   filas a lo que salga.
   Medido a 360px: 145px de cabecera y el h1 arrancando en 175 (antes 234).
   Se queda en dos líneas de telemetría a propósito: los datos en vivo son
   la prueba de que la calculadora no se inventa nada, y eso vale su sitio. */
@media (max-width:560px){
  .cab{gap:var(--e2);min-height:0;padding-top:var(--e2)}
  /* El texto se encoge, pero el objetivo táctil NO: el padding vertical se
     mantiene y el margen negativo lo compensa, así que la marca sigue
     midiendo 44px de alto aunque parezca de 22. */
  .marca{font-size:var(--t-xs);font-stretch:78%;gap:var(--e2);
    min-height:44px;padding:var(--e3) var(--e2);
    margin:calc(var(--e3)*-1) calc(var(--e2)*-1)}
  .marca .troquel,.marca span:first-child{width:22px;height:22px}
  .no-oficial{font-size:var(--t-xxs);letter-spacing:.1em;padding:1px var(--e2)}
  /* La navegación ocupa su fila y reparte a partes iguales; el selector de
     idioma se cuela en la misma fila por la derecha, que es donde sobra
     sitio. Medido a 360px: nav 246px + idiomas 82px = 328px justos. */
  .navsitio{flex:1;margin-left:0;gap:var(--e1)}
  .navsitio a{flex:1;justify-content:center;min-height:40px;
    padding:var(--e2);font-size:var(--t-xxs)}
  .idiomas{margin-left:var(--e2)}
  .idiomas a,.idiomas button{min-width:36px;min-height:40px;padding:0 var(--e1)}
  .sugerencia{padding:var(--e3) var(--e4)}
  .vivo{gap:var(--e3);padding:var(--e2) 0}
  .dato:last-child{margin-left:0}
}

/* Chips: los mantiene el panel en su tira plegable */
.chip{background:var(--sup-2);border:1px solid var(--linea);
  border-radius:var(--r-chaflan);padding:var(--e1) var(--e3);
  white-space:nowrap;font-family:var(--display);font-weight:400;
  font-stretch:78%;font-size:var(--t-xs)}
.chip b{color:var(--acento-tx);font-weight:600}
.chip.est b{color:var(--neg)}
.chip .manual{color:var(--pos);font-size:var(--t-xs);margin-left:var(--e1)}

/* =====================================================================
   5. BOTONES
   Piezas mecanizadas: chaflán de 3px y relieve REAL de 2px que se hunde
   al pulsar. Sustituye al filter:brightness(1.08) anterior, que sobre un
   naranja era literalmente imperceptible.
   ===================================================================== */
.btn{
  font-family:var(--display);font-weight:700;font-stretch:84%;
  font-size:var(--t-s);letter-spacing:.06em;text-transform:uppercase;
  background:var(--senal);color:var(--grafito);border:0;
  border-radius:var(--r-chaflan);padding:var(--e3) var(--e5);
  min-height:48px;cursor:pointer;text-decoration:none;
  display:inline-flex;align-items:center;justify-content:center;
  text-align:center;
  box-shadow:0 2px 0 var(--senal-honda);
  transition:transform .12s ease,box-shadow .12s ease}
.btn:hover{transform:translateY(1px);box-shadow:0 1px 0 var(--senal-honda)}
.btn:active{transform:translateY(2px);box-shadow:none}

/* Secundario. .btn-sec es el nombre que ya usaba el panel. */
.btn-linea,.btn-sec{background:transparent;color:var(--tx);
  border:1px solid var(--linea-fuerte);box-shadow:none;font-weight:600}
.btn-linea:hover,.btn-sec:hover{border-color:var(--tx);transform:none;
  box-shadow:none}
.btn-linea:active,.btn-sec:active{transform:translateY(1px)}

.btn-peligro{background:transparent;border:1px solid var(--neg);
  color:var(--neg);box-shadow:none;font-weight:600}
.btn-peligro:hover{background:var(--neg);color:var(--chapa-alta);transform:none}

/* Acción principal de un bloque CTA: a todo el ancho en móvil */
.btn-grande{width:100%;font-size:var(--t-m);padding:var(--e4) var(--e5);
  min-height:54px}
@media (min-width:520px){ .btn-grande{width:auto} }

/* Reducidos. El tamaño visual se queda compacto, pero un pseudo-elemento
   invisible amplía la zona que responde al dedo hasta ≥44×44px
   (WCAG 2.5.5 / Apple HIG). El botón es el objetivo real. */
.btn-chico{min-height:36px;padding:var(--e1) var(--e3);font-size:var(--t-xs)}
.btn-mini{min-height:32px;min-width:32px;padding:var(--e1) var(--e2);
  font-size:var(--t-xs)}
.btn-chico,.btn-mini{position:relative}
.btn-chico::before,.btn-mini::before{content:"";position:absolute;inset:-6px}
/* El hueco debe superar los 12px que suman las dos extensiones táctiles
   para que la zona de Editar nunca pise la de Borrar. */
.acciones{display:flex;gap:var(--e3);justify-content:flex-end}
/* Fila de botones. Existía nueve veces como style="display:flex;gap:.6rem"
   con tres gaps distintos; ahora es una clase con un gap del sistema. */
.botonera{display:flex;gap:var(--e3);flex-wrap:wrap;align-items:center}
.acciones .btn-mini{min-height:36px;min-width:36px}

/* =====================================================================
   6. CAMPOS — superficies hundidas
   ===================================================================== */
label{display:block;font-family:var(--display);font-weight:600;
  font-stretch:80%;font-size:var(--t-xs);letter-spacing:.08em;
  text-transform:uppercase;color:var(--tx2);margin-bottom:var(--e2)}

/* OJO con el selector: hay campos sin atributo type (`<input id="x">`), y
   `input[type=text]` NO los alcanza porque el selector de atributo no ve
   el valor implícito. Con [type=text] se quedaban en 19px de alto,
   imposibles de tocar en móvil. De ahí el :not() en lugar de listar tipos. */
input:not([type=checkbox]):not([type=range]):not([type=radio]),
select,textarea{
  width:100%;min-height:48px;
  background:var(--sup-1);color:var(--tx);
  border:1px solid var(--linea-fuerte);border-radius:var(--r-chaflan);
  padding:var(--e3) var(--e4);
  font-family:var(--dato);font-weight:600;font-stretch:100%;
  font-size:var(--t-l);font-variant-numeric:tabular-nums;
  box-shadow:inset 0 1px 3px rgba(27,30,34,.12)}
select{font-size:var(--t-s);font-weight:500;font-stretch:85%}
textarea{font-size:var(--t-s);font-weight:400}
input:focus,select:focus,textarea:focus{outline:none;
  border-color:var(--foco);box-shadow:inset 0 1px 3px rgba(27,30,34,.12),
  0 0 0 3px var(--acento-suave)}

input[type=range]{width:100%;min-height:44px;accent-color:var(--senal);
  background:transparent;padding:0;border:none;box-shadow:none;
  margin-top:var(--e2)}
input[type=checkbox]{width:22px;height:22px;min-height:0;
  accent-color:var(--senal);flex-shrink:0;padding:0;box-shadow:none}

.campos{display:grid;gap:var(--e5);
  grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.campo label{display:block}
/* .fila es la rejilla que ya usaba el panel */
.fila{display:flex;gap:var(--e3);flex-wrap:wrap}
.fila>div{flex:1;min-width:150px}

/* ---- REBAJE — el bloque de controles va HUNDIDO en la chapa ----
   Sustituye a las tarjetas con borde de 1px. La jerarquía la da el
   relieve, no el color: entrada = hundido, salida = elevado. */
.rebaje{background:var(--sup-2);border-radius:var(--r-chaflan);
  padding:var(--e5);box-shadow:var(--relieve)}
.rebaje > * + *{margin-top:var(--e5)}

/* Atajos de valor bajo un campo. .preset es el nombre que usaba el panel. */
.atajos,.presets{display:flex;flex-wrap:wrap;gap:var(--e2);margin-top:var(--e3)}
.atajo,.preset{background:var(--sup-1);border:1px solid var(--linea-fuerte);
  color:var(--tx2);border-radius:var(--r-chaflan);
  padding:var(--e2) var(--e3);min-height:44px;min-width:44px;cursor:pointer;
  font-family:var(--dato);font-weight:500;font-stretch:80%;
  font-size:var(--t-xs);letter-spacing:.04em}
.atajo:hover,.preset:hover{color:var(--tx);border-color:var(--tx)}
/* El estado activo es un troquel: la pieza se invierte. Se ve de lejos y
   no depende de distinguir dos tonos parecidos. */
.atajo[aria-pressed=true],.preset.activo{
  background:var(--grafito);border-color:var(--grafito);color:var(--senal);
  font-weight:700}

.interruptor{display:flex;align-items:flex-start;gap:var(--e3);
  padding:var(--e4);background:var(--sup-2);border-radius:var(--r-chaflan);
  box-shadow:var(--relieve);cursor:pointer}
.interruptor div{font-size:var(--t-s)}

/* Icono de ayuda: explica cada término en lenguaje llano */
.ayuda{display:inline-grid;place-items:center;width:20px;height:20px;
  border:1px solid var(--tx2);border-radius:var(--r-led);
  font-family:var(--display);font-size:var(--t-xs);color:var(--tx2);
  cursor:help;vertical-align:middle;margin-left:var(--e1)}
.ayuda:hover,.ayuda:focus{border-color:var(--tx);color:var(--tx)}

/* =====================================================================
   7. PLACAS, TARJETAS Y CINTAS
   ---------------------------------------------------------------------
   Antes había SIETE componentes con nombres distintos y exactamente el
   mismo aspecto (fondo + borde 1px + radio 14). Ahora hay tres niveles,
   y el nivel se lee sin leer el texto:

     .placa  — ELEVADA. Solo el resultado. Como mucho una por pantalla.
     .card   — superficie plana. Contenedor de trabajo del panel.
     .cinta  — plana y SIN caja. Dato de contexto, separado por reglas.
   ===================================================================== */

/* ---- LA PLACA DE CARACTERÍSTICAS (elemento firma) ---- */
/* AUTOCRÍTICA — aquí había un segundo rayado de aluminio, el mismo que
   lleva el <body>. Quitado. Sobre una superficie que ya es casi blanca no
   se veía, y encima competía con la textura de la chapa de debajo: si la
   placa tiene el mismo grano que la plancha en la que está apoyada, deja
   de leerse como una pieza aparte, que es justo lo que tiene que hacer.
   La placa es lisa a propósito. */
.placa{background:var(--chapa-alta);color:var(--tinta);
  border-radius:var(--r-chaflan);padding:var(--e6) var(--e5) var(--e5);
  position:relative;box-shadow:var(--elevado);
  /* La placa es SIEMPRE de aluminio, esté sobre chapa o sobre chasis:
     es una pieza atornillada, no una superficie del contenedor. */
  --tx:var(--tinta);--tx2:var(--tinta-2);--linea:var(--grabado);
  --pos:var(--frio);--neg:var(--calor)}

/* Cuatro tornillos. Es lo que la sujeta al chasis. */
.tornillo{position:absolute;width:9px;height:9px;border-radius:var(--r-led);
  background:radial-gradient(circle at 35% 30%,#F2F3F3,#A7ADB1 60%,#7C8388);
  box-shadow:0 1px 1px rgba(255,255,255,.85)}
.tornillo::after{content:"";position:absolute;inset:0;margin:auto;
  width:5px;height:1px;background:#6B7276;transform:rotate(28deg)}
.tornillo.a{top:10px;left:10px}    .tornillo.b{top:10px;right:10px}
.tornillo.c{bottom:10px;left:10px} .tornillo.d{bottom:10px;right:10px}

/* Fila grabada con línea de puntos: la convención de una ficha técnica.
   La línea une la etiqueta con su valor y hace innecesario alinear a
   ojo dos columnas. */
.fila-dato{display:flex;align-items:baseline;gap:var(--e2);
  font-family:var(--dato);font-size:var(--t-s);font-weight:400;
  font-stretch:84%;padding:var(--e2) 0}
.fila-dato .k{font-weight:500;font-stretch:80%;font-size:var(--t-xs);
  letter-spacing:.06em;text-transform:uppercase;color:var(--tx2);
  white-space:nowrap}
.fila-dato .puntos{flex:1;border-bottom:1px dotted var(--linea);
  transform:translateY(-3px)}
.fila-dato .v{font-weight:600;font-stretch:88%;
  font-variant-numeric:tabular-nums;white-space:nowrap}
.fila-dato.mas .v{color:var(--pos)}
.fila-dato.menos .v{color:var(--neg)}
.placa-sep{height:1px;background:var(--linea);margin:var(--e4) 0}

/* La VENTANA troquelada: la cifra protagonista está HUNDIDA en el metal.
   Es el único sitio del proyecto donde la mono va a ancho 112,5%. */
.ventana{background:var(--chapa-honda);border-radius:var(--r-chaflan);
  padding:var(--e4) var(--e3) var(--e3);text-align:center;
  box-shadow:inset 0 3px 6px rgba(27,30,34,.24),
             inset 0 -1px 0 rgba(255,255,255,.7)}
.ventana .et{font-family:var(--display);font-weight:600;font-stretch:78%;
  font-size:var(--t-xs);letter-spacing:.2em;text-transform:uppercase;
  color:var(--tx2)}
.ventana .vl{font-family:var(--dato);font-weight:700;font-stretch:112.5%;
  font-size:clamp(2rem,7vw,var(--t-4xl));line-height:1.05;
  font-variant-numeric:tabular-nums;margin:var(--e2) 0 var(--e1);
  /* Grabado: luz por debajo. El número está hundido, no impreso. */
  text-shadow:0 1px 0 rgba(255,255,255,.8)}
.ventana .vl.pos{color:var(--frio)} .ventana .vl.neg{color:var(--calor)}
.ventana .sub{font-family:var(--dato);font-weight:400;font-stretch:80%;
  font-size:var(--t-xs);color:var(--tx2);font-variant-numeric:tabular-nums}

/* ---- Tarjeta plana: contenedor de trabajo (lo usa el panel) ---- */
.card{background:var(--sup-1);border:1px solid var(--linea);
  border-radius:var(--r-chaflan);padding:var(--e4) var(--e5)}
.card.destacada{border-color:var(--senal);border-left-width:3px}
.grid{display:grid;gap:var(--e3)}

/* ---- Cintas: dato de contexto SIN caja ----
   Sustituye a las cuatro .metrica que competían con el resultado y
   ganaban por volumen. Aquí el dato secundario parece secundario. */
.cintas{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));
  border-top:1px solid var(--linea);border-bottom:1px solid var(--linea)}
.cinta{padding:var(--e4) var(--e4) var(--e4) 0}
.cinta + .cinta{border-left:1px solid var(--linea);padding-left:var(--e4)}
.cinta .et{font-family:var(--display);font-weight:500;font-stretch:78%;
  font-size:var(--t-xs);letter-spacing:.14em;text-transform:uppercase;
  color:var(--tx2)}
.cinta .vl{font-family:var(--dato);font-weight:600;font-stretch:92%;
  font-size:var(--t-xl);font-variant-numeric:tabular-nums;margin-top:var(--e1)}
.cinta .sub{font-size:var(--t-xs);color:var(--tx2)}
@media (max-width:560px){
  .cintas{grid-template-columns:1fr}
  .cinta{padding:var(--e3) 0}
  .cinta + .cinta{border-left:0;border-top:1px solid var(--linea);padding-left:0}
}

/* =====================================================================
   8. TABLAS
   ===================================================================== */
table{width:100%;border-collapse:collapse;font-size:var(--t-s)}
th,td{padding:var(--e2) var(--e3);text-align:right;
  border-bottom:1px solid var(--linea);white-space:nowrap}
th{font-family:var(--display);font-weight:600;font-stretch:78%;
  font-size:var(--t-xs);letter-spacing:.1em;text-transform:uppercase;
  color:var(--tx2)}
th:first-child,td:first-child{text-align:left}
/* Las cifras de tabla van en la mono ESTRECHA: a ancho normal Martian Mono
   es un 27% más ancha que la mono del sistema y las columnas no cabrían. */
td{font-family:var(--dato);font-weight:500;font-stretch:75%;
  font-variant-numeric:tabular-nums}
td:first-child{font-family:var(--cuerpo);font-weight:400;font-stretch:normal}

/* Scroll horizontal.
   Aquí había un degradado amarillo en el borde derecho que hacía de pista
   de "queda tabla por ver". Fuera: se leía como una mancha, no como una
   pista, y era el mismo efecto que ensuciaba tres sitios más.
   La pista ahora la da la propia barra, que en vez de la barra gorda del
   sistema es una pletina fina del sistema de diseño. Se ve que hay barra,
   se ve cuánto queda, y no mancha nada. */
.tabla-scroll{overflow-x:auto;position:relative;
  padding-bottom:var(--e1);
  scrollbar-width:thin;
  scrollbar-color:var(--linea-fuerte) transparent}
.tabla-scroll::-webkit-scrollbar{height:8px}
.tabla-scroll::-webkit-scrollbar-track{background:var(--sup-2);
  border-radius:var(--r-chaflan)}
.tabla-scroll::-webkit-scrollbar-thumb{background:var(--linea-fuerte);
  border-radius:var(--r-chaflan)}
.tabla-scroll::-webkit-scrollbar-thumb:hover{background:var(--senal)}

/* ---- TABLAS QUE SE VUELVEN TARJETAS EN MÓVIL ----
   Una tabla de 11 columnas en 307px de ancho obligaba a 630px de scroll
   horizontal, y los botones de editar y borrar quedaban SIEMPRE fuera de
   la pantalla. Con class="tarjetas", cada fila pasa a ser una tarjeta y
   cada celda una línea etiqueta/valor. La etiqueta sale del atributo
   data-et que pone el JS al renderizar. */
@media (max-width:640px){
  table.tarjetas,table.tarjetas tbody,table.tarjetas tr,table.tarjetas td{
    display:block;width:100%}
  table.tarjetas thead{display:none}
  table.tarjetas{font-size:var(--t-s)}

  table.tarjetas tr{background:var(--sup-2);border:1px solid var(--linea);
    border-radius:var(--r-chaflan);padding:var(--e3);margin-bottom:var(--e2)}
  table.tarjetas tr.tr-click:hover td{background:none}

  table.tarjetas td{display:flex;justify-content:space-between;gap:var(--e4);
    border:none;padding:var(--e1) 0;text-align:right;white-space:normal}
  table.tarjetas td::before{content:attr(data-et);color:var(--tx2);
    font-family:var(--display);font-weight:500;font-stretch:78%;
    font-size:var(--t-xs);letter-spacing:.06em;text-transform:uppercase;
    text-align:left;flex-shrink:0}

  /* La primera celda es el título de la tarjeta */
  table.tarjetas td:first-child{font-family:var(--display);font-weight:700;
    font-stretch:80%;font-size:var(--t-s);letter-spacing:.02em;
    text-transform:uppercase;color:var(--tx);text-align:left;
    padding-bottom:var(--e2);margin-bottom:var(--e1);
    border-bottom:1px solid var(--linea)}
  table.tarjetas td:first-child::before{content:none}

  /* Celdas vacías (p. ej. una nota sin contenido) no dejan huecos */
  table.tarjetas td:empty{display:none}

  /* Los botones de acción, al final y a tamaño táctil de verdad */
  table.tarjetas td.acciones{justify-content:flex-end;gap:var(--e2);
    padding-top:var(--e3);margin-top:var(--e1);
    border-top:1px solid var(--linea)}
  table.tarjetas td.acciones::before{content:none}
  table.tarjetas td.acciones .btn-mini{min-height:44px;min-width:52px;
    font-size:var(--t-s)}

  /* Sin scroll: ya no hay nada que desbordar */
  .tabla-scroll.sin-scroll{overflow-x:visible;background:none}
}

/* =====================================================================
   9. AVISOS
   ===================================================================== */
/* Cinta de señalización: barra amarilla a la izquierda, como el marcado
   de una zona de atención. No es una tarjeta con gradiente. */
.aviso{background:var(--sup-1);border:1px solid var(--linea);
  border-left:4px solid var(--senal);border-radius:var(--r-chaflan);
  padding:var(--e3) var(--e4);font-size:var(--t-s);margin-bottom:var(--e3)}
.descargo{background:var(--sup-1);border:1px solid var(--linea);
  border-left:4px solid var(--linea-fuerte);border-radius:var(--r-chaflan);
  padding:var(--e4) var(--e5);font-size:var(--t-s);color:var(--tx2)}
.estimado{color:var(--neg)!important}

/* Aviso flotante no bloqueante (sustituye a alert) */
.aviso-flotante{position:fixed;left:50%;bottom:var(--e4);
  transform:translate(-50%,150%);max-width:min(560px,92vw);z-index:80;
  padding:var(--e3) var(--e4);border-radius:var(--r-chaflan);
  font-size:var(--t-s);box-shadow:0 8px 30px rgba(27,30,34,.45);
  opacity:0;pointer-events:none;
  transition:transform .25s ease,opacity .25s ease;
  background:var(--grafito);color:var(--luz)}
.aviso-flotante.visible{transform:translate(-50%,0);opacity:1;
  pointer-events:auto}
.aviso-error{border-left:4px solid var(--calor-luz)}
.aviso-ok{border-left:4px solid var(--frio-luz)}

footer{background:var(--grafito);color:var(--luz-2);
  font-family:var(--display);font-weight:400;font-stretch:78%;
  font-size:var(--t-xs);letter-spacing:.06em;line-height:1.7;
  padding:var(--e7) 0 var(--e8);text-align:center}

/* =====================================================================
   10. SUELO DE CALIDAD — no negociable
   ===================================================================== */

/* El atributo hidden oculta vía display:none de la hoja del navegador, así
   que CUALQUIER display propio (grid, flex, inline-block…) lo anula en
   silencio. Sin esta regla los elementos "ocultos" siguen ocupando
   espacio. Ya provocó que una gráfica se solapara con un CTA y que el
   recibo mostrara una línea de descuento obsoleta. */
[hidden]{display:none!important}

/* El foco NO puede ser amarillo sobre chapa: daría 1,39:1 y sería
   invisible. Sobre claro el anillo es grafito (12,1:1) con halo amarillo;
   dentro del chasis --foco ya vale --senal (8,74:1). */
:focus-visible{outline:3px solid var(--foco);outline-offset:2px;
  border-radius:var(--r-chaflan)}
.chapa :focus-visible,body:not(.chasis) :focus-visible{
  box-shadow:0 0 0 6px rgba(237,178,0,.45)}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms!important;
    animation-iteration-count:1!important;transition-duration:.01ms!important;
    scroll-behavior:auto!important}
}

/* Desde 360px: el rayado del aluminio se apaga (a esta densidad de píxel
   solo añade ruido) y los pasos grandes de espaciado se acortan. */
@media (max-width:400px){
  html{font-size:15px}
  body{background-image:none}
  .envoltorio{padding:0 var(--e4)}
  .seccion{padding:var(--e6) 0}
  .rebaje{padding:var(--e4)}
}
