/* Base atmosphere is shared by classic and holiday themes. Only two bounded
   gradient shapes move; the static grid never repaints with pointer movement. */
.whelp-ambient-effects{
  position:fixed;inset:0;z-index:0;
  width:100%;height:100vh;height:100dvh;
  overflow:hidden;overflow:clip;
  pointer-events:none!important;user-select:none;
  contain:layout paint style;
  --ambient-grid-line:rgba(132,169,225,.045);
}
.whelp-ambient-effects *{pointer-events:none!important;user-select:none}
.whelp-ambient-effects .ambient-grid{
  position:absolute;inset:0;
  background-image:linear-gradient(var(--ambient-grid-line) 1px,transparent 1px),linear-gradient(90deg,var(--ambient-grid-line) 1px,transparent 1px);
  background-size:76px 76px;
  -webkit-mask-image:linear-gradient(180deg,#0009,transparent 82%);
  mask-image:linear-gradient(180deg,#0009,transparent 82%);
}
.whelp-ambient-effects .ambient-glow{
  position:absolute;display:block;
  width:min(62vw,760px);height:min(62vw,760px);
  border-radius:50%;opacity:.75;
  background:radial-gradient(circle,rgba(var(--fest-rgb,83,145,255),.16),rgba(var(--fest-rgb,83,145,255),.045) 42%,transparent 69%);
  animation:ambient-glass-drift 28s ease-in-out infinite alternate;
  will-change:transform;
}
.whelp-ambient-effects .ambient-glow-one{left:calc(var(--sidebar,0px) - 160px);top:-300px}
.whelp-ambient-effects .ambient-glow-two{
  right:-220px;top:35vh;
  width:min(52vw,640px);height:min(52vw,640px);
  background:radial-gradient(circle,rgba(var(--fest-rgb,151,124,239),.12),rgba(var(--fest-rgb,151,124,239),.035) 45%,transparent 70%);
  animation-duration:35s;animation-delay:-17s;animation-direction:alternate-reverse;
}
:root[data-theme="light"] .whelp-ambient-effects{--ambient-grid-line:rgba(63,101,158,.055)}
:root[data-theme="light"] .whelp-ambient-effects .ambient-glow{opacity:.52}
@keyframes ambient-glass-drift{
  from{transform:translate3d(-16px,-12px,0) scale(.94)}
  to{transform:translate3d(24px,30px,0) scale(1.04)}
}

/* Decorative particles never capture input or change the document's size.
   The controller removes unused layers instead of accumulating SPA particles. */
.holiday-effects{
  position:fixed;inset:0;z-index:25;
  width:100%;height:100vh;height:100dvh;
  overflow:hidden;overflow:clip;
  pointer-events:none!important;user-select:none;
  contain:layout paint style;
}
.holiday-effects *{pointer-events:none!important;user-select:none}
.holiday-effects .holiday-particle{
  position:absolute;top:0;left:var(--x,50%);
  display:block;width:var(--size,12px);height:var(--size,12px);
  color:var(--particle-color,currentColor);opacity:var(--alpha,.2);
  transform:translate3d(0,-80px,0);
  animation:holiday-snowfall var(--duration,18s) var(--delay,0s) linear infinite;
}
.holiday-effects .effect-shape{display:block;width:100%;height:100%;fill:currentColor}

/* Only small SVGs move; no blur, shadows or animated full-viewport textures. */
.holiday-effects[data-kind="snow"]{color:#edf5ff}
.holiday-effects[data-kind="snow"] .holiday-particle{opacity:calc(var(--alpha,.28)*.7)}
:root[data-theme="light"] .holiday-effects[data-kind="snow"]{color:#5c7896}
.holiday-effects[data-kind="eggs"]{color:#d9bce9}
.holiday-effects[data-kind="eggs"] .holiday-particle{animation-name:holiday-egg-fall;opacity:calc(var(--alpha,.3)*.8)}
.holiday-effects[data-kind="flowers"]{color:#edb5cf}
.holiday-effects[data-kind="flowers"] .holiday-particle{
  animation-name:holiday-petal-fall;
  opacity:calc(var(--alpha,.25)*.78);
}
.holiday-effects[data-kind="flowers"] .holiday-particle:empty{
  width:calc(var(--size,12px)*.68);border-radius:75% 15% 70% 20%;
  background:currentColor;
}
.holiday-effects[data-kind="carnations"]{color:#d7978f}
.holiday-effects[data-kind="carnations"] .holiday-particle{animation-name:holiday-petal-fall;opacity:calc(var(--alpha,.25)*.66)}
.holiday-effects[data-kind="stars"]{color:#d7c48c}
.holiday-effects[data-kind="stars"] .holiday-particle{
  top:var(--y,35%);transform:translate3d(0,0,0) scale(.85);
  animation-name:holiday-star-twinkle;animation-timing-function:ease-in-out;
}
.holiday-effects[data-kind="ribbons"]{color:#b7c9e9}
.holiday-effects[data-kind="ribbons"] .holiday-particle{animation-name:holiday-ribbon-fall;opacity:calc(var(--alpha,.28)*.74)}
.holiday-effects[data-kind="ribbons"] .holiday-particle:empty{height:calc(var(--size,12px)*.42);border-radius:1px;background:currentColor}
.holiday-effects[data-kind="rings"]{color:#dfc393}
.holiday-effects[data-kind="rings"] .holiday-particle{
  top:var(--y,45%);transform:translate3d(0,0,0);
  animation-name:holiday-ring-float;animation-timing-function:ease-in-out;
  opacity:calc(var(--alpha,.24)*.7);
}
.holiday-effects[data-kind="rings"] .effect-shape{fill:none}
.holiday-effects[data-kind="leaves"]{color:#d5a15f}
.holiday-effects[data-kind="leaves"] .holiday-particle{animation-name:holiday-leaf-fall;opacity:calc(var(--alpha,.28)*.75)}
.holiday-effects[data-kind="hearts"]{color:#de91b0}
.holiday-effects[data-kind="hearts"] .holiday-particle{
  top:auto;bottom:-60px;transform:translate3d(0,0,0);
  animation-name:holiday-heart-rise;opacity:calc(var(--alpha,.28)*.82);
}
:root[data-theme="light"] .holiday-effects[data-kind="eggs"]{color:#9773b3}
:root[data-theme="light"] .holiday-effects[data-kind="flowers"]{color:#b6678b}
:root[data-theme="light"] .holiday-effects[data-kind="carnations"]{color:#a64e59}
:root[data-theme="light"] .holiday-effects[data-kind="stars"]{color:#8b7649}
:root[data-theme="light"] .holiday-effects[data-kind="ribbons"]{color:#6083af}
:root[data-theme="light"] .holiday-effects[data-kind="rings"]{color:#937445}
:root[data-theme="light"] .holiday-effects[data-kind="leaves"]{color:#a96632}
:root[data-theme="light"] .holiday-effects[data-kind="hearts"]{color:#b55077}

/* Fine corner cobwebs frame three small spiders walking around the main area. */
.holiday-effects[data-kind="webs"]{
  color:#d7c4d5;
  --crawl-left:calc(var(--sidebar,0px) + 24px);
  --crawl-right:calc(100vw - 52px);
  --crawl-mid-x:calc(50vw + var(--sidebar,0px)*.5);
  --crawl-near-x:calc(25vw + var(--sidebar,0px)*.75);
  --crawl-far-x:calc(75vw + var(--sidebar,0px)*.25 - 24px);
  --crawl-top:110px;--crawl-mid-y:max(135px,48vh);
  --crawl-lower-y:max(160px,72vh);--crawl-bottom:calc(100vh - 58px);
}
.holiday-effects :is(.holiday-web-right,.holiday-web-left){position:absolute;width:clamp(100px,14vw,180px)}
.holiday-effects .holiday-web{
  display:block;position:relative;width:100%;height:auto;transform-origin:100% 0;
  fill:none;stroke:currentColor;opacity:.22;
  animation:holiday-web-sway 12s ease-in-out infinite alternate;
}
.holiday-effects .holiday-web-right{right:8px;top:80px}
.holiday-effects .holiday-web-left{left:calc(var(--sidebar,0px) + 12px);bottom:12px;transform:rotate(180deg)}
.holiday-effects .holiday-web-left .holiday-web{animation-delay:-5s}
.holiday-effects .holiday-crawler{
  position:absolute;display:block;top:0;left:0;width:22px;height:22px;
  color:var(--particle-color,currentColor);opacity:.5;transform-origin:50% 50%;
  animation:holiday-crawl-one var(--crawl-duration,44s) var(--crawl-delay,0s) linear infinite;
}
.holiday-effects .crawler-2{animation-name:holiday-crawl-two}
.holiday-effects .crawler-3{animation-name:holiday-crawl-three}
.holiday-effects :is(.spider-legs-a,.spider-legs-b){
  transform-box:fill-box;transform-origin:50% 50%;
  animation:holiday-spider-legs .35s ease-in-out infinite alternate;
}
.holiday-effects .spider-legs-b{animation-delay:-.35s}
:root[data-theme="light"] .holiday-effects[data-kind="webs"]{color:#6c5976}
:root[data-theme="light"] .holiday-effects .holiday-web{opacity:.2}

@keyframes holiday-snowfall{
  0%{transform:translate3d(0,-80px,0) rotate(0deg)}
  28%{transform:translate3d(calc(var(--drift,35px)*.5),28vh,0) rotate(calc(var(--turn,60deg)*.25))}
  56%{transform:translate3d(calc(var(--drift,35px)*.2),56vh,0) rotate(calc(var(--turn,60deg)*.55))}
  82%{transform:translate3d(calc(var(--drift,35px)*.8),82vh,0) rotate(calc(var(--turn,60deg)*.8))}
  100%{transform:translate3d(var(--drift,35px),calc(100vh + 80px),0) rotate(var(--turn,60deg))}
}
@keyframes holiday-egg-fall{
  0%{transform:translate3d(0,-80px,0) rotate(-9deg)}
  30%{transform:translate3d(calc(var(--drift,45px)*.45),30vh,0) rotate(12deg)}
  68%{transform:translate3d(calc(var(--drift,45px)*.65),68vh,0) rotate(-12deg)}
  100%{transform:translate3d(var(--drift,45px),calc(100vh + 80px),0) rotate(9deg)}
}
@keyframes holiday-petal-fall{
  0%{transform:translate3d(0,-80px,0) rotate(0deg)}
  30%{transform:translate3d(calc(var(--drift,65px)*.6),30vh,0) rotate(calc(var(--turn,270deg)*.3))}
  64%{transform:translate3d(calc(var(--drift,65px)*.35),64vh,0) rotate(calc(var(--turn,270deg)*.64))}
  100%{transform:translate3d(var(--drift,65px),calc(100vh + 80px),0) rotate(var(--turn,270deg))}
}
@keyframes holiday-star-twinkle{
  0%,100%{transform:translate3d(0,0,0) scale(.72);opacity:calc(var(--alpha,.25)*.34*var(--star-opacity-scale,1))}
  48%{transform:translate3d(0,0,0) scale(1);opacity:calc(var(--alpha,.25)*.88*var(--star-opacity-scale,1))}
}
@keyframes holiday-ribbon-fall{
  0%{transform:translate3d(0,-80px,0) rotate(0deg)}
  36%{transform:translate3d(calc(var(--drift,55px)*.6),36vh,0) rotate(calc(var(--turn,210deg)*.4))}
  70%{transform:translate3d(calc(var(--drift,55px)*.4),70vh,0) rotate(calc(var(--turn,210deg)*.65))}
  100%{transform:translate3d(var(--drift,55px),calc(100vh + 80px),0) rotate(var(--turn,210deg))}
}
@keyframes holiday-ring-float{
  0%,100%{transform:translate3d(0,0,0) rotate(-5deg)}
  50%{transform:translate3d(calc(var(--drift,30px)*.25),-18px,0) rotate(7deg)}
}
@keyframes holiday-leaf-fall{
  0%{transform:translate3d(0,-80px,0) rotate(0deg)}
  25%{transform:translate3d(calc(var(--drift,75px)*.55),25vh,0) rotate(calc(var(--turn,190deg)*.3))}
  52%{transform:translate3d(calc(var(--drift,75px)*.18),52vh,0) rotate(calc(var(--turn,190deg)*.5))}
  76%{transform:translate3d(calc(var(--drift,75px)*.8),76vh,0) rotate(calc(var(--turn,190deg)*.8))}
  100%{transform:translate3d(var(--drift,75px),calc(100vh + 80px),0) rotate(var(--turn,190deg))}
}
@keyframes holiday-heart-rise{
  0%{transform:translate3d(0,0,0) rotate(-6deg)}
  28%{transform:translate3d(calc(var(--drift,55px)*.45),-28vh,0) rotate(6deg)}
  56%{transform:translate3d(calc(var(--drift,55px)*.2),-56vh,0) rotate(-4deg)}
  80%{transform:translate3d(calc(var(--drift,55px)*.8),-80vh,0) rotate(5deg)}
  100%{transform:translate3d(var(--drift,55px),calc(-100vh - 120px),0) rotate(-3deg)}
}
@keyframes holiday-web-sway{from{transform:rotate(-.5deg)}to{transform:rotate(.6deg)}}
@keyframes holiday-crawl-one{
  0%{transform:translate3d(var(--crawl-left),var(--crawl-top),0) rotate(90deg)}
  23%{transform:translate3d(var(--crawl-right),var(--crawl-top),0) rotate(90deg)}
  26%{transform:translate3d(var(--crawl-right),var(--crawl-top),0) rotate(180deg)}
  47%{transform:translate3d(var(--crawl-right),var(--crawl-bottom),0) rotate(180deg)}
  50%{transform:translate3d(var(--crawl-right),var(--crawl-bottom),0) rotate(270deg)}
  72%{transform:translate3d(var(--crawl-left),var(--crawl-bottom),0) rotate(270deg)}
  75%{transform:translate3d(var(--crawl-left),var(--crawl-bottom),0) rotate(360deg)}
  97%{transform:translate3d(var(--crawl-left),var(--crawl-top),0) rotate(360deg)}
  100%{transform:translate3d(var(--crawl-left),var(--crawl-top),0) rotate(450deg)}
}
@keyframes holiday-crawl-two{
  0%{transform:translate3d(var(--crawl-far-x),var(--crawl-lower-y),0) rotate(270deg)}
  20%{transform:translate3d(var(--crawl-near-x),var(--crawl-lower-y),0) rotate(270deg)}
  23%{transform:translate3d(var(--crawl-near-x),var(--crawl-lower-y),0) rotate(360deg)}
  45%{transform:translate3d(var(--crawl-near-x),var(--crawl-top),0) rotate(360deg)}
  48%{transform:translate3d(var(--crawl-near-x),var(--crawl-top),0) rotate(450deg)}
  70%{transform:translate3d(var(--crawl-far-x),var(--crawl-top),0) rotate(450deg)}
  73%{transform:translate3d(var(--crawl-far-x),var(--crawl-top),0) rotate(540deg)}
  97%{transform:translate3d(var(--crawl-far-x),var(--crawl-lower-y),0) rotate(540deg)}
  100%{transform:translate3d(var(--crawl-far-x),var(--crawl-lower-y),0) rotate(630deg)}
}
@keyframes holiday-crawl-three{
  0%{transform:translate3d(var(--crawl-mid-x),var(--crawl-top),0) rotate(135deg)}
  29%{transform:translate3d(var(--crawl-right),var(--crawl-lower-y),0) rotate(135deg)}
  32%{transform:translate3d(var(--crawl-right),var(--crawl-lower-y),0) rotate(270deg)}
  60%{transform:translate3d(var(--crawl-left),var(--crawl-mid-y),0) rotate(270deg)}
  63%{transform:translate3d(var(--crawl-left),var(--crawl-mid-y),0) rotate(405deg)}
  97%{transform:translate3d(var(--crawl-mid-x),var(--crawl-top),0) rotate(405deg)}
  100%{transform:translate3d(var(--crawl-mid-x),var(--crawl-top),0) rotate(495deg)}
}
@keyframes holiday-spider-legs{from{transform:rotate(-8deg)}to{transform:rotate(8deg)}}

/* The same visitor control works for the base design and every holiday. */
.holiday-effects-toggle{
  display:inline-flex;align-items:center;justify-content:center;position:relative;
  width:35px;height:35px;padding:8px;flex-shrink:0;border-radius:6px;
  border:1px solid var(--border);background:var(--surface);color:var(--muted);
}
.holiday-effects-toggle>svg{width:18px;height:18px;flex-shrink:0}
.holiday-effects-toggle:hover{background:var(--surface2);color:var(--lightblue);border-color:var(--lightblue)}
.holiday-effects-toggle:focus-visible{outline:2px solid var(--lightblue);outline-offset:3px}
.holiday-effects-toggle[aria-pressed="false"]::after{content:'';position:absolute;width:21px;height:1.5px;border-radius:2px;background:currentColor;transform:rotate(-45deg)}
.holiday-effects-toggle[hidden]{display:none!important}

/* The page controller pauses a hidden tab instead of spending work off-screen. */
:root[data-effects-paused="true"] .holiday-effects :is(.holiday-particle,.holiday-web,.holiday-crawler,.spider-legs-a,.spider-legs-b),
:root[data-effects-paused="true"] .whelp-ambient-effects .ambient-glow{animation-play-state:paused}
:root[data-effects="off"] :is(.holiday-effects,.whelp-ambient-effects){display:none!important}
@media(max-width:700px){
  .holiday-effects .holiday-particle:nth-child(2n),
  .holiday-effects .holiday-particle:nth-child(n + 25){display:none;animation:none}
  .holiday-effects[data-kind="snow"] .holiday-particle{opacity:calc(var(--alpha,.28)*.48)}
  .holiday-effects[data-kind]:not([data-kind="snow"]) .holiday-particle{opacity:calc(var(--alpha,.25)*.54)}
  .holiday-effects[data-kind="stars"]{--star-opacity-scale:.65}
  .holiday-effects :is(.holiday-web-right,.holiday-web-left){width:100px}
  .holiday-effects .holiday-web{opacity:.17}
  :root[data-theme="light"] .holiday-effects .holiday-web{opacity:.17}
  .holiday-effects .holiday-web-right{top:72px;right:3px}
  .holiday-effects .holiday-web-left{left:12px;bottom:8px}
  .holiday-effects[data-kind="webs"]{--crawl-left:18px;--crawl-right:calc(100vw - 42px);--crawl-top:86px}
  .holiday-effects .holiday-crawler{width:19px;height:19px;opacity:.45}
  .holiday-effects .crawler-3{display:none;animation:none}
  .holiday-effects .crawler-3 :is(.spider-legs-a,.spider-legs-b){animation:none}
  .whelp-ambient-effects .ambient-grid{background-size:52px 52px;opacity:.6}
  .whelp-ambient-effects .ambient-glow{width:420px;height:420px;will-change:auto}
  .whelp-ambient-effects .ambient-glow-one{left:-170px;top:-160px}
  .whelp-ambient-effects .ambient-glow-two{right:-230px;top:42vh;width:360px;height:360px}
}
@media(pointer:coarse){
  .whelp-ambient-effects .ambient-glow{animation:none;will-change:auto}
}
@media(prefers-reduced-motion:reduce){
  .holiday-effects,.whelp-ambient-effects{display:none!important}
  .holiday-effects :is(.holiday-particle,.holiday-web,.holiday-crawler,.spider-legs-a,.spider-legs-b){animation:none!important}
}
