About this drop
One Skia RuntimeEffect paints the whole face in a single pass: a flat surface colour, then two anisotropic gaussian blobs composited source-over, plus a dither pass that hides banding. Both blob centres sit at y 1.26 in normalised button space, below the bottom edge, so only their upper shoulder shows and the light reads as coming from underneath. Source-over rather than additive blending lets the same shader read as a tint on light surfaces, a glow on dark ones, and a float over glass at surface alpha 0. Every uniform is fed by a Reanimated useDerivedValue, so the press bloom, the drift and the disabled desaturation run on the UI thread with no JS per frame, and useFrameCallback is only active while animated is true, so a static button never repaints. The interactive press follows the finger through a Gesture.Manual that never activates, so it neither steals the press nor blocks a parent ScrollView. glass renders an expo-glass-effect GlassView on iOS 26 and falls back to an expo-blur BlurView on older iOS and Android, which also needs experimentalBlurMethod or it draws a flat tint. Built and tested on Expo SDK 56 with React Native 0.85, Reanimated 4.3 and Skia 2.6; Skia and expo-glass-effect mean it needs a development build, not Expo Go. Each mounted canvas carries per-frame overhead, so virtualise long lists and use the paused prop to skip the canvas while keeping layout.