{# ══════════════════════════════════════════════════════════════════
FIXED ACTION RAIL
Lives outside .feed-slide — overflow:hidden on slides never clips it.
JS reads the current slide's data-* on every slide change and syncs
this rail's state. IDs must not change — feed.js depends on them.
══════════════════════════════════════════════════════════════════ #}
{# Gradient overlays — scoped to .feed-slide-inner so they don't leak
onto the sidebar or action rail area on desktop #}
{#
feed-info: category badge + video title
- z-index: 20 ensures it's above both overlay gradients (z-index:10)
and is NEVER clipped by overflow:hidden on .feed-slide-inner
- bottom: 80px sits cleanly above the custom-controls bar
- right: 14px on desktop (action rail is outside, no clash)
right: 80px on mobile (leaves room for the fixed overlay rail)
These insets are set in feed.html's