feat: seasonal theme overlays + improved animated chat backgrounds
Adds 11 CSS-only seasonal overlays (Halloween, Christmas, New Year, Autumn, April Fool's, Lunar New Year, Valentine's Day, St. Patrick's Day, Earth Day, Deep Space, Retro Arcade) with date-based auto-detection and a manual override dropdown in Settings → Appearance → Seasonal Theme. All themes respect prefers-reduced-motion. SeasonalEffect mounts at z-index 9997 in App.tsx. Also rewrites all 5 animated chat background keyframes for smoother, more organic motion: Digital Rain gains a phosphor glow flicker; Star Drift now loops each layer by exactly its own tile size (no more seam); Grid Pulse adds an independent brightness oscillation at a prime period; Aurora Flow drives all four gradient layers through distinct paths; Fireflies adds glow-pulse and opacity-blink animations at prime periods for unsynchronised bioluminescence. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -341,6 +341,10 @@ function Appearance() {
|
||||
'mentionHighlightColor',
|
||||
);
|
||||
const [fontFamily, setFontFamily] = useSetting(settingsAtom, 'fontFamily');
|
||||
const [seasonalThemeOverride, setSeasonalThemeOverride] = useSetting(
|
||||
settingsAtom,
|
||||
'seasonalThemeOverride',
|
||||
);
|
||||
|
||||
return (
|
||||
<Box direction="Column" gap="100">
|
||||
@@ -408,6 +412,51 @@ function Appearance() {
|
||||
/>
|
||||
</SequenceCard>
|
||||
|
||||
<SequenceCard className={SequenceCardStyle} variant="SurfaceVariant" direction="Column">
|
||||
<SettingTile
|
||||
title="Seasonal Theme"
|
||||
description="Decorative overlays that activate automatically on holidays and events, or choose one manually."
|
||||
after={
|
||||
<select
|
||||
value={seasonalThemeOverride ?? 'auto'}
|
||||
onChange={(e) =>
|
||||
setSeasonalThemeOverride(
|
||||
e.target.value as typeof seasonalThemeOverride,
|
||||
)
|
||||
}
|
||||
style={{
|
||||
background: 'var(--bg-surface-variant)',
|
||||
color: 'inherit',
|
||||
border: '1px solid var(--border-interactive)',
|
||||
borderRadius: '6px',
|
||||
padding: '4px 8px',
|
||||
fontSize: '14px',
|
||||
fontFamily: 'inherit',
|
||||
cursor: 'pointer',
|
||||
}}
|
||||
>
|
||||
<option value="auto">🗓 Auto (date-based)</option>
|
||||
<option value="off">Off</option>
|
||||
<optgroup label="Holidays">
|
||||
<option value="newyear">🎆 New Year (Dec 31–Jan 2)</option>
|
||||
<option value="lunar">🏮 Lunar New Year (Jan 22–Feb 5)</option>
|
||||
<option value="valentines">💖 Valentine's Day (Feb 10–15)</option>
|
||||
<option value="stpatricks">🍀 St. Patrick's Day (Mar 15–18)</option>
|
||||
<option value="aprilfools">🃏 April Fool's Day (Apr 1)</option>
|
||||
<option value="earthday">🌱 Earth Day (Apr 22)</option>
|
||||
<option value="autumn">🍂 Autumn (Sep 21–Oct 31)</option>
|
||||
<option value="halloween">🎃 Halloween (Oct 15–Nov 1)</option>
|
||||
<option value="christmas">❄️ Christmas (Dec 10–Jan 2)</option>
|
||||
</optgroup>
|
||||
<optgroup label="Events">
|
||||
<option value="arcade">👾 Retro Arcade Day (Sep 12)</option>
|
||||
<option value="deepspace">🚀 Deep Space Week (Oct 4–10)</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
}
|
||||
/>
|
||||
</SequenceCard>
|
||||
|
||||
<SequenceCard className={SequenceCardStyle} variant="SurfaceVariant" direction="Column">
|
||||
<SettingTile
|
||||
title="Show Profile on Every Message"
|
||||
|
||||
Reference in New Issue
Block a user