/* ——— A living palace: tap reactions, night and day, residents, and the growing castle ———
   Everything here starts with lp- (js/living.js, js/alive.js, js/castle.js). */

/* Layers inside drawings that only show at night or during a reaction. */
svg .lp-glint, svg .lp-stars, svg .lp-bloom, svg .lp-lit, svg .lp-glow, svg .lp-ovenglow { opacity: 0; transition: opacity 0.5s ease; }
/* lp-fx: a puff, a pour, or a doodle that only shows during a tap reaction. */
svg .lp-fx { opacity: 0; }

/* ——— Night (the device clock says so) ——— */

.lp-night .lp-sky { fill: url(#mp-night); }
.lp-night .lp-clouds { opacity: 0; }
.lp-night svg .lp-stars,
.lp-night svg .lp-lit { opacity: 1; }
/* Lights glow when on: the room editor switches lp-on; map previews glow all night. */
.lp-light.lp-on .lp-glow,
.room.mini.lp-night .lp-light .lp-glow { opacity: 1; }
.room-item.lp-light.lp-on:not(.drawn) > span,
.room.mini.lp-night .room-item.lp-light:not(.drawn) > span {
  filter: drop-shadow(0 0 1.4cqw #ffe27a) drop-shadow(0 0 0.5cqw #fff6c4);
}
.lp-night .window {
  background:
    radial-gradient(circle at 70% 28%, #fffbe0 0 10%, transparent 11%),
    radial-gradient(circle at 26% 30%, #fff 0 2.2%, transparent 3.2%),
    radial-gradient(circle at 36% 62%, #fff 0 1.8%, transparent 2.8%),
    radial-gradient(circle at 66% 76%, #fff 0 1.6%, transparent 2.6%),
    radial-gradient(circle at 18% 84%, #fff 0 1.4%, transparent 2.4%),
    linear-gradient(#1d1a4a, #46337a);
}
.lp-night .feature.arches span {
  background:
    radial-gradient(circle at 70% 22%, #fffbe0 0 7%, transparent 8%),
    radial-gradient(circle at 28% 30%, #fff 0 2%, transparent 3%),
    radial-gradient(circle at 46% 46%, #fff 0 1.6%, transparent 2.6%),
    linear-gradient(#1d1a4a 0 62%, #3e7a55 62%);
}

/* The dimmer over the whole room. Lit lights cut soft holes in it (a mask
   from js/room-render.js). Your character and the resident stand in front. */
.lp-shade {
  position: absolute;
  inset: 0;
  z-index: 8000;
  background: #2a2068;
  mix-blend-mode: multiply;
  opacity: 0;
  pointer-events: none;
  transition: opacity 1s ease;
}
.lp-night .lp-shade { opacity: 0.36; }
.lp-shade.lp-sleep,
.lp-night .lp-shade.lp-sleep { opacity: 0.66; transition-duration: 0.7s; }

/* ——— Tap reactions (the class lasts as long as the reaction) ——— */

.room-items .room-item.lp-rx > span { transform-origin: 50% 100%; }
.room-items .room-item.lp-rx-hop > span,
.room-items .room-item.lp-rx-tuck > span { animation: lp-hop 0.6s var(--bounce); }
.room-items .room-item.lp-rx-squish > span,
.room-items .room-item.lp-rx-light > span { animation: lp-squish 0.6s var(--bounce); }
.room-items .room-item.lp-rx-wiggle > span { animation: lp-wiggle 0.8s ease-in-out; }
.room-items .room-item.lp-rx-chime > span { animation: lp-wiggle 0.45s ease-in-out 3; }
.room-items .room-item.lp-rx-rock > span { animation: lp-rock 1.4s ease-in-out; }
.room-items .room-item.lp-rx-swing > span { transform-origin: 50% 0; animation: lp-swing 1.6s ease-out; }
.room-items .room-item.lp-rx-ripple > span { transform-origin: 50% 50%; animation: lp-ripple 1.1s ease-out; }
.room-items .room-item.lp-rx-cloth > span { animation: lp-squish 0.5s var(--bounce); }
.room-items .room-item.lp-plop > span { transform-origin: 50% 100%; animation: lp-squish 0.45s var(--bounce); }

.lp-rx-chime .art-swing { animation-duration: 0.25s; }
.lp-rx-chime .lp-hands { transform-box: view-box; transform-origin: 52px 40px; animation: lp-spin 1.6s ease-in-out; }
.lp-lid { transform-box: view-box; transform-origin: 12px 58px; }
.lp-rx-lid .lp-lid { animation: lp-lid 1.6s var(--bounce); }
.lp-door { transform-box: view-box; }
.lp-door.l { transform-origin: 22px 0; }
.lp-door.r { transform-origin: 142px 0; }
.lp-rx-doors .lp-door { animation: lp-door 2.2s ease-in-out; }
.lp-drawer { transform-box: fill-box; transform-origin: 50% 50%; }
.lp-rx-drawer .lp-drawer { animation: lp-drawer 1.3s var(--bounce) both; }
.lp-books { transform-box: fill-box; transform-origin: 50% 100%; }
.lp-rx-books .lp-books { animation: lp-books 0.3s ease-in-out 4 alternate; }
.lp-curtain { transform-box: view-box; }
.lp-curtain.l { transform-origin: 4px 0; }
.lp-curtain.r { transform-origin: 130px 0; }
.lp-rx-curtains .lp-curtain { animation: lp-curtains 2.4s ease-in-out; }
.lp-flag { transform-box: fill-box; transform-origin: 50% 0; }
.lp-rx-flutter .lp-flag { animation: lp-flag 0.28s ease-in-out 5 alternate; }
.lp-bloom { transform-box: fill-box; transform-origin: 50% 100%; }
.lp-rx-bloom .lp-bloom { opacity: 1; animation: lp-bloom 3s var(--bounce) both; }
.lp-leaves { transform-box: fill-box; transform-origin: 50% 100%; }
.lp-rx-bloom .lp-leaves { animation: lp-wiggle 0.5s ease-in-out 2; }
.lp-rx-windows .lp-lit { animation: lp-lights 3s ease-in-out both; }
.lp-glint { transform-box: fill-box; }
.lp-rx-reflect .lp-glint { animation: lp-glint 1.2s ease-in-out 2; }
.lp-mirrorface { animation: lp-fade 0.5s ease both; }
.lp-sleeper { animation: lp-fade 0.6s ease both; }
.lp-rx-bake .lp-ovenglow { animation: lp-lights 2.6s ease-in-out both; }
.lp-bread, .lp-steam, .lp-cloth { transform-box: fill-box; transform-origin: 50% 100%; }
.lp-rx-bake .lp-bread { animation: lp-rise 2.6s var(--bounce) both; }
.lp-rx-bake .lp-steam { animation: lp-steam 2.6s ease-in-out; }
.lp-cloth { transform-origin: 50% 0; }
.lp-rx-cloth .lp-cloth { animation: lp-cloth 0.32s ease-in-out 4 alternate; }

/* The Sweet Bakery */
.lp-ovendoor { transform-box: view-box; transform-origin: 70px 122px; }
.lp-rx-bake .lp-ovendoor { animation: lp-ovendoor 2.6s ease-in-out both; }
.lp-warmair, .lp-puff, .lp-smoke, .lp-flame, .lp-jar, .lp-treat { transform-box: fill-box; transform-origin: 50% 100%; }
.lp-rx-bake .lp-warmair { animation: lp-warmair 2.6s ease-out both; }
.lp-beater { transform-box: fill-box; transform-origin: 50% 50%; }
.lp-rx-whir .lp-beater { animation: lp-whir 0.09s linear 16 alternate; }
.room-items .room-item.lp-rx-whir > span { animation: lp-shake 0.08s linear 18 alternate; }
.lp-dome { transform-box: view-box; }
.lp-rx-dome .lp-dome { animation: lp-dome 1.9s var(--bounce) both; }
.lp-rx-chalk .lp-doodle { animation: lp-shown 2.4s linear both; }
.lp-rx-chalk .lp-doodle path { animation: lp-chalk 2.4s ease-out both; }
.room-items .room-item.lp-rx-jars > span { animation: lp-squish 0.5s var(--bounce); }
.lp-rx-jars .lp-jar { animation: lp-wiggle 0.55s ease-in-out 2; }
.lp-rx-treats .lp-treat { animation: lp-hop 0.6s var(--bounce) 2; }
.lp-rx-treats .lp-lit { animation: lp-lights 2.2s ease-in-out both; }
.lp-teapot { transform-box: view-box; transform-origin: 80px 106px; }
.lp-rx-pour .lp-teapot { animation: lp-pour 2.2s ease-in-out both; }
.lp-rx-pour .lp-tea { animation: lp-tea 2.2s ease-in-out both; }
.lp-rx-pour .lp-puff { animation: lp-puff 1.6s ease-out 0.7s both; }
.room-items .room-item.lp-rx-warm > span { animation: lp-squish 0.6s var(--bounce); }
.lp-rx-warm .lp-puff { animation: lp-puff 1.7s ease-out both; }
.lp-rx-wish .lp-flame { animation: lp-blowout 2.4s ease-in-out both; }
.lp-rx-wish .lp-smoke { animation: lp-puff 1.4s ease-out 0.25s both; }
.lp-flap { transform-box: fill-box; transform-origin: 50% 0; }
.lp-rx-flutter .lp-flap { animation: lp-flap 0.26s ease-in-out 5 alternate; }

/* A small treasure dragged over a nightstand, dresser, vanity, or table: the top glows. */
.room-item.lp-perch svg,
.room-item.lp-perch > span { filter: drop-shadow(0 0 0.8cqw #fff) drop-shadow(0 0 1.4cqw var(--mint)); }

/* Your character is in bed. */
.room-hero.lp-tucked { opacity: 0; transition: opacity 0.4s ease; }

.lp-zzz {
  position: absolute;
  z-index: 9500;
  font-size: clamp(14px, 4.4cqw, 44px);
  font-weight: 700;
  color: #fff;
  -webkit-text-stroke: max(1.5px, 0.25cqw) var(--outline);
  paint-order: stroke fill;
  pointer-events: none;
  opacity: 0;
  animation: lp-zzz 2.2s ease-out both;
}

/* ——— Residents ——— */

.lp-resident {
  position: absolute;
  z-index: 8990;
  width: 13cqw;
  transform: translate(-50%, -95%);
  transition-property: left, top;
  transition-timing-function: ease-in-out;
  touch-action: none;
  cursor: pointer;
}
.lp-res-body { transform: scaleX(var(--flip, 1)); }
.lp-res-art { display: block; width: 100%; height: auto; overflow: visible; transform-origin: 50% 95%; animation: lp-breathe 3.2s ease-in-out infinite; }
.lp-resident.lp-walking .lp-res-art { animation: lp-walk 0.34s ease-in-out infinite alternate; }
.lp-resident.lp-hop .lp-res-art { animation: lp-hop 0.6s var(--bounce); }
.lp-blink { transform-box: fill-box; transform-origin: 50% 50%; animation: blink 4.2s infinite; }
.lp-wag { animation: lp-wag 0.5s ease-in-out infinite alternate; }
.lp-buzz { transform-box: fill-box; transform-origin: 50% 70%; animation: lp-buzz 0.18s ease-in-out infinite alternate; }
.lp-notes { animation: lp-notes 2.4s ease-in-out infinite alternate; }
.lp-twinkle { animation: lp-twinkle 1.6s ease-in-out infinite alternate; }

.lp-bubble {
  position: absolute;
  left: 50%;
  bottom: 100%;
  translate: -50% 0;
  width: max-content;
  max-width: 34cqw;
  padding: 0.8cqw 1.6cqw;
  border: max(2px, 0.35cqw) solid var(--outline);
  border-radius: 2.2cqw;
  background: #fff;
  color: var(--ink);
  font-size: clamp(11px, 2.3cqw, 20px);
  font-weight: 600;
  line-height: 1.2;
  text-align: center;
  box-shadow: 0 0.5cqw 0 rgba(91, 58, 110, 0.18);
  pointer-events: none;
  transform-origin: 50% 100%;
}
.lp-bubble.lp-left { left: 0; translate: 0 0; transform-origin: 10% 100%; }
.lp-bubble.lp-right { left: auto; right: 0; translate: 0 0; transform-origin: 90% 100%; }
.lp-bubble.lp-pop { animation: pop-in 0.4s var(--bounce); }
.lp-bubble::after {
  content: '';
  position: absolute;
  left: calc(50% - 1cqw);
  top: 100%;
  width: 2cqw;
  height: 2cqw;
  margin-top: -1.1cqw;
  border-right: max(2px, 0.35cqw) solid var(--outline);
  border-bottom: max(2px, 0.35cqw) solid var(--outline);
  background: #fff;
  transform: rotate(45deg);
}
.lp-bubble.lp-left::after { left: 3cqw; }
.lp-bubble.lp-right::after { left: auto; right: 3cqw; }

.room.mini .lp-resident { pointer-events: none; }
.room.mini .lp-res-art,
.room.mini .lp-blink,
.room.mini .lp-wag,
.room.mini .lp-buzz,
.room.mini .lp-notes,
.room.mini .lp-twinkle { animation: none; }

/* A resident's drawing as a portrait (the royal request card and the grand opening). */
.rq-face, .rq-portrait { overflow: hidden; }
.rq-face .lp-res-art { width: 88%; margin-top: 16%; animation: none; }
.rq-portrait .lp-res-art { width: 82%; margin-top: 14%; animation: none; }

/* ——— The castle on the palace map ——— */

.lp-scene {
  position: relative;
  max-width: 1010px;
  margin: 6px auto 0;
  padding: 8px 12px 0;
  overflow: hidden;
  border: 5px solid #fff;
  border-radius: 34px;
  background: linear-gradient(#bde3ff, #e3f3ff 46%, #fde6f3);
  box-shadow: var(--shadow);
  isolation: isolate;
}
.lp-scene.lp-night { background: linear-gradient(#1e2156, #3b3483 52%, #6b55a2); }
.lp-scene .castle { position: relative; z-index: 1; }
.lp-roof { display: block; width: 100%; height: auto; margin-bottom: -4px; overflow: visible; }
.lp-flagwave { animation: lp-flagwave 1.4s ease-in-out infinite alternate; }
.lp-night .lp-twin { fill: #ffe27a; filter: drop-shadow(0 0 6px #ffd54d); }

.lp-garden { position: relative; height: clamp(62px, 12vw, 122px); margin: 10px -12px 0; }
.lp-lawn { display: block; width: 100%; height: 100%; }
.lp-path { position: absolute; left: 50%; top: 0; width: 120px; height: 100%; translate: -50% 0; }
.lp-night .lp-garden { filter: brightness(0.78) saturate(0.85); }
.lp-water { animation: lp-water 1.2s ease-in-out infinite alternate; }

.lp-scenesky { position: absolute; inset: 0; z-index: 0; pointer-events: none; }
.lp-sun {
  position: absolute;
  left: 3%;
  top: 2%;
  width: clamp(30px, 6.5vw, 64px);
  aspect-ratio: 1;
  border: 4px solid var(--outline);
  border-radius: 50%;
  background: radial-gradient(circle at 35% 35%, #fff6c4, #ffd54d 70%);
  box-shadow: 0 0 0 10px rgba(255, 224, 120, 0.35), 0 0 0 22px rgba(255, 224, 120, 0.18);
}
.lp-moon {
  position: absolute;
  left: 4%;
  top: 2%;
  width: clamp(28px, 6vw, 58px);
  aspect-ratio: 1;
  border-radius: 50%;
  box-shadow: inset clamp(-18px, -2.6vw, -9px) clamp(-6px, -0.8vw, -3px) 0 0 #fff3b0;
  filter: drop-shadow(0 0 12px rgba(255, 243, 176, 0.6));
  rotate: -18deg;
}
.lp-nightstars {
  position: absolute;
  inset: 0;
  background:
    radial-gradient(circle, #fff 0 1.4px, transparent 2px) 0 0 / 97px 83px,
    radial-gradient(circle, #fff6c4 0 1.2px, transparent 1.8px) 41px 29px / 131px 109px,
    radial-gradient(circle, #fff 0 1px, transparent 1.6px) 70px 50px / 61px 73px;
  animation: lp-twinkle 2.4s ease-in-out infinite alternate;
}
.lp-cloud { position: absolute; width: clamp(60px, 13vw, 130px); opacity: 0.95; animation: lp-drift 60s linear infinite; }
.lp-cloud svg { display: block; width: 100%; }
.lp-cloud path { fill: #fff; }
.lp-cloud.a { top: 3%; left: 6%; }
.lp-cloud.b { top: 12%; left: 52%; width: clamp(44px, 9vw, 92px); animation-duration: 80s; animation-delay: -30s; }
.lp-rainbow {
  position: absolute;
  left: 50%;
  top: 2%;
  width: 118%;
  aspect-ratio: 1;
  translate: -50% 0;
  border-radius: 50%;
  background: radial-gradient(circle,
    transparent 55%,
    rgba(255, 120, 170, 0.5) 55.5% 57.5%,
    rgba(255, 180, 100, 0.5) 57.5% 59.5%,
    rgba(255, 225, 110, 0.5) 59.5% 61.5%,
    rgba(120, 220, 170, 0.5) 61.5% 63.5%,
    rgba(120, 185, 255, 0.5) 63.5% 65.5%,
    rgba(175, 135, 255, 0.5) 65.5% 67.5%,
    transparent 68%);
}
.lp-firework { position: absolute; width: clamp(40px, 8vw, 80px); overflow: visible; animation: lp-firework 4s ease-out infinite both; }

.lp-snow { position: absolute; inset: 0; z-index: 2; overflow: hidden; pointer-events: none; }
.lp-snow i {
  position: absolute;
  width: var(--s);
  height: var(--s);
  border-radius: 50%;
  background: #fff;
  box-shadow: 0 0 4px rgba(255, 255, 255, 0.9);
  opacity: 0.9;
  animation: lp-snowfall 9s linear infinite;
}

.lp-grow-note { margin: 10px auto 0; text-align: center; font-size: 16px; font-weight: 600; color: var(--ink-soft); }

/* New castle pieces pop in. */
.lp-grow { transform-box: fill-box; transform-origin: 50% 100%; animation: lp-grow 1.1s var(--bounce) 0.4s both; }
span.lp-grow { animation-name: lp-fade-grow; }

@media (max-width: 640px) {
  .lp-scene { padding: 6px 6px 0; border-radius: 24px; border-width: 4px; }
  .lp-garden { margin: 8px -6px 0; }
  .lp-grow-note { font-size: 14px; }
}

@keyframes lp-hop { 0% { transform: none; } 30% { transform: scale(1.08, 0.9); } 60% { transform: translateY(-14%) scale(0.95, 1.06); } 100% { transform: none; } }
@keyframes lp-squish { 0% { transform: none; } 30% { transform: scale(1.14, 0.8); } 60% { transform: scale(0.94, 1.08); } 100% { transform: none; } }
@keyframes lp-wiggle { 0%, 100% { transform: rotate(0); } 20% { transform: rotate(-9deg); } 40% { transform: rotate(8deg); } 60% { transform: rotate(-6deg); } 80% { transform: rotate(4deg); } }
@keyframes lp-rock { 0%, 100% { transform: rotate(0); } 20% { transform: rotate(-7deg); } 45% { transform: rotate(6deg); } 70% { transform: rotate(-4deg); } 88% { transform: rotate(2deg); } }
@keyframes lp-swing { 0%, 100% { transform: rotate(0); } 15% { transform: rotate(10deg); } 35% { transform: rotate(-8deg); } 55% { transform: rotate(5deg); } 75% { transform: rotate(-3deg); } }
@keyframes lp-ripple { 0%, 100% { transform: none; } 25% { transform: scale(1.06, 0.94); } 50% { transform: scale(0.97, 1.04); } 75% { transform: scale(1.02, 0.98); } }
@keyframes lp-spin { from { transform: rotate(0); } to { transform: rotate(720deg); } }
@keyframes lp-lid { 0%, 100% { transform: none; } 20%, 70% { transform: translate(-2px, -16px) rotate(-16deg); } }
@keyframes lp-door { 0%, 100% { transform: scaleX(1); } 22%, 76% { transform: scaleX(0.1); } }
@keyframes lp-drawer { 0%, 100% { transform: none; } 30%, 70% { transform: translateY(14%) scale(1.07); } }
@keyframes lp-books { to { transform: translateY(-9%); } }
@keyframes lp-curtains { 0%, 100% { transform: scaleX(1); } 22%, 74% { transform: scaleX(0.55); } }
@keyframes lp-flag { from { transform: rotate(-14deg); } to { transform: rotate(14deg); } }
@keyframes lp-bloom { 0% { transform: scale(0); } 18%, 84% { transform: scale(1); } 100% { transform: scale(0); } }
@keyframes lp-lights { 0% { opacity: 0; } 10% { opacity: 1; } 16% { opacity: 0.25; } 24%, 84% { opacity: 1; } 100% { opacity: 0; } }
@keyframes lp-glint { 0% { opacity: 0; transform: translateX(-35%); } 50% { opacity: 1; } 100% { opacity: 0; transform: translateX(35%); } }
@keyframes lp-fade { from { opacity: 0; } }
@keyframes lp-rise { 0%, 100% { transform: none; } 30%, 80% { transform: scale(1.1, 1.3); } }
@keyframes lp-steam { 0%, 100% { transform: none; } 45% { transform: translateY(-40%) scale(1.8); } }
@keyframes lp-cloth { from { transform: skewX(-5deg); } to { transform: skewX(5deg); } }
@keyframes lp-ovendoor { 0%, 100% { transform: none; } 20%, 74% { transform: scaleY(-0.3); } }
@keyframes lp-warmair { 0%, 18% { opacity: 0; transform: scale(0.4); } 38% { opacity: 0.95; } 100% { opacity: 0; transform: translateY(-55%) scale(1.5); } }
@keyframes lp-whir { from { transform: scaleX(1); } to { transform: scaleX(-1); } }
@keyframes lp-shake { from { transform: translateX(-1.5%) rotate(-1deg); } to { transform: translateX(1.5%) rotate(1deg); } }
@keyframes lp-dome { 0%, 100% { transform: none; } 22%, 72% { transform: translateY(-26px) rotate(-6deg); } }
@keyframes lp-shown { 0%, 85% { opacity: 1; } 100% { opacity: 0; } }
@keyframes lp-chalk { from { stroke-dashoffset: 100; } 45%, to { stroke-dashoffset: 0; } }
@keyframes lp-pour { 0%, 100% { transform: none; } 22%, 72% { transform: rotate(16deg); } }
@keyframes lp-tea { 0%, 26% { opacity: 0; } 32%, 66% { opacity: 1; } 72%, 100% { opacity: 0; } }
@keyframes lp-puff { 0% { opacity: 0; transform: scale(0.6); } 30% { opacity: 0.9; } 100% { opacity: 0; transform: translateY(-30%) scale(1.2); } }
@keyframes lp-blowout { 0% { transform: none; opacity: 1; } 10%, 62% { transform: scale(0.1); opacity: 0; } 76% { transform: scale(1.3); opacity: 1; } 100% { transform: none; opacity: 1; } }
@keyframes lp-flap { from { transform: rotate(-8deg); } to { transform: rotate(8deg); } }
@keyframes lp-zzz {
  0% { opacity: 0; transform: translate(-50%, 0) scale(0.5); }
  20% { opacity: 1; }
  100% { opacity: 0; transform: translate(calc(-50% + 5cqw), -16cqw) scale(1.25) rotate(12deg); }
}
@keyframes lp-breathe { 0%, 100% { transform: none; } 50% { transform: scale(1.015, 0.985); } }
@keyframes lp-walk { from { transform: translateY(0) rotate(-4deg); } to { transform: translateY(-5%) rotate(4deg); } }
@keyframes lp-wag { from { transform: rotate(-8deg); } to { transform: rotate(10deg); } }
@keyframes lp-buzz { from { transform: scaleX(1); } to { transform: scaleX(0.82); } }
@keyframes lp-notes { from { transform: translateY(0); } to { transform: translateY(-6px); } }
@keyframes lp-twinkle { from { opacity: 0.55; } to { opacity: 1; } }
@keyframes lp-flagwave { from { transform: skewY(0) scaleX(1); } to { transform: skewY(7deg) scaleX(0.86); } }
@keyframes lp-water { from { transform: translateY(0); opacity: 0.85; } to { transform: translateY(-3px); opacity: 1; } }
@keyframes lp-drift { from { translate: -40vw 0; } to { translate: 110vw 0; } }
@keyframes lp-firework { 0% { opacity: 0; transform: scale(0.2); } 12% { opacity: 1; } 40% { opacity: 1; transform: scale(1); } 60%, 100% { opacity: 0; transform: scale(1.15); } }
@keyframes lp-snowfall { from { transform: translate(0, -40vh); } to { transform: translate(24px, 100vh); } }
@keyframes lp-grow { 0% { opacity: 0; transform: scale(0.2); } 100% { opacity: 1; transform: none; } }
@keyframes lp-fade-grow { from { opacity: 0; } }

@media (prefers-reduced-motion: reduce) {
  .lp-res-art, .lp-blink, .lp-wag, .lp-buzz, .lp-notes, .lp-twinkle, .lp-flagwave, .lp-water, .lp-cloud, .lp-nightstars,
  .lp-firework, .lp-snow i, .lp-grow { animation: none; }
  .lp-resident { transition: none; }
}
