/* Neptuno v2 — motor de vida: sólo lo que life-lab.js necesita para
   posicionarse. No duplica space-lab.css (reusa .sky/.neb/.stars/.plume/
   .vign/.grain/.planet* para el póster estático de fallback). */

.life-canvas{position:absolute;inset:0;width:100%;height:100%;display:block}

/* espaciador invisible: reserva el hueco de la "o" dentro de .hero-word
   con el mismo box-model que .planet (space-lab.css), sin pintar nada —
   life-lab.js mide su rect vía ResizeObserver y llama set({planet}). */
.o-spacer{display:inline-block;flex:0 0 auto;width:var(--pd,132px);height:var(--pd,132px);
  margin-left:.015em;visibility:hidden}

/* póster de respaldo: sólo se muestra si no hay WebGL2 ni WebGL1, o si el
   contexto se pierde sin recuperarse. Nunca un hueco. */
.life-poster{position:absolute;inset:0;display:none;z-index:0}
.life-poster .planet{position:absolute}

/* ================= anatomía — llamadas técnicas =================
   Líneas finas + texto pequeño en Rajdhani. Nada de globos ni iconos.

   CORRECCIÓN 2026-09-04: cuatro rótulos se salían del marco de 640 px. La causa no era
   la posición de cada uno, era el modelo: `.tx` llevaba `white-space:nowrap` y el `.ln`
   un ancho fijo de 44 px, así que el ancho del rótulo lo dictaba el subtítulo más largo
   y no cabía en el canal de 145 px que dejaba el planeta. Ahora el rótulo se ancla al
   borde del marco (left/right: 14px) con un ANCHO declarado, y la línea guía es la que
   estira (flex:1) hasta el punto que señala. Por construcción no puede desbordar: el
   único elemento elástico es la guía, y crece hacia dentro. */
.anat-call{position:absolute;display:flex;align-items:center;gap:8px;pointer-events:none;z-index:5;
  transform:translateY(-50%)}
.anat-call.r{flex-direction:row}
.anat-call.l{flex-direction:row-reverse;text-align:right}
.anat-call .dot{width:4px;height:4px;border-radius:50%;background:#7dd3fc;flex:0 0 auto;
  box-shadow:0 0 6px rgba(125,211,252,.8)}
.anat-call .ln{height:1px;flex:1 1 auto;min-width:16px;background:rgba(165,243,252,.5)}
.anat-call .tx{font-family:'Rajdhani',sans-serif;font-weight:600;font-size:12px;
  letter-spacing:.09em;text-transform:uppercase;color:#a5f3fc;white-space:nowrap;
  flex:0 0 auto;max-width:172px}
/* Subtítulo: 10 -> 12 px y color subido de #64748b a #b6cddd. El gris viejo daba 4.4:1
   sobre el fondo real (nebulosa, no negro puro) — por debajo del mínimo de 4.5:1 de la
   WCAG para texto normal. El nuevo da 8.8:1 sobre el mismo fondo, y la sombra garantiza
   la separación también donde la nebulosa se aclara. Envuelve: el nowrap del padre era
   lo que empujaba los rótulos fuera del marco. */
.anat-call .tx .sub{display:block;font-family:'Inter',sans-serif;font-weight:400;
  font-size:12px;line-height:1.34;letter-spacing:.01em;text-transform:none;
  color:#b6cddd;margin-top:3px;white-space:normal;
  text-shadow:0 1px 3px rgba(2,8,18,.95)}

.anat-clock{position:absolute;left:0;right:0;bottom:26px;text-align:center;z-index:5}
.anat-clock .v{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-variant-numeric:tabular-nums;font-size:14px;letter-spacing:.02em;color:#eaf6ff}
.anat-clock .k{font-family:'Rajdhani',sans-serif;font-size:11px;letter-spacing:.22em;
  text-transform:uppercase;color:#4aa8c4;margin-top:4px}

/* ================= telemetría en vivo ================= */
.telem{position:absolute;left:20px;top:20px;z-index:5;width:212px;padding:16px;
  border:1px solid rgba(0,243,255,.28);background:rgba(0,14,28,.74);backdrop-filter:blur(10px);
  clip-path:polygon(8% 0,100% 0,100% 92%,92% 100%,0 100%,0 8%)}
.telem .th{display:flex;justify-content:space-between;align-items:center;padding-bottom:8px;
  margin-bottom:10px;border-bottom:1px solid rgba(0,243,255,.25);
  font-family:'Rajdhani',sans-serif;font-size:10px;letter-spacing:.16em;color:#00f3ff;
  text-transform:uppercase}
.telem .tdot{width:6px;height:6px;border-radius:50%;background:#4ade80;box-shadow:0 0 6px #4ade80}
.telem .row{display:flex;justify-content:space-between;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  font-variant-numeric:tabular-nums;font-size:11px;color:#94a3b8;margin-bottom:7px}
.telem .row span{color:#a5f3fc}
.telem .row:last-child{margin-bottom:0}
.telem .foot{margin-top:10px;padding-top:9px;border-top:1px solid rgba(255,255,255,.08);
  font-family:'Rajdhani',sans-serif;font-size:10px;letter-spacing:.08em;color:#7d93a8;
  text-wrap:pretty;line-height:1.5}

.field-cap{position:absolute;left:20px;bottom:18px;z-index:5;
  font-family:'Rajdhani',sans-serif;font-weight:600;font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:#a5f3fc;display:flex;align-items:center;gap:9px}
.field-cap b{width:5px;height:5px;border-radius:50%;background:#0e7490;box-shadow:0 0 6px #0e7490}

.reduced-tag{position:absolute;left:16px;bottom:16px;z-index:5;
  font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:11px;
  letter-spacing:.03em;color:#9fb6c9;line-height:1.6;max-width:300px;text-wrap:pretty}
.reduced-tag b{color:#a5f3fc;font-weight:400}
