feat(web): wallpaper system + sticky PageHeader

Wallpaper system with four sources (predefined images, CSS gradients,
custom uploads via mana-media, and theme default). Configurable per-scene
or globally, with overlay controls (blur + opacity) and hover preview.

Adds sticky prop to shared PageHeader component and applies it across
themes, settings, credits, subscription, help, and profile pages.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-12 16:00:03 +02:00
parent a9c51517eb
commit 8c2f9306e9
22 changed files with 1557 additions and 66 deletions

View file

@ -58,6 +58,8 @@
centered?: boolean;
/** Back navigation href (shows back arrow button) */
backHref?: string;
/** Sticky position at top of viewport with frosted-glass background */
sticky?: boolean;
/** Icon snippet (before title) */
icon?: Snippet;
/** Breadcrumb snippet (above title) */
@ -77,6 +79,7 @@
bordered = false,
centered = false,
backHref,
sticky = false,
icon,
breadcrumb,
actions,
@ -84,6 +87,9 @@
class: className = '',
}: Props = $props();
const stickyClasses =
'sticky top-0 z-40 backdrop-blur-lg bg-[hsl(var(--color-background,0_0%_100%)/0.8)] border-b border-[hsl(var(--color-border)/0.3)]';
const sizeClasses: Record<HeaderSize, { container: string; title: string }> = {
sm: {
container: 'py-3',
@ -101,8 +107,8 @@
</script>
<header
class="page-header {sizeClasses[size].container} {bordered
? 'border-b border-theme'
class="page-header {sizeClasses[size].container} {bordered ? 'border-b border-theme' : ''} {sticky
? stickyClasses
: ''} {className}"
>
<!-- Breadcrumb -->