About this drop
Everything runs off one Reanimated shared value. useAnimatedScrollHandler writes the ScrollView's contentOffset.y into scrollY on the UI thread, and a single useAnimatedStyle on the header reads it, so the motion never touches the JS thread. The trick is layering: the header sits behind an Animated.ScrollView whose content starts with a transparent spacer the height of the header (364.5pt), then the feed on an opaque black background, so the feed covers the header as you scroll. On overscroll the header translates by -scrollY and rides with the content, exposing a pull-down arrow above it. On scroll it stays pinned, scales linearly from 1 to 0.75 around transformOrigin top, and its opacity and upward drift follow interpolate tables sampled frame by frame from a recording of the X app. Because the header is behind the scroll view, the 1D / 1W / 1M / 1Y / ALL selector is tapped through invisible Pressables in the spacer; it moves the active pill but does not swap chart data. The chart is react-native-svg: a line path traced from the recording, a gradient fill and a dashed baseline. Text uses allowFontScaling={false} so sizes ignore Dynamic Type. Tested in a development build on the iOS simulator with Expo SDK 56, React Native 0.85 and Reanimated 4. Positions are fixed points measured on a 402pt-wide iPhone, so other widths need tuning, and Android has not been verified.