From 02e3b9d2e4f54957d156648193062fcda1c0a4d4 Mon Sep 17 00:00:00 2001 From: BoulderBadgeDad Date: Tue, 16 Jun 2026 12:15:18 -0700 Subject: [PATCH] =?UTF-8?q?Video=20get-modal:=20premium=20vibe=20pass=20?= =?UTF-8?q?=E2=80=94=20per-title=20hue=20glows=20+=20motion?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each modal now glows in its own colour (stable hue hashed from the title, set as --vgm-h): - ambient hue halo around the modal + a hue-tinted hero scrim - slow Ken Burns drift on the backdrop + a drifting light sweep across the hero - staggered content rise on open; spring entrance for the modal - title glow; hue-aware gradient CTA with lift + glow on hover - episode rows grow an accent edge on hover; close button spins - the 'Add to watchlist' row breathes a soft accent glow to invite the tick All guarded by prefers-reduced-motion. --- webui/static/video/video-get-modal.js | 4 ++ webui/static/video/video-side.css | 70 +++++++++++++++++++++++++++ 2 files changed, 74 insertions(+) diff --git a/webui/static/video/video-get-modal.js b/webui/static/video/video-get-modal.js index bbfa7a98..70069722 100644 --- a/webui/static/video/video-get-modal.js +++ b/webui/static/video/video-get-modal.js @@ -18,6 +18,8 @@ .replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"'); } function toast(msg, type) { if (typeof showToast === 'function') showToast(msg, type); } + // A stable per-title hue so each modal glows in its own colour (the "vibe"). + function hueOf(s) { var h = 0, t = String(s || ''); for (var i = 0; i < t.length; i++) h = (h * 31 + t.charCodeAt(i)) >>> 0; return h % 360; } // A show is "airing" (eye) unless its status says it's finished (get-symbol). function isAiring(status) { @@ -76,6 +78,7 @@ closeModal(); var ov = document.createElement('div'); ov.className = 'vgm-overlay'; + ov.style.setProperty('--vgm-h', hueOf(o.title || '')); // vibe colour (refined in fill) ov.innerHTML = '