/* ══════════════════════════════════
   FV-2D — SVG/Canvas2D background only
   ══════════════════════════════════ */

/* FV-2D wrapper — full screen behind content */
.fv-canvas-wrap{
    position:fixed;top:0;left:0;width:100%;height:100%;
    overflow:hidden;z-index:0;
    background:#050a1c;
}

.fv-bg-svg{
    position:absolute;top:0;left:0;width:100%;height:100%;
    opacity:0;will-change:opacity;
}
.fv-bg-svg.in{opacity:1;transition:opacity 1.2s ease-out;}

/* Grain canvas — overlay for film grain texture */
.fv-grain{
    position:absolute;top:0;left:0;width:100%;height:100%;
    pointer-events:none;mix-blend-mode:overlay;opacity:0.18;
}

/* Content wrap — transparent so FV shows through entire scroll (no seam by design) */
.content-wrap{background:transparent;}


/* Scroll-driven darken overlay — covers FV, opacity grows with scroll */
.fv-darken{
    position:fixed;top:0;left:0;width:100%;height:100vh;height:100lvh;
    background:#02050f;opacity:0;
    pointer-events:none;z-index:1;
    transform:translateZ(0);
    will-change:opacity;
}

/* Pulse animations removed — SVG <rect> opacity animation forces full re-rasterization
   of the radial-gradient fill on each frame, which is one of the heaviest costs.
   Static gradients still produce the luminous feel. */
