.grain{z-index:var(--z-frame);pointer-events:none;opacity:var(--grain-opacity);mix-blend-mode:soft-light;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='140' height='140'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-size:140px 140px;animation:6s steps(6,end) infinite grain-shift;position:fixed;inset:0}@keyframes grain-shift{0%{transform:translate(0)}20%{transform:translate(-4%,3%)}40%{transform:translate(3%,-4%)}60%{transform:translate(-3%,2%)}80%{transform:translate(4%,-2%)}to{transform:translate(0)}}.stage-bloom{z-index:var(--z-base);pointer-events:none;background:var(--stage-warm);opacity:var(--glow-opacity-rest);animation:stage-breathe var(--dur-drift) var(--ease-breath) infinite alternate;position:absolute;inset:0}.stage-bloom--fixed{position:fixed}@keyframes stage-breathe{0%{opacity:calc(var(--glow-opacity-rest) * .7)}to{opacity:var(--glow-opacity-rest)}}.frame:before{animation:frame-draw var(--dur-slow) var(--ease-out) both}.frame__corner{animation:corner-in var(--dur-base) var(--ease-out) both;animation-delay:var(--dur-slow)}@keyframes frame-draw{0%{clip-path:inset(0 100% 100% 0);opacity:0}to{clip-path:inset(0);opacity:1}}@keyframes corner-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}@keyframes drift-up{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.grain{animation:none}.stage-bloom{opacity:var(--glow-opacity-rest);animation:none}.frame:before{clip-path:none;opacity:1;animation:none}.frame__corner{opacity:1;animation:none;transform:none}}