/* Noise texture overlay */
body::after {
    content: "";
    position: fixed;
    inset: 0;
    pointer-events: none;
    z-index: 9999;
    opacity: 0.028;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='4' stitchTiles='stitch'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");
    background-size: 180px 180px;
    background-repeat: repeat;
}

html.dark body::after {
    opacity: 0.038;
}

/* Magnetic button prep */
.btn[data-magnetic] {
    will-change: transform;
    transition: transform 0.35s cubic-bezier(0.22, 1, 0.36, 1),
                box-shadow 0.2s ease,
                background 0.2s ease,
                color 0.2s ease;
}

/* Hero parallax will-change hints */
.hero-visual { will-change: transform; }
.hero-console { will-change: transform; }
.orbit-ring { will-change: transform; }
.floating-chip { will-change: transform; }
