
/* Centred behind the column and lifted well above it, so the brightest point
   lands on the wordmark and the form sits in the falloff. That matters more
   than taste here: the ShadCN Input is `bg-transparent` with a 2% white
   overlay, so it shows whatever is behind it, and over the hot part of the wash
   the fields lose their edges entirely. So the wash reaches across the page,
   but the peak stays where it was and the extra distance is spent in the deep
   end of the ramp: more colour, not a brighter middle. Sized explicitly rather
   than left to farthest-corner, which stretches differently on every screen. */
.brand-wash[data-v-1eda80ba] {
    background: radial-gradient(
        ellipse 100% 80% at 50% 6%,
        #d0004b 0%,
        #8c0031 22%,
        #4a0016 46%,
        #23000b 68%,
        #0d0003 86%,
        transparent 100%
    );
}

/* Held fully clear across most of the page now, so the wash survives out to
   where the graph is drawn instead of being cut off just past the form. */
.brand-vignette[data-v-1eda80ba] {
    background: radial-gradient(
        ellipse 130% 108% at 50% 14%,
        transparent 0%,
        transparent 68%,
        var(--background) 100%
    );
}

/* Clustered around the centre, since anything parked at an edge would only ever
   be painted over by the vignette. */
.brand-orb-1[data-v-1eda80ba] {
    background: #9b0030;
    top: -18%;
    left: 30%;
    animation: drift-1-1eda80ba 14s ease-in-out infinite;
}
.brand-orb-2[data-v-1eda80ba] {
    background: #d0004b;
    top: 2%;
    left: 55%;
    animation: drift-2-1eda80ba 18s ease-in-out infinite;
}
.brand-orb-3[data-v-1eda80ba] {
    background: #7a0025;
    top: 20%;
    left: 40%;
    animation: drift-3-1eda80ba 22s ease-in-out infinite;
}
.brand-grain[data-v-1eda80ba] {
    background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
    /* One noise unit per CSS pixel. At 128px the 256-unit tile was squeezed to
       half size, so on a 1x display every second sample was averaged away and
       the grain flattened into plain tint. */
    background-size: 256px 256px;
}
@media (prefers-reduced-motion: reduce) {
.brand-orb[data-v-1eda80ba] {
        animation: none;
}
}
@keyframes drift-1-1eda80ba {
0%, 100% { transform: translate(0, 0) scale(1);
}
25% { transform: translate(60px, 40px) scale(1.1);
}
50% { transform: translate(20px, 80px) scale(0.95);
}
75% { transform: translate(-40px, 30px) scale(1.05);
}
}
@keyframes drift-2-1eda80ba {
0%, 100% { transform: translate(0, 0) scale(1);
}
25% { transform: translate(-50px, -30px) scale(1.08);
}
50% { transform: translate(-80px, 20px) scale(0.92);
}
75% { transform: translate(-20px, -50px) scale(1.04);
}
}
@keyframes drift-3-1eda80ba {
0%, 100% { transform: translate(0, 0) scale(1);
}
25% { transform: translate(30px, -40px) scale(1.12);
}
50% { transform: translate(-30px, -70px) scale(0.9);
}
75% { transform: translate(50px, -20px) scale(1.06);
}
}
