/* Atmosphere is visual only; never intercepts interaction. */
.theme-atmosphere{position:fixed;inset:0;pointer-events:none;z-index:4;overflow:hidden;contain:strict;opacity:0;transition:opacity .65s ease}
body.world-of-warcraft .theme-atmosphere,body.tron .theme-atmosphere,body.doctor-who .theme-atmosphere,body.after-hours .theme-atmosphere,body.oasis .theme-atmosphere{opacity:1}
.theme-atmosphere .mote{position:absolute;left:var(--x);top:var(--y);width:var(--s);height:var(--s);border-radius:50%;opacity:0;animation:mote-drift var(--duration) linear infinite;animation-delay:var(--delay);will-change:transform,opacity}
body.world-of-warcraft .mote{background:#f2c966;box-shadow:0 0 7px 3px #d59a3d80}
body.doctor-who .mote{background:#b6efff;box-shadow:0 0 9px 2px #52acff80;animation-name:star-drift}
body.after-hours .mote{background:#fc72bc;box-shadow:0 0 12px #ddff59;animation-name:confetti-drift;border-radius:2px}
body.tron .mote{width:2px;height:var(--s);border-radius:0;background:#3beaff;box-shadow:0 0 9px 2px #29eaff94;animation-name:tron-trace}
body.oasis .mote{background:linear-gradient(180deg,#7af3ff,#bf76ff);box-shadow:0 0 12px 2px rgba(122,243,255,.36);animation-name:oasis-drift}
@keyframes mote-drift{0%{transform:translate3d(0,35px,0) scale(.6);opacity:0}15%{opacity:.75}80%{opacity:.5}100%{transform:translate3d(25px,-85px,0) scale(1.25);opacity:0}}
@keyframes star-drift{0%{transform:rotate(0deg) translate3d(0,18px,0);opacity:0}20%{opacity:.6}80%{opacity:.7}100%{transform:rotate(40deg) translate3d(42px,-70px,0);opacity:0}}
@keyframes confetti-drift{0%{transform:rotate(0) translateY(0);opacity:0}20%{opacity:.6}85%{opacity:.4}100%{transform:rotate(130deg) translateY(-80px);opacity:0}}
@keyframes tron-trace{0%{opacity:0;transform:translateY(-70px) scaleY(.4)}15%{opacity:.7}70%{opacity:.55}100%{opacity:0;transform:translateY(160px) scaleY(2)}}
body.tron .hero::after{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(105deg,transparent 30%,#26eaff0d 49%,transparent 65%);background-size:250% 100%;animation:tron-sweep 8s linear infinite}
body.tron .project-art{animation:tron-panel-glow 5s ease-in-out infinite alternate}
@keyframes tron-sweep{from{background-position:220% 0}to{background-position:-140% 0}}
@keyframes tron-panel-glow{from{filter:drop-shadow(0 0 1px #00dfff44)}to{filter:drop-shadow(0 0 10px #00dfff75)}}
body.world-of-warcraft .project-art{animation:wow-glow 6s ease-in-out infinite alternate}
@keyframes wow-glow{from{filter:drop-shadow(0 0 2px #cfa34830)}to{filter:drop-shadow(0 0 10px #ffc96475)}}
body.after-hours .hero-doodle{animation:after-wobble 10s ease-in-out infinite}
@keyframes after-wobble{50%{transform:rotate(14deg) scale(1.08)}}
body.editorial .project-art{transition:transform .45s ease,box-shadow .45s ease}
/* One short transition when styles change, with no obstruction or flashing. */
.theme-transition{position:fixed;inset:0;pointer-events:none;z-index:100;opacity:0;background:radial-gradient(circle at 50% 50%,var(--sage-light),transparent 75%)}
.theme-transition.play{animation:theme-flare .65s ease-out forwards}
@keyframes theme-flare{0%{opacity:0}28%{opacity:.4}100%{opacity:0}}
@media(prefers-reduced-motion:reduce){.theme-atmosphere{display:none!important}.theme-transition{display:none!important}body.tron .hero::after,body.tron .project-art,body.world-of-warcraft .project-art,body.doctor-who .hero::before,body.after-hours .hero-doodle{animation:none!important}}

@keyframes oasis-drift{0%{transform:translate3d(0,25px,0) scale(.5);opacity:0}18%{opacity:.62}70%{opacity:.45}100%{transform:translate3d(36px,-92px,0) scale(1.2);opacity:0}}
body.oasis .project-art{animation:oasis-panel 7s ease-in-out infinite alternate}
body.oasis .hero::after{animation:oasis-beacon 8s ease-in-out infinite alternate}
@keyframes oasis-panel{from{box-shadow:0 0 0 1px rgba(122,243,255,.12) inset,0 18px 40px rgba(5,10,19,.25)}to{box-shadow:0 0 0 1px rgba(122,243,255,.22) inset,0 18px 55px rgba(63,151,255,.15)}}
@keyframes oasis-beacon{from{opacity:.55;transform:scale(.96)}to{opacity:.88;transform:scale(1.05)}}
