/*! ============================================================
 *  NERV UI · v1.0.0
 *  Sistema de diseño de terminal (estética MAGI / Neon Genesis Evangelion).
 *  CSS puro, framework-agnóstico. MIT License.
 *  Homenaje fan-made — no afiliado a Khara/Gainax. Ver README.
 * ============================================================ */

/* ---------- Tokens ---------- */
:root {
  --nerv-bg:        #050503;
  --nerv-panel:     #0a0a07;
  --nerv-amber:     #FF7A18;
  --nerv-amber-hi:  #FFB300;
  --nerv-amber-dim: #8a4d16;
  --nerv-red:       #F0321E;
  --nerv-green:     #35FFA0;
  --nerv-line:      rgba(255,122,24,.32);
  --nerv-line-hi:   rgba(255,179,0,.70);
  --nerv-mono:      'Courier New', Consolas, 'SF Mono', 'DejaVu Sans Mono', monospace;
  --nerv-cut:       14px;   /* tamaño del bisel de esquina */
  --nerv-glow:      0 0 18px rgba(255,122,24,.35);
}

/* ---------- Base ---------- */
.nerv {
  font-family: var(--nerv-mono);
  color: var(--nerv-amber);
  letter-spacing: .5px;
  line-height: 1.5;
}
.nerv *, .nerv *::before, .nerv *::after { box-sizing: border-box; }
.nerv a { color: var(--nerv-amber-hi); }
.nerv ::selection { background: var(--nerv-amber); color: #000; }

/* Fondo oscuro con rejilla hexagonal (A.T. Field). Aplica a body o a un contenedor. */
.nerv-bg {
  background-color: var(--nerv-bg);
  background-image:
    radial-gradient(circle at 50% 0%, rgba(255,122,24,.06), transparent 60%),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='56' height='64' viewBox='0 0 56 64'%3E%3Cpath d='M28 0l24 14v28L28 56 4 42V14z' fill='none' stroke='%23FF7A18' stroke-opacity='0.05' stroke-width='1'/%3E%3C/svg%3E");
}

/* Scanlines CRT. Añade la clase a <body>. Respeta prefers-reduced-motion. */
.nerv-scanlines { position: relative; }
.nerv-scanlines::after {
  content: ''; position: fixed; inset: 0; pointer-events: none; z-index: 9998;
  background: repeating-linear-gradient(0deg, rgba(0,0,0,.22) 0 1px, transparent 1px 3px);
  mix-blend-mode: multiply;
}
@media (prefers-reduced-motion: no-preference) {
  .nerv-scanlines::after { animation: nerv-flick 6s steps(60) infinite; }
}
@keyframes nerv-flick { 0%,100% { opacity:.6 } 50% { opacity:.85 } }

/* ---------- Tipografía ---------- */
.nerv-kicker {
  display: inline-block; font-size: .72rem; letter-spacing: 4px;
  color: var(--nerv-amber-dim); text-transform: uppercase;
}
.nerv-title {
  font-size: clamp(1.8rem, 5.5vw, 3.4rem); letter-spacing: 2px; line-height: 1.02;
  color: var(--nerv-amber-hi); text-shadow: var(--nerv-glow); margin: 8px 0;
}
.nerv-eyebrow { font-size: .72rem; letter-spacing: 3px; color: var(--nerv-amber-dim); }
.nerv-kata { font-size: .7em; opacity: .6; letter-spacing: 2px; }   /* acento katakana */
.nerv-dim { color: var(--nerv-amber-dim); }
.nerv-hi  { color: var(--nerv-amber-hi); }
.nerv-mono { font-family: var(--nerv-mono); }

/* ---------- Franja de peligro (hazard) ---------- */
.nerv-hazard {
  height: 16px; width: 100%;
  background: repeating-linear-gradient(-45deg, var(--nerv-green) 0 14px, #0a0a07 14px 28px);
  opacity: .85;
}
.nerv-hazard--amber { background: repeating-linear-gradient(-45deg, var(--nerv-amber) 0 14px, #0a0a07 14px 28px); }
.nerv-hazard--red   { background: repeating-linear-gradient(-45deg, var(--nerv-red)   0 14px, #0a0a07 14px 28px); }

/* ---------- Panel biselado ---------- */
.nerv-panel {
  position: relative; background: var(--nerv-panel);
  border: 1px solid var(--nerv-line);
  clip-path: polygon(var(--nerv-cut) 0, 100% 0, 100% calc(100% - var(--nerv-cut)),
    calc(100% - var(--nerv-cut)) 100%, 0 100%, 0 var(--nerv-cut));
  padding: 18px;
}
/* Con etiqueta: <div class="nerv-panel nerv-panel--tagged" data-tag="TÍTULO"> */
.nerv-panel--tagged { padding-top: 30px; }
.nerv-panel--tagged::before {
  content: attr(data-tag); position: absolute; top: 9px; left: calc(var(--nerv-cut) + 8px);
  font-size: .68rem; letter-spacing: 2px; color: var(--nerv-amber-hi);
}
.nerv-panel--tagged::after {
  content: ''; position: absolute; top: 26px; left: 16px; right: 16px; height: 1px;
  background: var(--nerv-line);
}

/* ---------- Botones ---------- */
.nerv-btn {
  display: inline-block; cursor: pointer; font-family: var(--nerv-mono);
  font-size: 1rem; letter-spacing: 3px; font-weight: 700;
  color: #050503; background: var(--nerv-amber); border: none; padding: 14px 22px;
  text-decoration: none; transition: .12s;
  clip-path: polygon(12px 0, 100% 0, 100% calc(100% - 12px), calc(100% - 12px) 100%, 0 100%, 0 12px);
}
.nerv-btn:hover { background: var(--nerv-amber-hi); box-shadow: 0 0 22px rgba(255,179,0,.5); }
.nerv-btn:disabled { opacity: .5; cursor: wait; }
.nerv-btn--ghost {
  background: transparent; color: var(--nerv-amber-hi);
  border: 1px solid var(--nerv-amber); font-weight: 400; letter-spacing: 1px;
  padding: 10px 16px; font-size: .85rem;
  clip-path: polygon(8px 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%, 0 8px);
}
.nerv-btn--ghost:hover { background: var(--nerv-amber); color: #000; box-shadow: none; }

/* ---------- Campos (input / select) ---------- */
.nerv-field {
  width: 100%; font-family: var(--nerv-mono); font-size: .95rem; letter-spacing: 1px;
  color: var(--nerv-amber-hi); background: #060604;
  border: 1px solid var(--nerv-line); padding: 11px 12px;
  clip-path: polygon(8px 0, 100% 0, 100% calc(100% - 8px), calc(100% - 8px) 100%, 0 100%, 0 8px);
}
.nerv-field:focus {
  outline: none; border-color: var(--nerv-amber-hi);
  box-shadow: 0 0 0 1px var(--nerv-amber-hi), 0 0 14px rgba(255,179,0,.25);
}
.nerv-label { display: block; font-size: .72rem; letter-spacing: 1px; color: var(--nerv-amber-dim); margin: 0 0 6px; }

/* ---------- LED de estado ---------- */
.nerv-led { display: inline-flex; align-items: center; gap: 6px; font-size: .72rem; letter-spacing: 1px; }
.nerv-led::before {
  content: ''; width: 8px; height: 8px; border-radius: 50%;
  background: var(--nerv-green); box-shadow: 0 0 8px var(--nerv-green);
}
.nerv-led--warn::before  { background: var(--nerv-amber-hi); box-shadow: 0 0 8px var(--nerv-amber-hi); }
.nerv-led--alert::before { background: var(--nerv-red);      box-shadow: 0 0 8px var(--nerv-red); }

/* ---------- Nodo tipo MAGI ---------- */
.nerv-node {
  position: relative; text-align: center; padding: 10px; background: #070705;
  border: 1px solid var(--nerv-line);
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
}
.nerv-node b { display: block; color: var(--nerv-amber-hi); letter-spacing: 2px; font-size: .82rem; }
.nerv-node small { display: block; color: var(--nerv-amber-dim); font-size: .62rem; line-height: 1.3; margin-top: 4px; }

/* ---------- Caja de alerta ---------- */
.nerv-alert {
  position: relative; text-align: center; padding: 22px; background: var(--nerv-panel);
  border: 2px solid var(--nerv-amber);
  clip-path: polygon(20px 0, 100% 0, 100% calc(100% - 20px), calc(100% - 20px) 100%, 0 100%, 0 20px);
}
.nerv-alert__title { font-size: clamp(1.4rem, 5vw, 2.2rem); letter-spacing: 2px; color: var(--nerv-amber-hi); margin: 6px 0; }
.nerv-alert--blue  { border-color: var(--nerv-red); }
.nerv-alert--blue  .nerv-alert__title { color: var(--nerv-red); }
.nerv-alert--green { border-color: var(--nerv-green); }
.nerv-alert--green .nerv-alert__title { color: var(--nerv-green); }

/* ---------- Barra / medidor (gauge) ---------- */
.nerv-gauge { position: relative; }
.nerv-gauge__track {
  position: relative; height: 24px; border: 1px solid var(--nerv-line);
  background: linear-gradient(90deg, var(--nerv-red), var(--nerv-amber), var(--nerv-green));
}
.nerv-gauge__marker { position: absolute; top: -8px; width: 3px; height: 40px; background: #fff; box-shadow: 0 0 0 1px #000; }
.nerv-gauge__scale { display: flex; justify-content: space-between; font-size: .66rem; color: var(--nerv-amber-dim); margin-top: 8px; }

/* Barra de rango (P25 / mediana / P75) */
.nerv-range__track {
  position: relative; height: 26px; border: 1px solid var(--nerv-line); background: #060604;
  background-image: repeating-linear-gradient(90deg, transparent 0 9px, rgba(255,122,24,.12) 9px 10px);
}
.nerv-range__mid { position: absolute; top: -6px; bottom: -6px; width: 2px; background: var(--nerv-amber-hi); box-shadow: 0 0 10px var(--nerv-amber-hi); }

/* ---------- Chip / etiqueta ---------- */
.nerv-tag {
  display: inline-block; font-size: .68rem; letter-spacing: 2px; padding: 4px 10px;
  color: var(--nerv-amber-hi); border: 1px solid var(--nerv-line); background: #070705;
}

/* ---------- Utilidades de animación ---------- */
.nerv-blink { animation: nerv-blink 1.1s steps(2) infinite; }
@keyframes nerv-blink { 50% { opacity: .15 } }
@media (prefers-reduced-motion: reduce) {
  .nerv-blink { animation: none; }
}
