feat: stage mode gets per-token dynamic contrast shadows (disk.mjs algorithm)
Replace cycling CSS animation with the luminance-based shadow algorithm
from disk.mjs getShadowColorForText(). Each syntax token gets a
contrasting shadow computed from its color:
- Dark colors get lightened shadows (85% mix with white)
- Bright colors get dark purple-blue shadows
- Channel-specific tinting for pure R/G/B colors
- Near-black gets bright white shadow
Shadows are baked into per-token CSS classes via _getStageShadowForColor()
and scoped to body.stage-mode so normal editing is unaffected.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>