:root{--ink:#344a38;--cream:#fffaf0;--green:#357b61;--shadow:0 12px 34px #244d3640;--font:"Hiragino Maru Gothic ProN","Yu Gothic","Meiryo",system-ui,sans-serif}*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:var(--font);color:var(--ink)}body{background:radial-gradient(circle at 12% 8%,#fff4cd 0,transparent 24%),linear-gradient(155deg,#eaf9ed,#e4f4ff 58%,#f7f0e8);display:grid;place-items:center;padding:clamp(8px,2vw,24px)}button{font:inherit;cursor:pointer;border:0;touch-action:manipulation}button:focus-visible{outline:4px solid #ff9d40;outline-offset:3px}button:disabled{opacity:.6;cursor:wait}.app{width:min(1100px,100%)}.topbar,.foot{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:9px 5px}.brand{font-weight:900;letter-spacing:.04em;font-size:clamp(15px,2.3vw,20px)}.brand-icon{color:#ec8e71;font-size:24px}.toolbar{display:flex;gap:8px}.tool{background:#ffffffd9;border:2px solid #d3e7dd;border-radius:20px;min-height:44px;padding:7px 14px;font-weight:800;color:#35735d;box-shadow:0 3px 9px #39553a13}.game{position:relative;aspect-ratio:3/2;width:100%;isolation:isolate;overflow:hidden;background:#95cbec;border:7px solid #fff8e7;border-radius:27px;box-shadow:var(--shadow)}.backdrop{position:absolute;inset:0;background-position:center;background-size:100% 100%;transition:opacity .35s}.sunshine{position:absolute;inset:0;pointer-events:none;background:linear-gradient(120deg,#ffffff26,transparent 42%)}.ambient,.spark-layer{position:absolute;inset:0;pointer-events:none;overflow:hidden}.sprite{position:absolute;bottom:16%;width:clamp(65px,20%,210px);z-index:2;filter:drop-shadow(0 10px 5px #1b37282b);transform-origin:center bottom;transition:left .75s ease,bottom .75s ease,opacity .4s}.sprite img{display:block;width:100%;height:auto}.sprite.mogu{left:19%;animation:bob 2s ease-in-out infinite}.sprite.lulu{left:64%;width:18%;animation:bob 2.3s ease-in-out infinite .25s}.sprite.walk{animation:walk .36s ease-in-out infinite alternate}.sprite.jump{animation:jump .65s ease-in-out 2}.sprite[hidden],.scene-label[hidden],.dialog[hidden],.title-overlay[hidden],.ending[hidden],.tool[hidden]{display:none!important}.scene-label{position:absolute;left:3%;top:3%;background:#fff9e8e8;color:#537e61;padding:8px 20px;border-radius:99px;font-weight:900;font-size:clamp(12px,1.9vw,19px);box-shadow:0 3px 8px #233b3120}.title-overlay{position:absolute;inset:0;z-index:4;display:flex;align-items:center;justify-content:center;flex-direction:column;text-align:center;padding:3% 3% 5%;background:linear-gradient(180deg,#ffffff26,#fffae43b 75%)}.title-kicker{background:#ffffffcf;border-radius:100px;padding:6px 18px;font-weight:800;color:#40785e;font-size:clamp(11px,1.8vw,18px)}h1{margin:1% 0 0;font-size:clamp(43px,9.5vw,108px);line-height:1.05;letter-spacing:.08em;color:#fffef3;text-shadow:0 6px 0 #488569,0 10px 13px #255c4d88,-2px -2px 0 #478465}h1 span{color:#ffef8d;text-shadow:0 6px 0 #dc865d,0 11px 18px #8e603477}.title-overlay p{font-size:clamp(14px,2.6vw,28px);font-weight:900;color:#315840;text-shadow:1px 2px #fff;margin:1.3% 0 2.3%}.title-overlay small{margin-top:1.1%;background:#fffcf1aa;padding:4px 12px;border-radius:30px;font-size:clamp(10px,1.5vw,15px)}.primary,.secondary,.ghost{min-height:48px;border-radius:99px;font-weight:900;letter-spacing:.03em;box-shadow:0 5px 0 #00000020,0 7px 14px #2f49392e;transition:transform .16s,filter .16s,box-shadow .16s}.primary{padding:13px 29px;background:linear-gradient(#ffcf78,#ffa94e);color:#653e23;border:3px solid #fff4c9;font-size:clamp(14px,2.2vw,22px)}.secondary{padding:12px 25px;background:linear-gradient(#b4ebce,#7ac6a8);color:#245f4a;border:3px solid #e9fff4;font-size:clamp(13px,1.8vw,18px)}.ghost{padding:11px 25px;background:#fff9ec;color:#53745b;border:2px solid #b9d6b9;font-size:clamp(13px,1.8vw,18px)}button:not(:disabled):active{transform:translateY(4px);box-shadow:0 1px 0 #00000020}.dialog{position:absolute;z-index:5;left:5%;right:5%;bottom:3.5%;min-height:25%;border-radius:22px;background:#fffdf3f5;border:3px solid #fff;box-shadow:0 5px 0 #92af9b,0 10px 26px #273f3260;padding:2.1% 3% 1.7%;display:flex;align-items:center;justify-content:space-between;gap:2%}.dialog-tag{position:absolute;top:-17px;left:24px;background:#69aa8c;border:3px solid #fff;color:white;border-radius:30px;padding:3px 22px;font-weight:900;font-size:clamp(12px,1.7vw,18px)}#line{margin:4px 0 0;flex:1;font-size:clamp(15px,2.65vw,31px);font-weight:900;line-height:1.5;white-space:pre-line}.choices{display:flex;align-items:center;justify-content:center;gap:10px;flex-wrap:wrap;max-width:60%}.choices button{white-space:normal}.ending{position:absolute;inset:0;z-index:6;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding-top:7%;text-align:center;background:linear-gradient(#fffef5aa 0%,#fffef3b9 52%,#fff9e8e9 100%)}.ending-chip{border-radius:99px;background:#fff6d0;padding:9px 18px;font-weight:900;color:#bb7948;font-size:clamp(13px,2vw,20px)}.ending h2{margin:2% 0 1%;color:#45846b;text-shadow:2px 3px white;font-size:clamp(26px,5.4vw,63px)}.ending p{font-size:clamp(12px,2vw,21px);font-weight:800;margin:0 3% 2%;white-space:pre-line}.ending-actions{display:flex;justify-content:center;flex-wrap:wrap;gap:9px;max-width:93%}.ending-actions button{font-size:clamp(11px,1.65vw,17px);min-height:44px;padding:10px 15px}.transition{position:absolute;z-index:9;inset:0;background:#fff8df;opacity:0;pointer-events:none;transition:opacity .22s}.transition.on{opacity:1}.particle{position:absolute;font-size:clamp(14px,2.2vw,24px);animation:floatUp 1.3s ease-out forwards}.float-deco{position:absolute;animation:drift 5s ease-in-out infinite;opacity:.86;font-size:clamp(18px,3vw,34px)}.foot{font-size:clamp(10px,1.5vw,14px);color:#607e69;font-weight:700}.foot span:last-child{text-align:right}@keyframes bob{50%{transform:translateY(-6px)}}@keyframes walk{100%{transform:translateY(-7px) rotate(2deg)}}@keyframes jump{50%{transform:translateY(-22px)}}@keyframes floatUp{0%{opacity:0;transform:translateY(20px) scale(.6)}20%{opacity:1}100%{opacity:0;transform:translateY(-85px) rotate(25deg) scale(1.25)}}@keyframes drift{50%{transform:translate(12px,-10px) rotate(8deg)}}@media(max-width:640px){body{padding:4px}.game{border-width:4px;border-radius:17px}.topbar{padding:5px 2px}.tool{min-height:42px;padding:5px 9px}.foot{padding:6px 2px}.dialog{left:2%;right:2%;bottom:2%;min-height:38%;padding:5% 3% 2%;border-radius:12px;flex-direction:column;gap:1px}.dialog-tag{top:-13px;left:8px;padding:1px 11px}.choices{max-width:100%;gap:5px}.choices button{min-height:35px;padding:4px 10px;border-width:2px;font-size:clamp(10px,2.35vw,15px)}#line{font-size:clamp(12px,3vw,19px);margin:0;flex:0;text-align:center;line-height:1.25}.sprite{bottom:30%;width:17%}.sprite.lulu{bottom:28%}.ending{padding-top:3%}.ending-chip{padding:3px 12px}.ending h2{margin:1% 0}.ending p{margin-bottom:1%}.ending-actions{gap:5px}.ending-actions button{min-height:34px;padding:4px 9px;font-size:clamp(10px,2.1vw,13px)}.title-overlay small{display:none}}@media(orientation:portrait) and (max-width:640px){.game{aspect-ratio:3/2}.title-overlay{padding:0}.title-overlay p{margin:1% 0 1%}.primary.start{padding:7px 17px;min-height:38px}.scene-label{padding:3px 9px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}

/* Version 2: viewport fit (maintains 3:2 without cropping) */
html,body{height:100%;min-height:0}body{min-height:100dvh;padding:4px;overflow:auto}.app{width:min(1100px,100%,calc((100dvh - 108px)*1.5));margin:auto}.game{max-height:calc(100dvh - 108px)}.topbar,.foot{min-height:40px}.toolbar{flex-wrap:wrap;justify-content:flex-end}
@media(max-height:590px){.app{width:min(1100px,100%,calc((100dvh - 76px)*1.5))}.game{max-height:calc(100dvh - 76px)}.topbar,.foot{min-height:30px;padding:2px}.tool{min-height:32px;padding:3px 8px}}
/* End screen: clear characters, UI in header and footer instead of fogging the scene */
.ending{background:none;justify-content:space-between;padding:2% 2% 3%;pointer-events:none}.ending-chip,.ending h2,.ending p,.ending-actions{pointer-events:auto}.ending-chip{font-size:clamp(11px,1.5vw,17px);padding:3px 12px}.ending h2{margin:.5% 0 auto;font-size:clamp(24px,4.5vw,51px);color:#24684f;text-shadow:0 2px 0 #fff,1px 3px 5px #fff}.ending p{margin:auto 0 .8%;padding:5px 12px;border-radius:16px;background:#fffdf0ed;font-size:clamp(11px,1.6vw,19px)}.ending-actions{padding:5px 8px;background:#fffdf0e8;border:2px solid #fff;border-radius:18px;box-shadow:0 4px 12px #315a3925}.ending-actions button{font-size:clamp(10px,1.4vw,16px)}.sprite{z-index:3}.ending{z-index:6}.sprite.mogu{bottom:15%}.sprite.lulu{bottom:15%}
/* Small interactive event scenes */
.secret-spot{position:absolute;z-index:4;left:60%;top:37%;width:11%;min-width:46px;aspect-ratio:1;border-radius:99px;border:3px solid #fff8e6;background:#fff9ceeb;box-shadow:0 0 0 5px #ffecab66,0 5px 15px #35583d6b;display:flex;align-items:center;justify-content:center;font-size:clamp(17px,3vw,35px);animation:hintPulse 1.6s ease-in-out infinite;isolation:isolate}.secret-spot[hidden],.event-sprite[hidden]{display:none!important}.secret-spot.stream{left:64%;top:38%;background:#d3f6ffeb}.pointer-hand{position:absolute;top:55%;right:-25%;font-size:clamp(19px,3.2vw,34px);filter:drop-shadow(0 2px 2px #fff);animation:hintTap .85s ease-in-out infinite alternate}.spot-label{position:absolute;bottom:-45%;white-space:nowrap;background:#fffdf2;color:#356f56;border-radius:30px;padding:3px 9px;font-weight:900;font-size:clamp(9px,1.5vw,15px)}.event-sprite{position:absolute;z-index:5;left:54%;top:32%;font-size:clamp(54px,9vw,110px);filter:drop-shadow(0 6px 4px #315e5066);animation:creaturePop 2.4s ease-out forwards;pointer-events:none}.event-sprite.stream{left:57%;top:37%}@keyframes hintPulse{50%{transform:scale(1.1);box-shadow:0 0 0 13px #fff3a622,0 7px 15px #35583d5c}}@keyframes hintTap{to{transform:translate(-5px,-7px) rotate(-15deg)}}@keyframes creaturePop{0%{opacity:0;transform:translateY(50px) scale(.3)}18%{opacity:1;transform:translateY(-15px) scale(1.13)}35%,70%{opacity:1;transform:translateY(-7px) scale(1)}100%{opacity:0;transform:translateY(30px) scale(.7)}}
@media(max-width:640px){.ending{padding:2% 1%}.ending-actions{padding:3px;gap:3px}.ending-actions button{padding:4px 7px;min-height:33px}.ending h2{font-size:clamp(17px,4.3vw,29px)}.ending-chip{padding:2px 7px}.ending p{padding:2px 7px;margin-bottom:2px}.topbar .brand{font-size:clamp(12px,2.9vw,17px)}.tool{min-height:34px;padding:4px 9px}.sprite.mogu,.sprite.lulu{bottom:21%}}
@media(prefers-reduced-motion:reduce){.secret-spot,.pointer-hand,.event-sprite{animation:none!important}}

/* V3: matching illustrated assets, responsive layout and compact dialogue */
html,body{margin:0;min-height:100%;height:auto}body{padding:clamp(2px,.5vh,6px);box-sizing:border-box}.app{width:min(1100px,100%,calc((100dvh - 92px)*1.5));max-width:none;margin:0 auto}.game{aspect-ratio:3/2;max-height:calc(100dvh - 92px);container-type:inline-size}.topbar{min-height:42px;padding:1px 5px}.foot{min-height:29px;padding:1px 4px}.backdrop{background-size:100% 100%}.sunshine{display:none}.sprite.mogu{width:16%;bottom:32%;z-index:3}.sprite.lulu{width:16%;bottom:27%;z-index:3}.dialog{min-height:0;max-height:30%;bottom:2.3%;padding:1.1% 2.4%;gap:2%;left:3%;right:3%;border-radius:18px;background:#fffdf6f4;flex-direction:row;box-sizing:border-box}.dialog-tag{font-size:clamp(11px,1.65cqw,17px);top:-13px}#line{font-size:clamp(11px,2.45cqw,24px);line-height:1.35;flex:1;margin:0}.choices{max-width:48%;gap:5px}.choices button{font-size:clamp(10px,1.65cqw,17px);min-height:clamp(32px,4.5cqw,47px);padding:6px 12px;white-space:normal}.scene-label{font-size:clamp(10px,1.7cqw,18px)}.event-sprite{width:13%;height:auto;font-size:0;left:58%;top:30%;display:block}.event-sprite img{display:block;width:100%;height:auto}.event-sprite.stream{left:59%;top:36%}.secret-spot{left:68%;top:39%;width:7.5%;min-width:38px}.secret-spot.stream{left:65%;top:41%}.ending{background:none;pointer-events:none;padding:2% 1.5% 2%;z-index:5}.ending>*{pointer-events:auto}.ending h2{font-size:clamp(18px,4.5cqw,47px);margin:0 auto}.ending-chip{font-size:clamp(10px,1.7cqw,17px)}.ending p{margin-top:auto;margin-bottom:.5%;font-size:clamp(10px,1.6cqw,17px)}.ending-actions{max-width:96%;padding:4px;gap:6px}.ending-actions button{min-height:34px;padding:5px 12px;font-size:clamp(10px,1.4cqw,16px)}.sprite.mogu,.sprite.lulu{filter:drop-shadow(0 3px 2px #2a583a33)}.sprite[hidden]{display:none!important}.tool{font-size:clamp(11px,1.5vw,16px)}@media(max-width:640px){.app{width:min(100%,calc((100dvh - 77px)*1.5))}.game{max-height:calc(100dvh - 77px);border-width:3px;border-radius:12px}.topbar{min-height:36px}.foot{min-height:22px;font-size:9px}.dialog{flex-direction:row;left:2%;right:2%;bottom:1.8%;max-height:32%;min-height:24%;padding:2% 2%;gap:1%}.dialog-tag{left:10px;top:-10px;padding:1px 8px}.choices{max-width:46%;gap:3px}.choices button{font-size:clamp(9px,1.9cqw,14px);padding:4px 7px;min-height:30px}#line{font-size:clamp(10px,2.45cqw,19px);line-height:1.22;text-align:left;flex:1}.sprite.mogu{bottom:31%;width:17%}.sprite.lulu{bottom:30%;width:17%}.ending-actions button{font-size:clamp(9px,1.8cqw,13px);padding:4px 6px}.ending h2{font-size:clamp(16px,4.4cqw,28px)}.title-overlay h1{font-size:clamp(23px,8cqw,65px)}.title-overlay p{font-size:clamp(10px,2.8cqw,20px)}.title-kicker{font-size:clamp(9px,1.8cqw,15px)}.tool{min-height:30px;padding:3px 7px}.brand{font-size:clamp(12px,2.4vw,16px)}}

/* V4: clear dialogue header and reliable character placement */
.dialog{padding-top:3.7%;}
.dialog-tag{top:0;left:3%;transform:translateY(-45%);z-index:2;}
#line{margin-top:10px;}
.sprite.lulu.face-right img{transform:scaleX(-1);}
/* Stop scaling type and control positions independently of the playfield. */
@media(max-width:640px){.dialog{padding-top:6%;}.dialog-tag{top:0;transform:translateY(-48%)}#line{margin-top:7px;}}
@media(min-width:641px){.sprite.mogu{width:20%;}}


/* Beta polish: align characters, make event feedback readable, honor character artwork. */
.dialog{padding-top:3.7%;}.dialog-tag{top:0;left:3%;transform:translateY(-45%);z-index:2}#line{margin-top:10px}
.sprite img{width:100%;height:auto;display:block}.sprite.mogu{width:20%;}.sprite.lulu{width:18%;}
.sprite.lulu.face-right img{transform:scaleX(-1)}
.reaction{position:absolute;z-index:6;left:39%;top:26%;max-width:46%;border:3px solid #fff9ec;border-radius:24px;background:#fffdf0f7;color:#356b54;font-weight:900;font-size:clamp(13px,2.4cqw,25px);padding:10px 16px;box-shadow:0 8px 18px #334c3a44;animation:reactionAppear .3s ease-out;text-align:center;pointer-events:none}
.reaction[hidden]{display:none!important}
@keyframes reactionAppear{from{opacity:0;transform:translateY(14px) scale(.85)}to{opacity:1;transform:none}}
/* Event sprite stays above scene but does not cover dialogue. */
.event-sprite.bee{left:65%;top:33%;width:12%;animation:beeFlight 2.5s ease-in-out forwards}
.event-sprite.stream.fish-hop{left:60%;top:39%;width:12%;animation:fishJump 2.5s ease-in-out forwards}
@keyframes beeFlight{0%{opacity:0;transform:translate(15px,34px) scale(.5)}22%{opacity:1;transform:translate(0,-9px) scale(1)}45%{opacity:1;transform:translate(9px,-28px) rotate(-8deg)}76%{opacity:1;transform:translate(-9px,-13px) rotate(6deg)}100%{opacity:0;transform:translate(20px,-38px) scale(.7)}}
@keyframes fishJump{0%{opacity:0;transform:translateY(55px) scale(.6) rotate(-20deg)}22%{opacity:1;transform:translateY(-25px) scale(1) rotate(-14deg)}45%{opacity:1;transform:translateY(-48px) rotate(6deg)}75%{opacity:1;transform:translateY(-8px) rotate(15deg)}100%{opacity:0;transform:translateY(55px) rotate(30deg)}}
.sprite.mogu.surprised{animation:surprisedPop .45s ease-out 1}
@keyframes surprisedPop{0%{transform:scale(.95)}45%{transform:translateY(-14px) scale(1.06)}100%{transform:none}}
.sprite.reunion-bounce{animation:reunionJoy .85s ease-in-out 2}
@keyframes reunionJoy{0%,100%{transform:translateY(0)}42%{transform:translateY(-18px)}72%{transform:translateY(-3px)}}
/* Maintain compact interface on mobile, without clipping or tiny overlay controls. */
@media(max-width:640px){.dialog{padding-top:6%}.dialog-tag{top:0;transform:translateY(-48%)}#line{margin-top:6px}.reaction{font-size:clamp(10px,2.2cqw,18px);padding:5px 9px;left:37%;top:27%;border-width:2px}}
@media(prefers-reduced-motion:reduce){.sprite.reunion-bounce,.sprite.mogu.surprised,.event-sprite.bee,.event-sprite.fish-hop,.reaction{animation:none!important}}
/* Beta usability: keep touch target fixed; animate only the finger cue. */
.secret-spot{animation:none!important;transform:none!important}

/* Reunion: the two characters turn toward each other, approach, then celebrate. */
.sprite.mogu.face-left img{transform:scaleX(-1)}
.sprite.reunion-lulu{animation:luluMeet 1.3s ease-in-out both}
.sprite.reunion-mogu{animation:moguMeet 1.3s ease-in-out both}
@keyframes luluMeet{0%{transform:translateX(0)}32%{transform:translateX(13%) translateY(-15px)}60%{transform:translateX(18%) translateY(0)}78%{transform:translateX(18%) translateY(-12px)}100%{transform:translateX(18%)}}
@keyframes moguMeet{0%{transform:translateX(0)}32%{transform:translateX(-13%) translateY(-15px)}60%{transform:translateX(-18%) translateY(0)}78%{transform:translateX(-18%) translateY(-12px)}100%{transform:translateX(-18%)}}
@media(prefers-reduced-motion:reduce){.sprite.reunion-lulu{animation:none;transform:translateX(18%)}.sprite.reunion-mogu{animation:none;transform:translateX(-18%)}}

/* Beta 1.3: Japanese reaction stays above creatures and out of their flight paths. */
html[lang="ja"] .reaction{left:34%;top:18%;max-width:37%;font-size:clamp(12px,2.3cqw,24px);padding:9px 14px;}
@media(max-width:640px){html[lang="ja"] .reaction{left:31%;top:16%;max-width:42%;font-size:clamp(10px,2.15cqw,17px);padding:5px 8px;}}

/* Site navigation and explicit sound status */
.site-home{display:inline-flex;align-items:center;justify-content:center;text-decoration:none;white-space:nowrap}
#soundBtn{white-space:nowrap}
@media(max-width:640px){.site-home{font-size:clamp(10px,2.2vw,13px);padding-inline:5px}#soundBtn{padding-inline:5px}}

/* Celebration remains visible above the ending overlay; static icons for reduced-motion preferences. */
.spark-layer{z-index:7}
.particle-still{animation:none!important;opacity:1!important;transform:none!important;filter:drop-shadow(0 1px 2px #fff)}

/* Reunion celebration: always-visible festive elements inside the ending layer.
   This supplements (does not replace) the existing floating particles. */
.ending .reunion-decor{position:absolute;inset:0;pointer-events:none;overflow:hidden;z-index:0}
.ending .reunion-decor-item{position:absolute;display:block;font-size:clamp(18px,3.2vw,38px);line-height:1;opacity:.95;filter:drop-shadow(0 1px 2px #fff);animation:reunionTwinkle 2.4s ease-in-out infinite alternate}
.ending .reunion-decor-item.d1{left:7%;top:11%;animation-delay:0s}
.ending .reunion-decor-item.d2{right:10%;top:12%;animation-delay:.3s}
.ending .reunion-decor-item.d3{left:17%;top:45%;animation-delay:.7s}
.ending .reunion-decor-item.d4{right:18%;top:43%;animation-delay:1.1s}
.ending .reunion-decor-item.d5{left:8%;bottom:16%;animation-delay:1.4s}
.ending .reunion-decor-item.d6{right:8%;bottom:17%;animation-delay:1.8s}
.ending > :not(.reunion-decor){position:relative;z-index:1}
@keyframes reunionTwinkle{0%{transform:translateY(2px) rotate(-8deg) scale(.85);opacity:.7}100%{transform:translateY(-9px) rotate(8deg) scale(1.1);opacity:1}}
@media(prefers-reduced-motion:reduce){.ending .reunion-decor-item{animation:none!important;opacity:1!important;transform:none!important}}
@media(max-width:640px){.ending .reunion-decor-item.d3{left:5%;top:51%}.ending .reunion-decor-item.d4{right:5%;top:51%}}

/* Reunion-only celebration (2026-11-07): no JS particle timers or removal.
   Separate from spark-layer, which remains available for in-game interactions. */
.ending .reunion-decor {
  position:absolute;inset:0;display:block;z-index:2;
  overflow:hidden;pointer-events:none;contain:layout paint;
}
.ending .reunion-decor-item {
  position:absolute;display:block;line-height:1;
  font-size:clamp(22px,3.2cqw,39px);opacity:1;
  text-shadow:0 2px 3px #ffffffd9;
  filter:none;pointer-events:none;
  animation-duration:3.6s;animation-timing-function:ease-in-out;
  animation-iteration-count:infinite;animation-direction:alternate;
}
.ending .reunion-decor-item:nth-child(odd) {animation-name:reunionPetalFloat;}
.ending .reunion-decor-item:nth-child(even) {animation-name:reunionStarShine;}
.ending .reunion-decor-item.d1  {left:7%;top:13%;animation-delay:-.5s}
.ending .reunion-decor-item.d2  {left:25%;top:9%;animation-delay:-1.3s}
.ending .reunion-decor-item.d3  {right:7%;top:17%;animation-delay:-2s}
.ending .reunion-decor-item.d4  {right:23%;top:10%;animation-delay:-.7s}
.ending .reunion-decor-item.d5  {left:7%;top:45%;animation-delay:-2.7s}
.ending .reunion-decor-item.d6  {right:8%;top:47%;animation-delay:-1.1s}
.ending .reunion-decor-item.d7  {left:21%;top:62%;animation-delay:-3s}
.ending .reunion-decor-item.d8  {right:24%;top:64%;animation-delay:-2.4s}
.ending .reunion-decor-item.d9  {left:8%;bottom:13%;animation-delay:-1.8s}
.ending .reunion-decor-item.d10 {right:8%;bottom:13%;animation-delay:-3.1s}
.ending .reunion-decor-item.d11 {left:37%;top:13%;animation-delay:-2.2s}
.ending .reunion-decor-item.d12 {right:38%;top:17%;animation-delay:-.2s}
@keyframes reunionPetalFloat {
  from {transform:translate3d(-9px,-16px,0) rotate(-18deg) scale(.92);opacity:.82}
  to {transform:translate3d(10px,24px,0) rotate(19deg) scale(1.08);opacity:1}
}
@keyframes reunionStarShine {
  from {transform:translate3d(0,3px,0) scale(.72) rotate(-12deg);opacity:.62}
  to {transform:translate3d(0,-8px,0) scale(1.15) rotate(12deg);opacity:1}
}
/* Motion preference: visible decorations remain, but do not animate. */
@media(prefers-reduced-motion:reduce){
  .ending .reunion-decor-item {animation:none!important;opacity:1!important;transform:none!important}
}
