/* Night Vendor Heartbeat v1.0
   Additive-only atmospheric layer. No layout footprint, no interaction capture. */
#nv-heartbeat-layer{
  --nv-heart-x:50vw;
  --nv-heart-y:27vh;
  position:fixed;
  inset:0;
  z-index:84;
  pointer-events:none;
  overflow:hidden;
  contain:strict;
  opacity:0;
  visibility:hidden;
}
#nv-heartbeat-layer.nv-heartbeat-active{
  opacity:1;
  visibility:visible;
}
#nv-heartbeat-layer .nv-heartbeat-origin{
  position:absolute;
  left:var(--nv-heart-x);
  top:var(--nv-heart-y);
  width:1px;
  height:1px;
  transform:translate(-50%,-50%);
}
#nv-heartbeat-layer .nv-heartbeat-bloom,
#nv-heartbeat-layer .nv-heartbeat-ring{
  position:absolute;
  left:50%;
  top:50%;
  border-radius:50%;
  transform:translate(-50%,-50%) scale(.18);
  opacity:0;
  will-change:transform,opacity,filter;
}
#nv-heartbeat-layer .nv-heartbeat-bloom{
  width:min(68vw,760px);
  aspect-ratio:1;
  background:radial-gradient(circle,
    rgba(221,243,255,.16) 0,
    rgba(157,207,247,.075) 12%,
    rgba(91,145,196,.028) 30%,
    transparent 68%);
  filter:blur(2px);
}
#nv-heartbeat-layer .nv-heartbeat-ring{
  width:min(26vw,300px);
  aspect-ratio:1;
  border:1px solid rgba(218,241,255,.52);
  box-shadow:
    0 0 9px rgba(195,229,255,.30),
    0 0 34px rgba(100,171,231,.16),
    inset 0 0 22px rgba(196,229,255,.08);
}
#nv-heartbeat-layer .nv-heartbeat-ring:nth-of-type(3){
  width:min(34vw,390px);
  border-color:rgba(185,216,248,.30);
}
#nv-heartbeat-layer.nv-heartbeat-active .nv-heartbeat-bloom{
  animation:nv-heartbeat-bloom 1800ms cubic-bezier(.16,.72,.22,1) both;
}
#nv-heartbeat-layer.nv-heartbeat-active .nv-heartbeat-ring:nth-of-type(2){
  animation:nv-heartbeat-ring 1220ms cubic-bezier(.12,.70,.20,1) 40ms both;
}
#nv-heartbeat-layer.nv-heartbeat-active .nv-heartbeat-ring:nth-of-type(3){
  animation:nv-heartbeat-ring-secondary 1480ms cubic-bezier(.12,.70,.20,1) 330ms both;
}
#nv-heartbeat-layer.nv-heartbeat-bell .nv-heartbeat-bloom{
  background:radial-gradient(circle,
    rgba(238,247,255,.19) 0,
    rgba(185,216,248,.09) 13%,
    rgba(95,23,34,.045) 36%,
    transparent 70%);
}
#nv-heartbeat-layer.nv-heartbeat-bell .nv-heartbeat-ring{
  border-color:rgba(238,247,255,.62);
  box-shadow:
    0 0 12px rgba(220,244,255,.38),
    0 0 48px rgba(122,184,255,.21),
    inset 0 0 25px rgba(185,216,248,.10);
}
@keyframes nv-heartbeat-bloom{
  0%{transform:translate(-50%,-50%) scale(.12);opacity:0}
  12%{opacity:.24}
  30%{transform:translate(-50%,-50%) scale(.54);opacity:.10}
  42%{transform:translate(-50%,-50%) scale(.43);opacity:.16}
  100%{transform:translate(-50%,-50%) scale(1.08);opacity:0}
}
@keyframes nv-heartbeat-ring{
  0%{transform:translate(-50%,-50%) scale(.20);opacity:0}
  14%{opacity:.64}
  48%{opacity:.23}
  100%{transform:translate(-50%,-50%) scale(1.48);opacity:0}
}
@keyframes nv-heartbeat-ring-secondary{
  0%{transform:translate(-50%,-50%) scale(.14);opacity:0}
  17%{opacity:.38}
  52%{opacity:.15}
  100%{transform:translate(-50%,-50%) scale(1.62);opacity:0}
}
@media (max-width:820px){
  #nv-heartbeat-layer .nv-heartbeat-bloom{width:min(116vw,620px)}
  #nv-heartbeat-layer .nv-heartbeat-ring{width:min(68vw,300px)}
  #nv-heartbeat-layer .nv-heartbeat-ring:nth-of-type(3){width:min(86vw,380px)}
}
@media (prefers-reduced-motion:reduce){
  #nv-heartbeat-layer{display:none!important}
}
