/* Pantallas de acceso (login, verificación en dos pasos, instalación) — estilo centro de comando */
:root {
  --fondo: #020617;
  --teal: 45, 212, 191;
  --cyan: 34, 211, 238;
  --texto: #e2e8f0;
  --suave: #94a3b8;
  --tenue: #475569;
  --borde: rgba(148, 163, 184, .12);
}
* { box-sizing: border-box; }
[hidden] { display: none !important; }
html, body { margin: 0; min-height: 100%; }
body.acceso {
  background: var(--fondo); color: var(--texto); font-family: "Space Grotesk", system-ui, sans-serif;
  -webkit-font-smoothing: antialiased; overflow-x: hidden;
}
a { color: rgb(var(--teal)); }
.icon { width: 18px; height: 18px; flex-shrink: 0; }

/* Fondo */
#red { position: fixed; inset: 0; z-index: 0; pointer-events: none; }
.rejilla { position: fixed; inset: 0; z-index: 0; pointer-events: none;
  background-image: linear-gradient(rgba(var(--teal), .04) 1px, transparent 1px), linear-gradient(90deg, rgba(var(--teal), .04) 1px, transparent 1px);
  background-size: 56px 56px; mask-image: radial-gradient(ellipse at 40% 45%, #000 25%, transparent 75%); }
.luz { position: fixed; border-radius: 50%; filter: blur(130px); pointer-events: none; z-index: 0; }
.luz-1 { width: 620px; height: 620px; background: rgba(var(--teal), .18); top: -180px; left: -120px; animation: deriva 14s ease-in-out infinite alternate; }
.luz-2 { width: 520px; height: 520px; background: rgba(var(--cyan), .12); bottom: -200px; right: -100px; animation: deriva 18s ease-in-out infinite alternate-reverse; }
@keyframes deriva { to { transform: translate(80px, 60px) scale(1.1); } }

/* Distribución */
.escenario { position: relative; z-index: 1; min-height: 100vh; display: grid; grid-template-columns: 1.1fr minmax(380px, 460px);
  align-items: center; gap: 48px; max-width: 1240px; margin: 0 auto; padding: 32px 40px; }

/* Panel de marca */
.marca { display: flex; flex-direction: column; align-items: center; text-align: center; }
.estado { font-family: "JetBrains Mono", monospace; font-size: 11px; letter-spacing: .25em; text-transform: uppercase; color: rgba(var(--teal), .85);
  border: 1px solid rgba(var(--teal), .25); background: rgba(var(--teal), .05); padding: 7px 14px; border-radius: 999px; display: inline-flex; align-items: center; gap: 10px; }
.punto { width: 7px; height: 7px; border-radius: 50%; background: rgb(var(--teal)); box-shadow: 0 0 10px rgb(var(--teal)); animation: latir 1.6s ease-in-out infinite; }
@keyframes latir { 50% { opacity: .3; } }

.nucleo { position: relative; width: 340px; height: 340px; margin: 44px 0 30px; display: grid; place-items: center; }
.anillo { position: absolute; border-radius: 50%; border: 1px solid rgba(var(--teal), .25); }
.a1 { inset: 0; border-style: dashed; border-color: rgba(var(--teal), .22); animation: girar 40s linear infinite; }
.a2 { inset: 34px; border-color: rgba(var(--cyan), .3); border-top-color: rgba(var(--cyan), .95); border-width: 2px; animation: girar 7s linear infinite; filter: drop-shadow(0 0 6px rgba(var(--cyan), .6)); }
.a3 { inset: 70px; border-color: rgba(var(--teal), .18); border-bottom-color: rgba(var(--teal), .9); border-width: 2px; animation: girar 11s linear infinite reverse; }
.orbita { position: absolute; inset: 14px; animation: girar 9s linear infinite; }
.orbita span { position: absolute; top: -5px; left: 50%; width: 10px; height: 10px; border-radius: 50%; background: rgb(var(--teal)); box-shadow: 0 0 18px 4px rgba(var(--teal), .7); }
.orbita.o2 { inset: 52px; animation-duration: 14s; animation-direction: reverse; }
.orbita.o2 span { background: rgb(var(--cyan)); box-shadow: 0 0 18px 4px rgba(var(--cyan), .7); width: 7px; height: 7px; }
@keyframes girar { to { transform: rotate(360deg); } }
.nucleo-logo { width: 150px; height: 150px; object-fit: cover; border-radius: 34px; position: relative;
  box-shadow: 0 0 0 1px rgba(var(--teal), .35), 0 0 70px -6px rgba(var(--teal), .65), 0 30px 60px -20px #000; animation: flotar 6s ease-in-out infinite; }
@keyframes flotar { 50% { transform: translateY(-10px); } }

.marca-titulo { margin: 0; font-size: 44px; letter-spacing: .14em; font-weight: 700; font-family: "JetBrains Mono", monospace; color: rgb(var(--teal));
  text-shadow: 0 0 30px rgba(var(--teal), .45); }
.marca-titulo span { color: #fff; font-weight: 400; }
.marca-sub { margin: 6px 0 30px; color: var(--suave); letter-spacing: .3em; text-transform: uppercase; font-size: 12px; }
.chequeo { list-style: none; padding: 0; margin: 0; display: grid; gap: 10px; text-align: left; }
.chequeo li { display: flex; align-items: center; gap: 12px; font-size: 14px; color: #cbd5e1; opacity: 0; transform: translateX(-12px);
  animation: entrar .6s var(--d) cubic-bezier(.2,.7,.2,1) forwards; }
.ok { width: 22px; height: 22px; border-radius: 7px; display: grid; place-items: center; font-size: 12px; font-weight: 700; color: #042f2e;
  background: rgb(var(--teal)); box-shadow: 0 0 14px rgba(var(--teal), .6); }
@keyframes entrar { to { opacity: 1; transform: none; } }

/* Tarjeta */
.tarjeta { position: relative; width: 100%; max-width: 460px; border-radius: 28px; animation: aparecer .8s cubic-bezier(.2,.7,.2,1) both; }
@keyframes aparecer { from { opacity: 0; transform: translateY(24px) scale(.97); } }
.tarjeta-borde { position: absolute; inset: 0; border-radius: inherit; padding: 1px; pointer-events: none; overflow: hidden;
  -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; mask-composite: exclude; }
.tarjeta-borde::before { content: ""; position: absolute; inset: -60%; animation: girar 6s linear infinite;
  background: conic-gradient(from 0deg, transparent 0 55%, rgba(var(--teal), .9) 70%, rgba(var(--cyan), .9) 80%, transparent 92%); }
.tarjeta-cuerpo { position: relative; border-radius: inherit; padding: 30px 32px 22px;
  background: linear-gradient(160deg, rgba(15, 23, 42, .82), rgba(2, 6, 23, .9)); backdrop-filter: blur(22px) saturate(140%); -webkit-backdrop-filter: blur(22px) saturate(140%);
  border: 1px solid var(--borde); box-shadow: 0 40px 80px -30px #000, inset 0 1px 0 rgba(255, 255, 255, .05); }
@media (max-width: 480px) { .tarjeta-cuerpo { padding: 24px 20px 18px; } }

.tarjeta-top { display: flex; justify-content: space-between; align-items: center; }
.mini-marca { display: flex; align-items: center; gap: 10px; font-family: "JetBrains Mono", monospace; font-size: 14px; letter-spacing: .14em; color: rgb(var(--teal)); font-weight: 600; }
.mini-marca img { width: 30px; height: 30px; border-radius: 8px; }
.mini-marca b { color: #fff; font-weight: 400; }
@media (min-width: 961px) { .mini-marca { visibility: hidden; } }
.lang { display: flex; padding: 3px; border-radius: 10px; background: rgba(2, 6, 23, .6); border: 1px solid var(--borde); }
.lang a { padding: 5px 10px; border-radius: 7px; font-size: 12px; font-weight: 600; text-decoration: none; color: var(--suave); }
.lang a.on { background: rgba(var(--teal), .16); color: #99f6e4; }

.etiqueta { margin-top: 26px; display: inline-flex; align-items: center; gap: 8px; font-family: "JetBrains Mono", monospace; font-size: 10.5px;
  letter-spacing: .28em; text-transform: uppercase; color: rgba(var(--teal), .85); }
.etiqueta span { width: 18px; height: 2px; background: rgb(var(--teal)); box-shadow: 0 0 8px rgb(var(--teal)); }
.tarjeta h1 { font-size: 30px; line-height: 1.15; margin: 10px 0 6px; font-weight: 700; letter-spacing: -.01em;
  background: linear-gradient(100deg, #fff 30%, #99f6e4); -webkit-background-clip: text; background-clip: text; color: transparent; }
.muted { color: var(--suave); margin: 0 0 4px; font-size: 14.5px; line-height: 1.55; }
.hint { color: var(--tenue); font-size: 12.5px; font-weight: 400; }

/* Formulario */
.form { display: grid; gap: 16px; margin-top: 22px; }
.form label { display: grid; gap: 8px; font-size: 12px; font-weight: 600; color: var(--suave); letter-spacing: .06em; text-transform: uppercase; }
.campo { position: relative; display: flex; align-items: center; }
.campo > .icon { position: absolute; left: 15px; color: var(--tenue); transition: color .2s; pointer-events: none; }
.form input { width: 100%; font: inherit; font-size: 15.5px; text-transform: none; letter-spacing: normal; color: #f1f5f9;
  background: rgba(2, 6, 23, .65); border: 1px solid var(--borde); border-radius: 14px; padding: 14px 15px; outline: none;
  transition: border-color .2s, box-shadow .2s, background .2s; }
.campo input { padding-left: 46px; }
.campo input[type=password], .campo input#clave { padding-right: 48px; }
.form input:hover { border-color: rgba(148, 163, 184, .25); }
.form input:focus { border-color: rgba(var(--teal), .7); background: rgba(2, 6, 23, .85); box-shadow: 0 0 0 4px rgba(var(--teal), .12), 0 0 24px -6px rgba(var(--teal), .5); }
.campo:focus-within > .icon { color: rgb(var(--teal)); }
.form input::placeholder { color: var(--tenue); }
.input-codigo { font-family: "JetBrains Mono", monospace !important; font-size: 26px !important; letter-spacing: .4em !important; text-align: center; padding: 16px !important; }
.ver-clave { position: absolute; right: 8px; background: none; border: 0; color: var(--tenue); padding: 8px; border-radius: 9px; cursor: pointer; display: grid; place-items: center; }
.ver-clave:hover { color: #e2e8f0; background: rgba(255, 255, 255, .05); }
.aviso-mayus { font-size: 12px; color: #fbbf24; text-transform: none; letter-spacing: 0; font-weight: 500; }

/* Botones */
.btn { font: inherit; cursor: pointer; border: 0; display: inline-flex; align-items: center; justify-content: center; gap: 10px; text-decoration: none; }
.btn-primary { position: relative; overflow: hidden; margin-top: 6px; padding: 15px 20px; border-radius: 14px; font-size: 16px; font-weight: 700; color: #042f2e;
  background: linear-gradient(100deg, rgb(var(--teal)), rgb(var(--cyan))); box-shadow: 0 12px 34px -10px rgba(var(--teal), .75); transition: transform .15s, box-shadow .2s, filter .2s; }
.btn-primary::after { content: ""; position: absolute; inset: 0; transform: translateX(-120%);
  background: linear-gradient(100deg, transparent 30%, rgba(255, 255, 255, .55) 50%, transparent 70%); transition: transform .8s; }
.btn-primary:hover { filter: brightness(1.08); box-shadow: 0 16px 40px -10px rgba(var(--teal), .95); }
.btn-primary:hover::after { transform: translateX(120%); }
.btn-primary:active { transform: translateY(1px) scale(.99); }
.btn-primary .icon { transition: transform .25s; }
.btn-primary:hover .icon { transform: translateX(4px); }
.btn-primary.cargando { pointer-events: none; filter: saturate(.6); }
.btn-primary.cargando .icon { animation: girar .8s linear infinite; }
.btn-block { width: 100%; }
.btn-ghost { background: none; color: var(--suave); padding: 8px 10px; border-radius: 10px; }
.btn-ghost:hover { color: #fff; background: rgba(255, 255, 255, .05); }
.btn-sm { font-size: 13.5px; }

/* Mensajes */
.auth-msg { margin-top: 16px; padding: 12px 14px; border-radius: 12px; font-size: 14px; display: flex; gap: 10px; align-items: flex-start;
  background: rgba(var(--teal), .08); border: 1px solid rgba(var(--teal), .3); color: #99f6e4; animation: aparecer .4s both; }
.auth-msg.error { background: rgba(244, 63, 94, .08); border-color: rgba(244, 63, 94, .35); color: #fda4af; animation: aparecer .4s both, temblar .45s .1s; }
@keyframes temblar { 20%, 60% { transform: translateX(-6px); } 40%, 80% { transform: translateX(6px); } }

/* Códigos de respaldo (verificación) */
.respaldo { margin-top: 16px; font-size: 13.5px; color: var(--suave); border: 1px dashed var(--borde); border-radius: 12px; padding: 10px 14px; }
.respaldo summary { cursor: pointer; color: #cbd5e1; }
.respaldo p { margin: 8px 0 0; }

.tarjeta-pie { margin-top: 24px; padding-top: 16px; border-top: 1px solid var(--borde); display: flex; justify-content: space-between; gap: 10px;
  font-size: 11.5px; color: var(--tenue); font-family: "JetBrains Mono", monospace; flex-wrap: wrap; }

@media (max-width: 960px) {
  .escenario { grid-template-columns: 1fr; gap: 0; padding: 20px 16px; place-items: center; }
  .marca { display: none; }
}

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
  .chequeo li { opacity: 1; transform: none; }
}
