@keyframes p-blink {
    0%, 100% {
        opacity: 0.08;
        transform: translate(-50%, -50%) scale(0.4);
    }
    40%, 60% {
        opacity: 1;
        transform: translate(-50%, -50%) scale(1.25);
    }
}

@keyframes p-float {
    0%, 100% { translate: 0px 0px; }
    25%       { translate: var(--fx) calc(var(--fy) * -1); }
    75%       { translate: calc(var(--fx) * -1) var(--fy); }
}

.p-star,
.p-orb {
    position: absolute;
    pointer-events: none;
    will-change: opacity, transform, translate;
}

/* O wrapper de partículas fica por cima de tudo */
.particle-wrapper {
    position: absolute;
    top: 0;
    left: 0;
    pointer-events: none;
    overflow: visible;
    /* Sem z-index aqui — controlado pelos sub-layers */
}

/* Garante que o inline wrapper cria stacking context */
.particle-wrapper-inline {
    display: inline-block;
    position: relative;
    overflow: visible;
    vertical-align: middle;
    line-height: normal;
    isolation: isolate; /* cria stacking context próprio */
}

/* Rainbow */
@keyframes rainbow-text {
    0%   { background-position: 0% 50%; }
    50%  { background-position: 100% 50%; }
    100% { background-position: 0% 50%; }
}
.rainbow-text {
    background: linear-gradient(to right,#ff0000,#ff7300,#fffb00,#48ff00,#00ffd5,#002bff,#7a00ff,#ff00c8,#ff0000);
    -webkit-background-clip: text;
    background-clip: text;
    background-size: 200%;
    animation: rainbow-text 2s linear infinite;
    color: transparent !important;
}
