feat(waves): harmonic multi-axis waves driven by daily tide strength WaveHero: replace uniform Q-curve scallops with harmonic-sum waveforms (irregular, organic crests that tile seamlessly across the viewBox). Each layer now moves on two axes — horizontal drift plus vertical heave with incommensurate periods — under a slow container swell, with a broken foam dash riding the front crest. Tide strength scales amplitude, speed, foam density, and spray count. TideTimeline: extract the water fill into TideWater. Straight uniform streaks become current ribbons with per-column amplitude, wavelength, phase, width, and speed (each ribbon loops on its own wavelength), plus drifting bubbles desynced via negative SMIL begin offsets and a sheen paced by strength. DaySection: pass the daily current strength (%) into the timeline; for days beyond the 7-day marine forecast, fall back to a multtae-based estimate (spring 82 / mid 55 / neap 28) so every day still reads correctly. The displayed gauge keeps using real data only. Constraint: tide curve stays static — only the clipped water animates (decision from 2630dfc); SVG def ids remain per-day unique (50e40cd regression guard); foam dash pattern sums to 50 with pathLength=100 so the dashoffset loop is seamless. Confidence: high Scope-risk: local Reversibility: trivial Directive: if Android WebView frame drops appear with many stacked day sections, reduce ribbon/bubble counts in TideWater first. Tested: tsc+vite build, vitest 11/11, eslint on changed files (one pre-existing DaySection effect error untouched), Playwright screenshots at strength 100% (day 1) vs 20% (day 2) including stacked-day clip ids. Not-tested: real-device WebView performance; prefers-reduced-motion still does not gate SMIL animations (pre-existing behavior). Related: docs/superpowers/plans/2026-06-11-realistic-waves.md 🐙 Autopus