/* VibraHalo /x — UI mínima + morado por estado */
:root{
  --bg: #05070b;
  --fg: rgba(255,255,255,.92);
  --muted: rgba(255,255,255,.62);
  --line: rgba(255,255,255,.14);
  --halo: #a855f7; /* base morado */
  --halo2:#7c3aed;
  --haloGlow: rgba(168,85,247,.18);
  --card: rgba(255,255,255,.06);
  --chip: rgba(255,255,255,.08);
}
html,body{ height:100%; }
body{
  margin:0;
  font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Arial;
  background:
    radial-gradient(900px 520px at 50% 0%, rgba(168,85,247,.10), transparent 55%),
    radial-gradient(900px 520px at 10% 70%, rgba(59,130,246,.06), transparent 60%),
    linear-gradient(180deg, #04060a, var(--bg) 65%);
  color: var(--fg);
  overflow-x:hidden;
}
a{ color:inherit; text-decoration:none; }
#stage{ min-height:100svh; display:grid; place-items:center; padding:28px 16px; position:relative; }
#pulse{
  position:absolute; inset:-20%;
  background: radial-gradient(circle at 50% 40%, var(--haloGlow), transparent 55%);
  filter: blur(30px);
  opacity: .8;
  pointer-events:none;
  animation: pulse 6s ease-in-out infinite;
}
@keyframes pulse{ 0%,100%{ transform:scale(1); opacity:.65 } 50%{ transform:scale(1.06); opacity:.9 } }

.chip{
  display:inline-flex; align-items:center; gap:8px;
  padding:10px 12px;
  border-radius:999px;
  background: var(--chip);
  border:1px solid var(--line);
  backdrop-filter: blur(10px);
}
.chip:hover{ background: rgba(255,255,255,.12); }

.panel{
  width:min(720px, 100%);
  border-radius:22px;
  padding:22px;
  background: rgba(0,0,0,.18);
  border:1px solid var(--line);
  box-shadow: 0 20px 50px rgba(0,0,0,.45);
  backdrop-filter: blur(12px);
  position:relative;
}
.kicker{
  letter-spacing:.22em;
  text-transform:uppercase;
  font-size:11px;
  color: var(--muted);
  margin-bottom:10px;
}
h1{ margin:0 0 10px; font-size:28px; letter-spacing:-0.02em; }
p{ margin:0 0 14px; color: var(--muted); line-height:1.55; }
.controls{ display:grid; gap:10px; margin-top:12px; }
.row{ display:flex; flex-wrap:wrap; gap:10px; align-items:center; }
.btn{
  padding:12px 14px;
  border-radius:14px;
  border:1px solid rgba(255,255,255,.18);
  background: rgba(255,255,255,.10);
  color: var(--fg);
  font-weight:600;
  cursor:pointer;
}
.btn.primary{
  border-color: rgba(168,85,247,.35);
  background: linear-gradient(180deg, rgba(168,85,247,.18), rgba(124,58,237,.10));
  box-shadow: 0 10px 30px rgba(168,85,247,.12);
}
.btn:active{ transform: translateY(1px); }
.input{
  padding:12px 14px;
  border-radius:14px;
  border:1px solid rgba(255,255,255,.16);
  background: rgba(0,0,0,.28);
  color: var(--fg);
  min-width: 180px;
}
.small{ font-size:12px; color: var(--muted); }
.meta{
  display:flex; align-items:center; justify-content:space-between;
  margin-top:14px; gap:12px; flex-wrap:wrap;
  border-top:1px dashed rgba(255,255,255,.18); padding-top:12px;
}
.state{
  font-size:11px;
  letter-spacing:.2em;
  text-transform:uppercase;
  opacity:.7;
}
.ghost{
  font-size:12px;
  border:1px solid rgba(255,255,255,.16);
  background: rgba(255,255,255,.06);
  color: var(--fg);
  padding:8px 10px;
  border-radius:12px;
  cursor:pointer;
}
.ghost:hover{ background: rgba(255,255,255,.10); }

/* Puertas */
#halo-door{
  position:fixed;
  inset:0;
  z-index:9999;
  pointer-events:none;
  opacity:0;
  transition: opacity .3s ease;
}
#halo-door.active{ opacity:1; }
#halo-door .door{
  position:absolute;
  top:0; bottom:0;
  width:52%;
  background: linear-gradient(180deg, rgba(255,255,255,.08), rgba(255,255,255,.02));
  border:1px solid rgba(255,255,255,.10);
  backdrop-filter: blur(10px);
}
#halo-door .door.left{ left:-2%; transform: translateX(0); }
#halo-door .door.right{ right:-2%; transform: translateX(0); }
#halo-stars{ position:absolute; inset:0; opacity:.55; }
#halo-door-text{
  position:absolute; left:50%; top:50%;
  transform: translate(-50%,-50%);
  font-size:12px; letter-spacing:.26em; text-transform:uppercase;
  color: rgba(255,255,255,.82);
  padding:12px 14px;
  border-radius:999px;
  background: rgba(0,0,0,.40);
  border:1px solid rgba(255,255,255,.14);
}

/* MORADO POR ESTADO */
body[data-halo-state="HALO_IDLE"]{ --haloGlow: rgba(168,85,247,.10); }
body[data-halo-state="HALO_GATE_ACTIVE"]{ --haloGlow: rgba(168,85,247,.16); }
body[data-halo-state="HALO_VALIDATION"]{ --haloGlow: rgba(168,85,247,.22); }
body[data-halo-state="HALO_TRANSIT"]{ --haloGlow: rgba(168,85,247,.32); }
body[data-halo-state="HALO_LOCK"]{ --haloGlow: rgba(148,163,184,.10); --halo:#94a3b8; --halo2:#64748b; }
body[data-halo-state="HALO_SILENT_FAIL"]{ --haloGlow: rgba(148,163,184,.12); --halo:#cbd5e1; --halo2:#94a3b8; }
body[data-halo-state="HALO_EXCEPTION"]{ --haloGlow: rgba(239,68,68,.16); --halo:#ef4444; --halo2:#b91c1c; }
body[data-halo-state="HALO_SHUTDOWN_SAFE"]{ --haloGlow: rgba(255,255,255,.06); --halo:#e5e7eb; --halo2:#94a3b8; }
