/* HERO_ALIVE_20261009 v9 — (v9: no stretch at all; right of x2540 the photo continues into an outpainted park: tree canopy with string lights, dusk sky, lawn; see work/v9) — (v8: (v8: no blurred wash; right of x2000/2480 the photo's own columns are progressively stretched, see make8.py) — hero = ONLY Dima's crop of the real-palace composite (x 0..2520, y 202..1300 of the 2560x1440
   composite; nothing mirrored). Framing is bound to the hero HEIGHT at every size, so the vertical band palace-top -> people's
   waists (composite rows 284..1104) is always visible, also on wide+short windows (v6 used width-based sizing there -> heads only).
   /js/hero-alive.js refines it per hero aspect (shows more of the crop when the box allows, crop's right edge under Melisa);
   any extra width right of the crop is the file's own dark defocused wash (5400 px wide file). */
/* HERO_V13_20261016 (replaces v12; v12 files stay on disk): composite on real photo LWL-Schloss-3.jpg (SchiDD, Wikimedia Commons, CC BY-SA 4.0): palace+monument pixels unaltered, clutter removed, two real mute swans added (Charles J. Sharp / Yerpo, CC BY-SA 3.0). Previous v12 note: real photo, no artistic processing. Source: Niteshift, "Ludwigslust Panorama Schloss Kaskaden 2010-10-29.jpg",
   Wikimedia Commons, CC BY-SA 3.0 (crop, 4 tiny passers-by removed by cloning neighbouring texture, light natural grading).
   Credit in /impressum.html (Bildnachweise). Files 4140x1200 master -> 3840/2560/1920/1280 AVIF/WebP/JPG. */
html body .v2-hero {
  background: #c9c3b6 url('/images/ludwigslust/schloss-v14b-1920.jpg?v=14b') 50% 42% / cover no-repeat !important;
  filter: none !important;
}
@supports (background-image: image-set(url('/x.webp') type('image/webp'))) {
  html body .v2-hero { background-image: image-set(url('/images/ludwigslust/schloss-v14b-1920.avif') type('image/avif'), url('/images/ludwigslust/schloss-v14b-1920.webp') type('image/webp'), url('/images/ludwigslust/schloss-v14b-1920.jpg') type('image/jpeg')) !important; }
  @media (min-width: 1700px), (min-resolution: 1.4dppx) { html body .v2-hero { background-image: image-set(url('/images/ludwigslust/schloss-v14b-2560.avif') type('image/avif'), url('/images/ludwigslust/schloss-v14b-2560.webp') type('image/webp'), url('/images/ludwigslust/schloss-v14b-2560.jpg') type('image/jpeg')) !important; } }
  @media (min-width: 2300px), (min-width: 1400px) and (min-resolution: 1.8dppx) { html body .v2-hero { background-image: image-set(url('/images/ludwigslust/schloss-v14b-3840.avif') type('image/avif'), url('/images/ludwigslust/schloss-v14b-3840.webp') type('image/webp'), url('/images/ludwigslust/schloss-v14b-3840.jpg') type('image/jpeg')) !important; } }
}
/* Layout (Dima 2026-10-09): news cards + jobs row less tall, the freed height goes to the hero
   (row 1 is minmax(0,1fr)) so the people at the pond are visible. PickMe/Melisa column unchanged
   (--ll-pm-h stays 272px); bottoms of jobs/news/PickMe still meet the footer line. Desktop only. */
@media (min-width: 1025px) {
  :root { --lsa-disc-h: 200px; }
  html body .v2-discover,
  html body .v2-discover-primary,
  html body .v2-discover-primary:has(#cardJobsWidget),
  html body .v2-discover-primary > .v2-bottom-left-stack:has(#cardJobsWidget),
  html body .v2-discover-primary > .v2-city-today,
  html body #cityTodayPanel,
  html body #cardJobsWidget.lwl-jobs-widget,
  html body #cardJobsWidget.lwl-jobs-widget--dense {
    height: var(--lsa-disc-h) !important;
    max-height: var(--lsa-disc-h) !important;
  }
  html body #cityTodayPanel .city-news-title,
  html body #cityTodayPanel .city-today-grid .city-news-title {
    -webkit-line-clamp: 2 !important;
    line-clamp: 2 !important;
    max-height: calc(1.28em * 2) !important;
  }
}
@media (min-width: 1025px) and (min-height: 900px) {
  :root { --lsa-disc-h: 214px; }
}
html body .v2-hero > .v2-hero-copy { position: relative; }        /* keep title above the alive layer */
/* the new image puts the Schloss's right wing under the Melisa panel: keep every hero layer
   (alive layer, quest glow + hit area) in the hero's own stacking context, below the panel (z 2) */
html body .v2-hero { z-index: 0; }

.lsa { position: absolute; inset: 0; overflow: hidden; pointer-events: none; opacity: 0; transition: opacity 1.2s ease; contain: layout paint; }
.lsa.is-on { opacity: 1; }
.lsa-art { position: absolute; left: 0; top: 0; width: 100%; height: 100%; display: block; }
.lsa-art span { position: absolute; display: block; }
.lsa-paused, .lsa-paused * { animation-play-state: paused !important; }

/* water: strips of the photo drifting a hair left/right -> broken, rippling reflection */
.lsa-water { -webkit-mask-size: 100% 100%; mask-size: 100% 100%; -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; }
.lsa-art .lsa-wgroup { left: 0; top: 0; width: 100%; height: 100%; will-change: transform; animation: lsa-wave 2.9s ease-in-out infinite alternate; }
.lsa-art .lsa-wgroup--1 { animation-name: lsa-wave-b; animation-duration: 3.7s; animation-delay: -1.3s; }
.lsa-art .lsa-wgroup--2 { animation-duration: 4.6s; animation-delay: -2.9s; animation-direction: alternate-reverse; }
.lsa-strip { left: 0; width: 100%; background-repeat: no-repeat; }
@keyframes lsa-wave   { from { transform: translate3d(-0.09%, 0, 0); } to { transform: translate3d(0.09%, 0, 0); } }
@keyframes lsa-wave-b { from { transform: translate3d(0.08%, 0, 0); } to { transform: translate3d(-0.11%, 0, 0); } }
.lsa-glint { width: 1.6%; height: 4px; margin: -2px 0 0 -0.8%; border-radius: 50%;
  background: radial-gradient(ellipse at center, rgba(255, 236, 196, .85) 0, rgba(255, 214, 150, .35) 45%, rgba(255, 214, 150, 0) 72%); }
.lsa-art .lsa-gl { left: 0; top: 0; width: 100%; height: 100%; opacity: 0; will-change: opacity; animation: lsa-glint 6.2s ease-in-out infinite; }
.lsa-art .lsa-gl--1 { animation-duration: 7.9s; animation-delay: -3.4s; }
@keyframes lsa-glint { 0%, 55%, 100% { opacity: 0; } 70% { opacity: .9; } 84% { opacity: .2; } }

/* festoon bulbs */
.lsa-bulb { border-radius: 50%;
  background: radial-gradient(circle at center, rgba(255, 246, 214, .95) 0, rgba(255, 214, 128, .55) 22%, rgba(255, 176, 70, .18) 48%, rgba(255, 170, 60, 0) 70%); }
/* bulbs twinkle in 3 interleaved groups (3 animated nodes per tree instead of one per bulb) */
.lsa-art .lsa-tw { left: 0; top: 0; width: 100%; height: 100%; will-change: opacity; animation: lsa-twinkle 3.1s ease-in-out infinite; }
.lsa-art .lsa-tw--1 { animation-duration: 2.3s; animation-delay: -1.1s; }
.lsa-art .lsa-tw--2 { animation-duration: 4.2s; animation-delay: -2.6s; }
@keyframes lsa-twinkle { 0%, 100% { opacity: .35; } 30% { opacity: .9; } 48% { opacity: .55; } 62% { opacity: 1; } 80% { opacity: .45; } }

/* trees: a slice of the canopy rotates by a fraction of a degree around its trunk; soft-edged mask */
.lsa-sway { background-repeat: no-repeat; will-change: transform; animation: lsa-sway-l 8s ease-in-out infinite alternate;
  -webkit-mask-image: radial-gradient(ellipse 62% 58% at 42% 44%, #000 58%, transparent 100%); mask-image: radial-gradient(ellipse 62% 58% at 42% 44%, #000 58%, transparent 100%); }
.lsa-sway--l { transform-origin: 30% 100%; }
.lsa-sway--r { transform-origin: 70% 100%; animation-name: lsa-sway-r;
  -webkit-mask-image: radial-gradient(ellipse 62% 58% at 58% 44%, #000 58%, transparent 100%); mask-image: radial-gradient(ellipse 62% 58% at 58% 44%, #000 58%, transparent 100%); }
@keyframes lsa-sway-l { 0% { transform: rotate(-0.12deg); } 45% { transform: rotate(0.3deg); } 100% { transform: rotate(0.06deg); } }
@keyframes lsa-sway-r { 0% { transform: rotate(0.1deg); } 50% { transform: rotate(-0.28deg); } 100% { transform: rotate(-0.04deg); } }

/* falling leaves (one leaf per lane, long pauses between) */
.lsa-lane { overflow: visible; }
.lsa-leafpath { left: 0; top: 0; width: 100%; height: 100%; opacity: 0; will-change: transform, opacity; animation: lsa-fall 15s linear infinite; }
.lsa-lane--r .lsa-leafpath { animation-name: lsa-fall-r; }
.lsa-leaf { left: 0; top: 0; width: 9px; height: 7px; border-radius: 1px 7px 1px 7px; background: linear-gradient(135deg, #e48a2a, #b4461c);
  box-shadow: 0 0 1px rgba(60, 20, 0, .4); animation: lsa-flutter 1.7s ease-in-out infinite alternate; }
.lsa-leaf--b { background: linear-gradient(135deg, #f0b23e, #c0611d); width: 8px; height: 6px; animation-duration: 1.3s; }
@keyframes lsa-fall {
  0% { opacity: 0; transform: translate3d(0, 0, 0); }
  3% { opacity: 1; }
  12% { transform: translate3d(18%, 22%, 0); }
  22% { transform: translate3d(42%, 46%, 0); }
  32% { transform: translate3d(66%, 74%, 0); }
  40% { opacity: 1; transform: translate3d(90%, 100%, 0); }
  44%, 100% { opacity: 0; transform: translate3d(96%, 106%, 0); }
}
@keyframes lsa-fall-r {
  0% { opacity: 0; transform: translate3d(100%, 0, 0); }
  3% { opacity: 1; }
  14% { transform: translate3d(80%, 26%, 0); }
  26% { transform: translate3d(52%, 54%, 0); }
  36% { transform: translate3d(24%, 82%, 0); }
  44% { opacity: 1; transform: translate3d(4%, 100%, 0); }
  48%, 100% { opacity: 0; transform: translate3d(0, 106%, 0); }
}
@keyframes lsa-flutter { from { transform: rotate(-35deg) scaleX(1); } to { transform: rotate(40deg) scaleX(.55); } }

/* a rare pair of birds over the roofs (≈ every 46 s, 11 s on screen) */
.lsa-flight { left: 0; width: 100%; }
.lsa-pair { left: 0; top: 0; width: 100%; height: 100%; opacity: 0; will-change: transform, opacity; animation: lsa-fly 46s linear 9s infinite; }
.lsa-pair svg { display: block; overflow: visible; }
.lsa-pair path { fill: none; stroke: rgba(48, 34, 40, .7); stroke-width: 1.6; stroke-linecap: round; stroke-linejoin: round; }
.lsa-art .lsa-bird { left: 0; top: 0; will-change: transform; animation: lsa-flap .5s ease-in-out infinite alternate; }
.lsa-art .lsa-bird--b { left: 21px; top: 9px; animation-duration: .44s; }
@keyframes lsa-fly { 0% { opacity: 0; transform: translate3d(-4%, 20%, 0); } 1% { opacity: 1; } 23% { opacity: 1; transform: translate3d(102%, -25%, 0); } 24%, 100% { opacity: 0; transform: translate3d(104%, -26%, 0); } }
@keyframes lsa-flap { from { transform: scaleY(1); } to { transform: scaleY(.35); } }

@media (prefers-reduced-motion: reduce) { .lsa { display: none !important; } }

/* HERO_NOGLOW_20261015: desktop only - remove the Schloss glow/outline + warm tint (castle-quest silhouette); Stadt-Quest badge stays. /m/ uses .lsq--mobile, untouched. */
.lsq--desktop .lsq-stage--glow, .lsq--desktop .lsq-stage--tint { display: none !important; }
/* HERO_V14B_20261016: same v14 'restored palace' (palace pixels identical), only the two swans moved up in the pond
   (waterline rows 965/948 instead of 1108/1088 of 3840x1317) so that at 50% 42% the band "sky above statues -> swans"
   fits every desktop hero aspect up to ~5:1 (1280x720 hero = 4.45:1). v14 files stay on disk. */
