From e49990776b744cf23572e77ca5a98e5af13bbb0c Mon Sep 17 00:00:00 2001 From: JustMe Date: Fri, 9 Oct 2026 03:54:49 +0800 Subject: [PATCH] feat(display): falling snow in three depth layers with wind, mouse and bullet time; appearance panel; dark glass tinted from the background [CI SKIP] --- web/display/src/App.tsx | 9 + web/display/src/AppearancePanel.tsx | 130 +++++++++++++ web/display/src/appearance.ts | 109 +++++++++++ web/display/src/backgroundTint.ts | 81 ++++++++ web/display/src/display.css | 275 +++++++++++++++++++++++++++ web/display/src/parallax.ts | 14 +- web/display/src/weather/Weather.tsx | 10 + web/display/src/weather/engine.ts | 277 ++++++++++++++++++++++++++++ web/display/src/weather/presets.ts | 93 ++++++++++ web/shared/theme/tokens.css | 12 +- 10 files changed, 1003 insertions(+), 7 deletions(-) create mode 100644 web/display/src/AppearancePanel.tsx create mode 100644 web/display/src/appearance.ts create mode 100644 web/display/src/backgroundTint.ts create mode 100644 web/display/src/weather/Weather.tsx create mode 100644 web/display/src/weather/engine.ts create mode 100644 web/display/src/weather/presets.ts diff --git a/web/display/src/App.tsx b/web/display/src/App.tsx index e946799..86a6cf4 100644 --- a/web/display/src/App.tsx +++ b/web/display/src/App.tsx @@ -6,7 +6,12 @@ import { SourceButton, ThemeToggle } from '@shared/ui' import { Compare } from './pages/Compare' import { Line } from './pages/Line' import { Overview } from './pages/Overview' +import { useBackgroundTint } from './backgroundTint' import { useBackgroundParallax } from './parallax' +import { Weather } from './weather/Weather' +import { AppearancePanel } from './AppearancePanel' +import { useAppearanceVars } from './appearance' +import { snow } from './weather/presets' function LineRoute() { const { id } = useParams() @@ -16,12 +21,15 @@ function LineRoute() { export function App() { const background = useRef(null) useBackgroundParallax(background) + useBackgroundTint() + useAppearanceVars() const location = useLocation() const ipv6 = location.pathname.endsWith('~ipv6') || new URLSearchParams(location.search).get('ip_version') === 'ipv6' const familyQuery = ipv6 ? '?ip_version=ipv6' : '' return ( <>