/* Neptuno v2 — sistema de congelacion progresiva. Produccion.
   Portado del kernel de laboratorio (Claude Design: frost-lab.css / frost-lab.js).
   Contrato: proyectos/Neptunollc.com/v2/arquitectura.md §4.2, specs-congelacion.md §3-§5, §8-§10.
   Todas las capas leen --f y --fe escritas por frost.js (L0). Ninguna anima layout. */

#frost-system{position:fixed;inset:0;pointer-events:none;z-index:5;overflow:hidden}
#frost-system *{position:absolute;inset:0;pointer-events:none}

/* L1 — tinte frio: el color se va hacia el azul desde los bordes */
#frost-system .f-tint{z-index:2;opacity:var(--f,0);
  background:radial-gradient(ellipse 122% 98% at 50% 44%,
    rgba(6,22,42,0) 0%, rgba(6,22,42,0) 32%,
    rgba(8,38,68,.52) 70%, rgba(10,48,86,.86) 100%)}

/* L1b — desaturacion COMPUESTA. Nunca filter:saturate() sobre un envoltorio de
   contenido: repinta todo el arbol por frame y crea un bloque contenedor que
   rompe los descendientes position:fixed (termometro, barra movil). */
#frost-system .f-desat{z-index:3;background:#6b7580;mix-blend-mode:saturation;
  opacity:calc(var(--f,0) * .62)}
#frost-system .f-desat.is-lowend{display:none}

/* L1c — costra: heredera directa del #frost-overlay original. Usa --fe porque
   es la primera senal visible y debe llegar cuando llega el numero (§3). */
#frost-system .f-crust{z-index:4;
  box-shadow:inset 0 0 calc(40px + 140px * var(--fe,0)) calc(2px + 26px * var(--fe,0))
    rgba(198,238,255,calc(var(--fe,0) * .30));
  border:1px solid rgba(214,244,255,calc(var(--fe,0) * .34))}

/* mascara comun: garantiza la ventana legible central (§5) */
#frost-system .f-mask{position:absolute;inset:0;pointer-events:none;
  -webkit-mask-image:radial-gradient(ellipse 106% 98% at 50% 46%,
    rgba(0,0,0,0) 0%, rgba(0,0,0,0) var(--m1,50%), rgba(0,0,0,.80) var(--m2,74%), #000 100%);
  mask-image:radial-gradient(ellipse 106% 98% at 50% 46%,
    rgba(0,0,0,0) 0%, rgba(0,0,0,0) var(--m1,50%), rgba(0,0,0,.80) var(--m2,74%), #000 100%)}
#frost-system .f-mask > svg{position:absolute;inset:0;width:100%;height:100%;display:block}

/* mascara propia de las grietas: MAS ABIERTA que la de la escarcha. Sin ella
   el tramo central de cada grieta -que es casi toda la grieta- queda recortado. */
#frost-system .f-mask-soft{-webkit-mask-image:radial-gradient(ellipse 124% 116% at 50% 46%,
    rgba(0,0,0,0) 0%, rgba(0,0,0,0) 20%, rgba(0,0,0,.50) 38%, #000 76%);
  mask-image:radial-gradient(ellipse 124% 116% at 50% 46%,
    rgba(0,0,0,0) 0%, rgba(0,0,0,0) 20%, rgba(0,0,0,.50) 38%, #000 76%)}

#frost-system .f-rime{z-index:5}
#frost-system .f-crack{z-index:7}

/* L4 — vaho. backdrop-filter acotado a la banda, radio ESCALONADO en 7 pasos
   (frost.js calcula --hb con round(haze*6)*0.9px). Nunca interpolado continuo. */
#frost-system .f-haze{z-index:6;opacity:var(--haze,0);
  -webkit-backdrop-filter:blur(var(--hb,0px));backdrop-filter:blur(var(--hb,0px));
  background:radial-gradient(ellipse 108% 100% at 50% 46%,
    rgba(200,240,255,0) 40%, rgba(200,240,255,.07) 72%, rgba(214,244,255,.17) 100%);
  -webkit-mask-image:radial-gradient(ellipse 108% 100% at 50% 46%,
    rgba(0,0,0,0) 0%, rgba(0,0,0,0) var(--m1,50%), #000 96%);
  mask-image:radial-gradient(ellipse 108% 100% at 50% 46%,
    rgba(0,0,0,0) 0%, rgba(0,0,0,0) var(--m1,50%), #000 96%)}
/* lowEnd: L4 pierde backdrop-filter (queda solo el tinte de vaho, sin coste de composicion) */
#frost-system .f-haze.is-lowend{-webkit-backdrop-filter:none;backdrop-filter:none}

/* prefers-reduced-motion: grietas fijas a dashoffset 0, opacidad reducida, sin deriva */
@media (prefers-reduced-motion: reduce){
  #frost-system .f-crack path{opacity:.55 !important}
}
