feat(timeline): canvas water — per-point organic waves along the shoreline Port the timeline water from SMIL loops to a canvas renderer inspired by the user's references: per-point independent oscillation along the tide curve (Kim Jong-min's point-wave technique — motion never visibly repeats) and three stacked translucent shoreline layers gliding over each other (Goodkatz CSS Waves layering). Foam dashes flow along the edge only (open path — closed-path stroking drew a stray dashed line across the top), surface arc texture / glints / bubbles move under a clip of the data curve, and tide strength scales speed, amplitude, density, and counts. The data curve itself stays a crisp fixed SVG stroke on top; the canvas sits behind it (.tl__water). Render loop is throttled to ~30fps, paused via IntersectionObserver when offscreen and on visibilitychange, capped at dpr 2, and prefers-reduced-motion gets a single static frame. Constraint: pts prop is compared via JSON key so the parent's per-minute re-render (useNow) does not restart the loop or reset particles. Confidence: high Scope-risk: local Reversibility: trivial Directive: if device frame rate sags, lower the 33ms frame gate or reduce LAYERS/texture rows first. Tested: tsc build, eslint clean, vitest 11/11, two-frame Playwright diff confirms motion, light/dark screenshots, desktop rAF ~37fps with 4 sections mounted (headless, no GPU). Not-tested: real-device WebView frame rate and battery impact. Related: 1169eb2, docs/superpowers/plans/2026-06-11-realistic-waves.md 🐙 Autopus