About this drop
Every value in spec.ts was sampled from a 120fps recording of the real iOS sleep-timer island and is multiplied by island width over 371, so proportions hold on any iPhone. The closed pill sits exactly over the sensor cutout, so at rest it vanishes into the hardware. All state lives on the UI thread as Reanimated 4 shared values. Gesture.Pan drives the selected minute, reproducing the UIScrollView rubber band formula in points, and release hands off to withDecay with a clamp and rubber band, then a short withTiming snaps to a whole minute. A useFrameCallback low-passes velocity to compute heat and a tail length, so the glow peaks at the pointer tick with no lag and cools over about 0.4s once still. Ticks are a recycled pool of 46 Animated.Views moved by worklets, labels are static Texts, and the readout is a TextInput written with setNativeProps every frame because Fabric drops guarded text updates. The open and close morph interpolates width, height and a continuous-curve radius, and the blur during the morph is a fixed-intensity expo-blur view crossfaded by opacity, because animating intensity dropped UI frames. The outer edges of the ruler fade through a local Expo Modules Swift view that applies a UIKit variable blur, so the module is iOS only (16.4+) and needs a development build, not Expo Go. Tested on Expo SDK 56, React Native 0.85 and Reanimated 4.3.