/* Setia Kiddo — shared story player styles. Each story sets its colours on :root (see the story's index.html). */
:root{
  --bg:#fff8e1; --ink:#2b2a1a; --accent:#f28c28; --accent-dk:#c4661a; --accent2:#2fa865; --soft:#ffe2bf; --muted:#7a6a50;
  --sky1:#8fd3ff; --sky2:#d9f3ff; --hill1:#7ccf6a; --hill2:#4fae4f; --grass:#5cbf4a; --grass-dk:#3a9a3a;
  --chip-narr:#ff5c8a; --iris:#1f2a14;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:radial-gradient(circle at 12% 8%,var(--soft),transparent 40%),radial-gradient(circle at 92% 92%,#d4f3d8,transparent 45%),var(--bg);
  color:var(--ink);font-family:"Baloo 2","Baloo Thambi 2","Noto Sans Sinhala","Nirmala UI","Iskoola Pota","Microsoft YaHei","PingFang SC","Noto Sans SC","Segoe UI",system-ui,sans-serif;display:flex;flex-direction:column;align-items:center;min-height:100vh}
header{width:min(100%,1280px);padding:10px 16px 6px;display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}
header h1{margin:0;font-size:clamp(18px,2.6vw,30px);font-weight:800;color:var(--accent-dk);line-height:1.1}
.home{display:inline-flex;align-items:center;gap:6px;height:40px;padding:0 14px;border-radius:999px;background:#fff;color:inherit;text-decoration:none;font-weight:800;font-size:15px;white-space:nowrap;box-shadow:0 2px 0 var(--soft);flex:none}
.langs{display:flex;gap:6px;flex-wrap:wrap}
.langs button,.ctl button{font:inherit;font-weight:700;border:0;border-radius:999px;cursor:pointer;transition:transform .15s,background .15s}
.langs button{background:#fff;color:var(--ink);padding:6px 14px;box-shadow:0 2px 0 var(--soft);font-size:15px}
.langs button.on{background:var(--accent);color:#fff;box-shadow:0 2px 0 var(--accent-dk)}
.langs button:hover,.ctl button:hover{transform:translateY(-2px)}
.wrap{width:min(100%,1280px,calc((100vh - 150px) * 16 / 9));padding:0 16px}
.stage{position:relative;width:100%;aspect-ratio:16/9;border-radius:18px;overflow:hidden;background:var(--sky1);container-type:inline-size;box-shadow:0 10px 30px rgba(60,40,10,.28);user-select:none}
.stage.shake{animation:stageshake .5s linear}
@keyframes stageshake{0%,100%{transform:none}20%{transform:translate(-.6cqw,.3cqw)}40%{transform:translate(.6cqw,-.3cqw)}60%{transform:translate(-.4cqw,.2cqw)}80%{transform:translate(.4cqw,0)}}
/* painted nature backdrop (title / ending scenes and behind the photo) */
.sky{position:absolute;inset:0;background:linear-gradient(var(--sky1),var(--sky2) 62%)}
.bg{position:absolute;inset:-6%;background-size:cover;background-position:center;filter:blur(14px) saturate(1.25) brightness(1);transform:scale(1.1);opacity:.55;transition:opacity .6s}
.stage.painted .bg{opacity:.25}
.hills{position:absolute;left:-10%;right:-10%;bottom:12%;height:34%;pointer-events:none}
.hills i{position:absolute;bottom:0;border-radius:50% 50% 0 0;background:var(--hill1)}
.hills i:nth-child(1){left:0;width:55%;height:70%;background:var(--hill2);opacity:.75}
.hills i:nth-child(2){left:35%;width:70%;height:100%;opacity:.8}
.hills i:nth-child(3){left:-5%;width:45%;height:55%;background:var(--hill1)}
.cloud{position:absolute;height:3.6cqw;background:#fff;border-radius:999px;opacity:.9;filter:drop-shadow(0 .3cqw .2cqw rgba(0,0,0,.06));animation:drift linear infinite;z-index:1}
.cloud::before,.cloud::after{content:"";position:absolute;background:#fff;border-radius:50%}
.cloud::before{width:45%;height:160%;left:15%;bottom:20%}.cloud::after{width:35%;height:130%;left:48%;bottom:25%}
@keyframes drift{from{transform:translateX(-30cqw)}to{transform:translateX(130cqw)}}
.flock{position:absolute;font-size:1.4cqw;color:#3b3b3b;opacity:.55;animation:drift linear infinite;z-index:1;letter-spacing:.6cqw}
.ground{position:absolute;left:0;right:0;bottom:0;height:24%;z-index:4;pointer-events:none;background:linear-gradient(var(--grass),var(--grass-dk))}
.ground::before{content:"";position:absolute;left:0;right:0;top:-1.6cqw;height:2cqw;background:radial-gradient(circle at 1cqw 2cqw,var(--grass) 1cqw,transparent 1.05cqw) 0 0/2cqw 2cqw repeat-x}
.stage:not(.painted) .ground{background:linear-gradient(rgba(0,0,0,0),rgba(0,0,0,.25));height:30%}
.stage:not(.painted) .ground::before{display:none}
.flora{position:absolute;bottom:13%;z-index:6;pointer-events:none;transform-origin:50% 100%;animation:sway 3.4s ease-in-out infinite}
.flora.blade{width:.6cqw;border-radius:50% 50% 0 0;background:linear-gradient(var(--grass),var(--grass-dk))}
.flora.flower{font-size:2.1cqw;line-height:1}
@keyframes sway{0%,100%{rotate:-5deg}50%{rotate:5deg}}
.photo{position:absolute;top:4.5%;height:70%;border-radius:2.2cqw;border:.7cqw solid #fff;box-shadow:0 1.2cqw 2.5cqw rgba(0,0,0,.35);overflow:hidden;background:#fff;animation:floaty 6s ease-in-out infinite;z-index:3}
.photo.right{right:5%;rotate:1.5deg}.photo.left{left:5%;rotate:-1.5deg}
.photo img{display:block;height:100%;width:auto;transform-origin:center;animation:kb var(--dur,18s) ease-in-out forwards}
.photo[data-pan="in-left"] img{--fx:-3%;--tx:3%}.photo[data-pan="in-right"] img{--fx:3%;--tx:-3%}.photo[data-pan="out"] img{animation-name:kbout}
@keyframes kb{from{transform:scale(1.02) translateX(var(--fx,0))}to{transform:scale(1.16) translateX(var(--tx,0))}}
@keyframes kbout{from{transform:scale(1.18)}to{transform:scale(1.02)}}
@keyframes floaty{0%,100%{translate:0 0}50%{translate:0 -.5cqw}}
.enter{animation:enter .8s ease-out both}
@keyframes enter{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}
.iris{position:absolute;left:50%;top:50%;width:0;height:0;border-radius:50%;box-shadow:0 0 0 200cqw var(--iris);transform:translate(-50%,-50%);z-index:19;pointer-events:none;animation:iris 1s ease-out forwards}
@keyframes iris{0%{width:0;height:0}100%{width:250cqw;height:250cqw}}
.label{position:absolute;top:3%;z-index:9;background:#fff;color:var(--accent-dk);font-weight:800;font-size:1.6cqw;padding:.3cqw 1.4cqw;border-radius:999px;box-shadow:0 .3cqw 0 var(--soft);max-width:44%}
.label.onleft{left:4%}.label.onright{right:4%}
.titlecard{position:absolute;left:0;right:0;top:6%;text-align:center;z-index:3;padding:0 7%}
.titlecard .kicker{display:inline-block;background:#ffcf3d;color:#5a3a00;font-weight:800;font-size:1.7cqw;padding:.2cqw 1.6cqw;border-radius:999px;margin-bottom:.8cqw;animation:pop .6s both}
.titlecard h2{margin:0;font-size:6.2cqw;line-height:1.08;font-weight:800;color:#fff;text-shadow:0 .5cqw 0 var(--accent-dk),0 .9cqw 1.6cqw rgba(0,0,0,.3)}
.titlecard h2 span{display:inline-block;animation:pop .6s cubic-bezier(.3,1.8,.5,1) both,bob 2.4s ease-in-out infinite}
.titlecard p{margin:1.2cqw auto 0;font-size:2.2cqw;font-weight:700;color:var(--ink);background:rgba(255,255,255,.88);display:inline-block;padding:.4cqw 2cqw;border-radius:999px;animation:enter 1s .9s both}
@keyframes pop{from{transform:scale(0) rotate(-12deg);opacity:0}to{transform:none;opacity:1}}
@keyframes bob{0%,100%{translate:0 0}50%{translate:0 -.6cqw}}
/* characters */
.char{position:absolute;bottom:19.5%;width:15cqw;height:16.5cqw;transform:translateX(-50%);z-index:5;transition:opacity .4s,bottom .1s linear}
.char.hidden{opacity:0}
.char .flip{position:absolute;inset:0;transform-origin:50% 100%}
.char.face-left .flip{transform:scaleX(-1)}
.char.crouch .flip{transform:scaleY(.8)}
.char.crouch.face-left .flip{transform:scale(-1,.8)}
.char .act{position:absolute;inset:0;transform-origin:50% 100%}
.char svg{width:100%;height:100%;overflow:visible}
.char .shadowe{position:absolute;left:18%;right:18%;bottom:-.4cqw;height:1.4cqw;border-radius:50%;background:rgba(0,0,0,.28);filter:blur(2px);z-index:-1;transition:opacity .3s}
.char.airborne .shadowe{opacity:0}
.char svg .tail,.char svg .lid,.char svg .arm,.char svg .head,.char svg .m-open,.char svg .foot1,.char svg .foot2,.char svg .tear,.char svg .legf,.char svg .ears,.char svg .wing{transform-box:fill-box}
.tail{transform-origin:85% 85%;animation:wag 1.4s ease-in-out infinite}
@keyframes wag{0%,100%{transform:rotate(0)}50%{transform:rotate(-12deg)}}
.ears{transform-origin:50% 100%;animation:earw 3.4s ease-in-out infinite}
@keyframes earw{0%,80%,100%{transform:rotate(0)}85%{transform:rotate(-6deg)}90%{transform:rotate(5deg)}}
.wing{transform-origin:85% 40%;animation:wingrest 3s ease-in-out infinite}
@keyframes wingrest{0%,100%{transform:rotate(0)}50%{transform:rotate(-6deg)}}
.char.fly .wing,.char.hover .wing,.char.bird.wave .wing{animation:flapw .16s ease-in-out infinite alternate}
@keyframes flapw{from{transform:rotate(-40deg)}to{transform:rotate(22deg)}}
.char.hover .act{animation:hover 1.1s ease-in-out infinite}
@keyframes hover{0%,100%{transform:translateY(0)}50%{transform:translateY(-7%)}}
.lid{transform-origin:50% 0;transform:scaleY(0);animation:blink 4.2s infinite}
@keyframes blink{0%,92%,100%{transform:scaleY(0)}95%{transform:scaleY(1)}}
.m-open,.m-sad,.brow,.brow-a,.nut,.tear,.band{opacity:0}
.m-open{transform-origin:50% 20%}
.char.talk .m-open,.char.chomp .m-open{animation:talk .22s ease-in-out infinite alternate}
.char.chomp .m-open{animation-duration:.3s}
.char.talk .m-smile,.char.talk .m-sad,.char.chomp .m-smile{opacity:0}
@keyframes talk{from{opacity:1;transform:scaleY(.25)}to{opacity:1;transform:scaleY(1)}}
.char.happy .m-open{opacity:1;transform:scaleY(.8)}
.char.happy .m-smile{opacity:0}
.char.happy .cheek{opacity:.85}
.char.sad .m-smile{opacity:0}.char.sad:not(.talk) .m-sad{opacity:1}.char.sad .brow{opacity:1}.char.sad .tear{opacity:1;animation:tear 1.6s ease-in infinite}
.char.sad .head{transform:rotate(7deg);transform-origin:30% 90%}
.char.angry .brow-a{opacity:1}.char.angry .m-smile{opacity:0}.char.angry:not(.talk):not(.roar):not(.laugh) .m-sad{opacity:1}
.char.roar .m-open{opacity:1;animation:none;transform:scaleY(1.35)}
.char.roar .act{animation:shiver .1s linear infinite}
.char.laugh .m-open{opacity:1;animation:talk .14s ease-in-out infinite alternate}
.char.laugh .m-smile{opacity:0}
.char.laugh .act{animation:laughbob .3s ease-in-out infinite}
@keyframes laughbob{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-4%) rotate(3deg)}}
@keyframes tear{from{transform:translateY(0);opacity:1}to{transform:translateY(12px);opacity:0}}
.char.hurt .legf{transform:rotate(-35deg) translateY(-8%);transform-origin:50% 0}
.char.hurt .act{animation:shiver .5s linear infinite}
.char.bandage .band{opacity:1}
.char.sleep .lid{animation:none;transform:scaleY(1)}
.char.sleep .head{transform:rotate(12deg) translateY(3px);transform-origin:50% 90%}
.char.sleep .act{animation:breathe 2.6s ease-in-out infinite}
@keyframes breathe{0%,100%{transform:scale(1,1)}50%{transform:scale(1.03,.97)}}
.char .zzz{position:absolute;right:-4%;top:-8%;font-weight:800;color:#fff;text-shadow:0 0 .6cqw rgba(0,0,0,.5);font-size:2.4cqw;opacity:0}
.char.sleep .zzz{opacity:1}
.char .zzz b{position:absolute;animation:zz 3s linear infinite}
.char .zzz b:nth-child(2){animation-delay:1s}.char .zzz b:nth-child(3){animation-delay:2s}
@keyframes zz{0%{transform:translate(0,0) scale(.6);opacity:0}20%{opacity:1}100%{transform:translate(3cqw,-6cqw) scale(1.3);opacity:0}}
.char.walk .act{animation:walkbob .45s ease-in-out infinite}
.char.walk .foot1{animation:step .45s ease-in-out infinite}
.char.walk .foot2{animation:step .45s ease-in-out infinite reverse}
.char.quad.walk .foot1,.char.quad.walk .foot2{animation-name:stepq}
@keyframes walkbob{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-4%) rotate(2deg)}}
@keyframes step{0%,100%{transform:translateY(0)}50%{transform:translateY(-45%)}}
@keyframes stepq{0%,100%{transform:translateY(0)}50%{transform:translateY(-12%)}}
.char.run .act{animation:runbob .26s ease-in-out infinite}
.char.run .foot1{animation:stepq .26s ease-in-out infinite}
.char.run .foot2{animation:stepq .26s ease-in-out infinite reverse}
.char.run .tail{animation-duration:.4s}
@keyframes runbob{0%,100%{transform:translateY(0) rotate(5deg)}50%{transform:translateY(-9%) rotate(7deg)}}
.char.jump .act{animation:jump .7s cubic-bezier(.3,0,.5,1) infinite}
@keyframes jump{0%{transform:translateY(0) scale(1.12,.86)}15%{transform:translateY(0) scale(.92,1.1)}50%{transform:translateY(-55%) scale(1,1)}85%{transform:translateY(0) scale(1.08,.9)}100%{transform:translateY(0) scale(1,1)}}
.char.bounce .act{animation:jump 1s cubic-bezier(.3,0,.5,1) infinite}
.char.shiver .act{animation:shiver .12s linear infinite}
@keyframes shiver{0%,100%{transform:translateX(0)}25%{transform:translateX(-2%)}75%{transform:translateX(2%)}}
.arm{transform-origin:20% 10%}
.char.wave .arm{animation:wave .35s ease-in-out infinite alternate}
@keyframes wave{from{transform:rotate(-20deg)}to{transform:rotate(-120deg)}}
.char.hug .arm{transform:rotate(-70deg)}
.char.quad.wave .head{animation:nod .5s ease-in-out infinite alternate;transform-origin:30% 90%}
@keyframes nod{from{transform:rotate(-6deg)}to{transform:rotate(8deg)}}
.char.holding .nut{opacity:1}
.pouchjoey{opacity:0;transition:opacity .4s}
.char.carry .pouchjoey{opacity:1;animation:laughbob 1.6s ease-in-out infinite}
.char.carry .pouchjoey{transform-box:fill-box;transform-origin:50% 100%}
.char .emote{position:absolute;left:50%;top:-24%;transform:translateX(-50%) scale(0);background:#fff;border-radius:50%;width:5.6cqw;height:5.6cqw;display:flex;align-items:center;justify-content:center;font-size:3.2cqw;box-shadow:0 .4cqw 1cqw rgba(0,0,0,.25);transition:transform .3s cubic-bezier(.3,1.8,.5,1);z-index:2}
.char .emote::after{content:"";position:absolute;bottom:-.7cqw;left:50%;margin-left:-.7cqw;border:.7cqw solid transparent;border-top-color:#fff;border-bottom:0}
.char .emote.show{transform:translateX(-50%) scale(1);animation:bob 1.2s ease-in-out infinite}
/* fx */
.fx{position:absolute;inset:0;pointer-events:none;z-index:7;overflow:hidden}
.fxback{position:absolute;inset:0;pointer-events:none;z-index:4;overflow:hidden}
.fx .sun{position:absolute;top:-14cqw;width:34cqw;height:34cqw;border-radius:50%;background:radial-gradient(circle,rgba(255,240,170,.95) 0 18%,rgba(255,220,120,.35) 32%,transparent 62%);animation:sunp 4s ease-in-out infinite}
.fx .sun::after{content:"";position:absolute;inset:10%;border-radius:50%;background:repeating-conic-gradient(rgba(255,236,160,.35) 0 8deg,transparent 8deg 22deg);animation:spin 30s linear infinite;mask:radial-gradient(circle,transparent 20%,#000 30%,transparent 70%);-webkit-mask:radial-gradient(circle,transparent 20%,#000 30%,transparent 70%)}
@keyframes sunp{0%,100%{transform:scale(1)}50%{transform:scale(1.07)}}
@keyframes spin{to{transform:rotate(360deg)}}
.fx .sunset{position:absolute;inset:0;background:linear-gradient(180deg,rgba(255,140,60,.35),rgba(255,90,80,.12) 50%,rgba(60,20,60,.3));mix-blend-mode:multiply}
.fx .fall{position:absolute;top:-8%;font-size:2.4cqw;animation:fall linear infinite}
@keyframes fall{0%{transform:translate(0,0) rotate(0)}100%{transform:translate(var(--dx,4cqw),62cqw) rotate(var(--rot,540deg))}}
.fx .ball{position:absolute;top:-6%;width:2.3cqw;height:2.3cqw;border-radius:50%;animation:bounce-fall ease-in infinite}
.fx .ball.ramb{background:radial-gradient(circle at 35% 35%,#ff8a8a,#d62839 60%,#9b1028);outline:.32cqw dotted #7cc242;outline-offset:-.1cqw}
.fx .ball.orange{background:radial-gradient(circle at 35% 35%,#ffd08a,#ff9f1c 60%,#d9730d)}
@keyframes bounce-fall{0%{transform:translateY(0) rotate(0)}70%{transform:translateY(44cqw) rotate(260deg)}80%{transform:translateY(39cqw) rotate(300deg)}90%{transform:translateY(44cqw) rotate(330deg)}100%{transform:translateY(44cqw) rotate(340deg);opacity:0}}
.fx .tw{position:absolute;font-size:2.2cqw;animation:twinkle 1.8s ease-in-out infinite}
@keyframes twinkle{0%,100%{transform:scale(.3) rotate(0);opacity:.1}50%{transform:scale(1.15) rotate(30deg);opacity:1}}
.fx .bfly{position:absolute;font-size:2.6cqw;animation:flutter 9s ease-in-out infinite}
.fx .bfly i{display:inline-block;font-style:normal;animation:flap .25s ease-in-out infinite alternate}
@keyframes flap{from{transform:scaleX(1)}to{transform:scaleX(.45)}}
@keyframes flutter{0%{transform:translate(0,0)}25%{transform:translate(9cqw,-5cqw)}50%{transform:translate(16cqw,2cqw)}75%{transform:translate(6cqw,6cqw)}100%{transform:translate(0,0)}}
.fx .fly{position:absolute;width:.7cqw;height:.7cqw;border-radius:50%;background:#fff6a0;box-shadow:0 0 1.2cqw .5cqw rgba(255,240,120,.8);animation:firefly 6s ease-in-out infinite}
@keyframes firefly{0%,100%{transform:translate(0,0);opacity:.2}25%{opacity:1}50%{transform:translate(3cqw,-4cqw);opacity:.4}75%{transform:translate(-2cqw,-2cqw);opacity:1}}
.fx .up{position:absolute;bottom:-6%;font-size:2.6cqw;animation:rise linear infinite}
@keyframes rise{0%{transform:translate(0,0) scale(.6);opacity:0}15%{opacity:1}100%{transform:translate(var(--dx,2cqw),-50cqw) scale(1.2);opacity:0}}
.fx .conf{position:absolute;top:-6%;width:1cqw;height:1.6cqw;border-radius:2px;animation:fall linear infinite}
.fx .feather{position:absolute;top:-8%;width:1.2cqw;height:2.6cqw;border-radius:50% 50% 50% 50%/70% 70% 30% 30%;background:#fff;box-shadow:0 0 .4cqw rgba(0,0,0,.15);animation:featherfall ease-in-out infinite}
@keyframes featherfall{0%{transform:translate(0,0) rotate(-30deg)}25%{transform:translate(3cqw,15cqw) rotate(30deg)}50%{transform:translate(-2cqw,30cqw) rotate(-30deg)}75%{transform:translate(3cqw,45cqw) rotate(30deg)}100%{transform:translate(0,62cqw) rotate(-30deg)}}
.fx .wasp{position:absolute;left:12%;top:12%;font-size:3.4cqw;animation:waspfly 7s ease-in-out infinite}
@keyframes waspfly{0%{transform:translate(0,0) rotate(-8deg)}20%{transform:translate(14cqw,-3cqw) rotate(8deg)}40%{transform:translate(22cqw,5cqw) scaleX(-1)}60%{transform:translate(10cqw,9cqw) scaleX(-1)}80%{transform:translate(2cqw,4cqw) rotate(6deg)}100%{transform:translate(0,0) rotate(-8deg)}}
.fx .rainbow{position:absolute;top:2%;width:46cqw;height:23cqw;border-radius:46cqw 46cqw 0 0;background:radial-gradient(circle at 50% 100%,transparent 52%,rgba(155,93,229,.5) 53% 56%,rgba(61,180,242,.5) 56% 60%,rgba(47,168,101,.5) 60% 64%,rgba(255,207,61,.55) 64% 68%,rgba(255,122,61,.5) 68% 72%,rgba(255,92,138,.5) 72% 76%,transparent 77%);animation:enter 2s ease-out both}
.fxback .river{position:absolute;bottom:13%;height:9%;border-radius:50%;background:linear-gradient(90deg,#4cb8e8,#8fdcff,#4cb8e8);background-size:200% 100%;animation:flow 3s linear infinite;box-shadow:inset 0 .4cqw .8cqw rgba(255,255,255,.6)}
@keyframes flow{to{background-position:-200% 0}}
.fxback .tree{position:absolute;bottom:18%;width:22cqw;height:30cqw}
.fxback .tree .trunk{position:absolute;left:42%;bottom:0;width:16%;height:50%;background:linear-gradient(90deg,#7a4a22,#a8662f);border-radius:1cqw}
.fxback .tree .leaf{position:absolute;border-radius:50%;background:radial-gradient(circle at 35% 30%,#8fe07a,#2f8a3a);animation:rustle 3s ease-in-out infinite;transform-origin:50% 100%}
@keyframes rustle{0%,100%{transform:rotate(0)}50%{transform:rotate(1.5deg) scaleY(1.02)}}
.fxback .nest{position:absolute;bottom:42%;width:9cqw;height:3.4cqw;border-radius:0 0 50% 50%;background:repeating-linear-gradient(20deg,#8a5a2b 0 .4cqw,#b07a3e .4cqw .8cqw);box-shadow:inset 0 .4cqw 0 rgba(0,0,0,.2)}
.fxback .nest span{position:absolute;left:30%;top:-2.6cqw;font-size:2.8cqw;animation:laughbob .6s ease-in-out infinite}
.fxback .branch{position:absolute;bottom:41%;height:1.2cqw;border-radius:1cqw;background:#8a5a2b}
.fx .bush,.fxback .bush{position:absolute;bottom:14%;width:20cqw;height:13cqw;animation:rustle 2.5s ease-in-out infinite;transform-origin:50% 100%}
.bush i{position:absolute;border-radius:50%;background:radial-gradient(circle at 35% 30%,#7fd36a,#2f8a3a)}
.fxback .pond{position:absolute;bottom:12%;height:10%;border-radius:50%;background:radial-gradient(ellipse at 50% 40%,#bfeaff,#4cb8e8 70%);box-shadow:inset 0 .4cqw .8cqw rgba(255,255,255,.6)}
.fxback .pond::after{content:"🪷";position:absolute;left:20%;top:-20%;font-size:2.2cqw;animation:laughbob 3s ease-in-out infinite}
.fxback .rock{position:absolute;bottom:15%;border-radius:50% 50% 40% 40%;background:radial-gradient(circle at 35% 30%,#d9c6a8,#a08a6a)}
.fx .ball.apple{background:radial-gradient(circle at 35% 35%,#ff9a9a,#e8344a 60%,#a8172b)}
.fx .bubble{position:absolute;bottom:14%;border-radius:50%;border:.15cqw solid rgba(255,255,255,.9);background:radial-gradient(circle at 30% 30%,rgba(255,255,255,.9),rgba(180,230,255,.25) 40%,transparent 70%);animation:bubble ease-in infinite}
@keyframes bubble{0%{transform:translate(0,0) scale(.5);opacity:0}15%{opacity:1}100%{transform:translate(2cqw,-30cqw) scale(1.2);opacity:0}}
.fxback .leafy{position:absolute;font-size:2.4cqw}
.fx .trapped{position:absolute;font-size:3cqw;animation:trapped .3s ease-in-out infinite alternate}
@keyframes trapped{from{transform:rotate(-12deg)}to{transform:rotate(12deg)}}
.fx.free .trapped{animation:freefly 4s ease-out forwards}
@keyframes freefly{0%{transform:translate(0,0)}30%{transform:translate(4cqw,-8cqw) rotate(15deg)}60%{transform:translate(-3cqw,-18cqw) rotate(-10deg)}100%{transform:translate(10cqw,-40cqw) rotate(20deg);opacity:0}}
.fxback .tree.euca .leaf{background:radial-gradient(circle at 35% 30%,#b7dca6,#5f9a6a)}
.fxback .tree.euca .trunk{background:linear-gradient(90deg,#d9cbb6,#efe6d6)}
.fxback .anthill{position:absolute;bottom:17%;width:9cqw;height:4.5cqw;border-radius:50% 50% 10% 10%;background:radial-gradient(circle at 40% 30%,#d79a5a,#a8642c)}
.fx .ant{position:absolute;bottom:18%;font-size:1.3cqw;animation:antwalk 4s linear infinite}
@keyframes antwalk{0%{transform:translateX(0)}50%{transform:translateX(5cqw)}50.01%{transform:translateX(5cqw) scaleX(-1)}100%{transform:translateX(0) scaleX(-1)}}
.fxback .peel{position:absolute;bottom:19%;font-size:2.4cqw;transition:all 1.4s ease-in-out}
.fxback.binned .peel{left:var(--binx,80%) !important;bottom:24%;opacity:0;transform:scale(.4) rotate(200deg)}
.fxback .bin{position:absolute;bottom:18%;font-size:3.4cqw}
.listcard{margin:0 auto;width:min(60%,60cqw);background:rgba(255,255,255,.95);border-radius:2cqw;padding:1.2cqw 2.4cqw 1.4cqw;box-shadow:0 .8cqw 2cqw rgba(0,0,0,.2);text-align:left;animation:enter .7s ease-out both;border:.4cqw solid var(--soft)}
.listcard h3{margin:0 0 .6cqw;text-align:center;font-size:2.8cqw;color:var(--accent-dk)}
.listcard ol{margin:0;padding-left:3cqw;font-size:2cqw;font-weight:700;line-height:1.5;color:var(--ink)}
.listcard li{animation:enter .5s ease-out both}
.char.upside .flip{transform-origin:50% 50%;transform:rotate(180deg) translateY(-42%)}
.char.upside .act{animation:shiver .4s linear infinite}
.char.upside .shadowe{opacity:.4}
.photo.wide{height:56%}
.fx .wave{position:absolute;width:6cqw;height:1.2cqw;border-top:.35cqw solid rgba(255,255,255,.85);border-radius:50%;animation:wavemove linear infinite}
@keyframes wavemove{0%{transform:translateX(0);opacity:0}20%{opacity:1}100%{transform:translateX(-6cqw);opacity:0}}
.fx .foam{position:absolute;font-size:2cqw;animation:foam 1.5s ease-out infinite}
@keyframes foam{0%{transform:scale(.3) translateY(0);opacity:0}30%{opacity:1}100%{transform:scale(1.2) translateY(-3cqw);opacity:0}}
.fx .raft{position:absolute;bottom:15%;width:13cqw;height:3cqw;animation:raftbob 2.2s ease-in-out infinite}
.fx .raft i{position:absolute;bottom:0;width:24%;height:100%;border-radius:1.4cqw;background:linear-gradient(#b07a3e,#7a4a22);box-shadow:inset 0 .3cqw 0 rgba(255,255,255,.25);transition:transform 1.2s ease-in,opacity 1.2s}
.fx .raft i:nth-child(1){left:0}.fx .raft i:nth-child(2){left:25%}.fx .raft i:nth-child(3){left:50%}.fx .raft i:nth-child(4){left:75%}
.fx .raft .fr{position:absolute;bottom:80%;font-size:2.4cqw;transition:transform 1.4s ease-in,opacity 1.4s}
.fx .raft .splash{position:absolute;left:30%;bottom:20%;font-size:4cqw;opacity:0}
@keyframes raftbob{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-.5cqw) rotate(2deg)}}
.fx.smash .raft{animation:none}
.fx.smash .raft i:nth-child(1){transform:translate(-5cqw,2cqw) rotate(-40deg);opacity:0}
.fx.smash .raft i:nth-child(2){transform:translate(-2cqw,4cqw) rotate(25deg);opacity:0}
.fx.smash .raft i:nth-child(3){transform:translate(3cqw,4cqw) rotate(-30deg);opacity:0}
.fx.smash .raft i:nth-child(4){transform:translate(6cqw,2cqw) rotate(45deg);opacity:0}
.fx.smash .raft .fr{transform:translateY(8cqw) rotate(200deg);opacity:0}
.fx.smash .raft .splash{animation:splash 1.2s ease-out forwards}
@keyframes splash{0%{opacity:0;transform:scale(.3)}30%{opacity:1;transform:scale(1.4)}100%{opacity:0;transform:scale(2) translateY(-3cqw)}}
.fx .sprout{position:absolute;bottom:18%;font-size:2.2cqw;transform-origin:50% 100%;animation:sprout 1s ease-out both,sway 3s 1s ease-in-out infinite}
@keyframes sprout{from{transform:scale(0)}to{transform:scale(1)}}
.fx .storm{position:absolute;top:4%;font-size:7cqw;animation:bob 2s ease-in-out infinite;filter:drop-shadow(0 .5cqw .8cqw rgba(0,0,0,.3))}
.char.swim .flip{transform:translateY(19%);clip-path:inset(-20% -10% 22% -10%)}
.char.swim.face-left .flip{transform:translateY(19%) scaleX(-1)}
.char.swim .act{animation:swimbob 1.2s ease-in-out infinite}
.char.swim .shadowe{opacity:0}
@keyframes swimbob{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(3%) rotate(2deg)}}
.char.spin .act{animation:swimspin 1.4s linear infinite}
@keyframes swimspin{0%{transform:translateY(0) rotate(0)}25%{transform:translateY(-3%) rotate(-25deg)}50%{transform:translateY(2%) rotate(0)}75%{transform:translateY(-3%) rotate(25deg)}100%{transform:translateY(0) rotate(0)}}
.photo.pano{left:6%;right:6%;top:11%;height:auto;rotate:0deg}
.photo.pano img{width:100%;height:auto}
.char svg .trunk{transform-box:fill-box;transform-origin:15% 0;animation:trunk 3s ease-in-out infinite}
@keyframes trunk{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(9deg)}}
.char.wave .trunk{animation-duration:.6s}
.fx .drop{position:absolute;top:-10%;width:.14cqw;height:3.4cqw;background:linear-gradient(transparent,rgba(220,235,255,.85));animation:rain linear infinite}
@keyframes rain{to{transform:translate(-3cqw,64cqw)}}
.fx .flashy{position:absolute;inset:0;background:#fff;opacity:0;animation:flashy 7s linear infinite}
@keyframes flashy{0%,88%,100%{opacity:0}90%{opacity:.7}92%{opacity:.1}94%{opacity:.55}97%{opacity:0}}
.fxback .stick{position:absolute;bottom:17.5%;height:1.1cqw;border-radius:1cqw;background:linear-gradient(#a8662f,#6e4423);box-shadow:0 .2cqw 0 rgba(0,0,0,.2);transition:transform 1.6s ease-in,opacity 1.6s}
.fxback.cleared .stick{transform:translateX(var(--gx,20cqw)) rotate(90deg);opacity:0}
.fxback .kampung{position:absolute;bottom:17%;width:20cqw;height:20cqw}
.kampung b{position:absolute;display:block}
.kampung .roof{left:-8%;right:-8%;top:0;height:42%;background:linear-gradient(#9a5a2a,#6e3a18);clip-path:polygon(50% 0,100% 100%,0 100%)}
.kampung .wall{left:6%;right:6%;top:40%;height:36%;background:repeating-linear-gradient(90deg,#c98a52 0 1.2cqw,#b07440 1.2cqw 1.4cqw);border-radius:.3cqw}
.kampung .wall i{position:absolute;top:22%;width:22%;height:50%;background:#5a3a1c;border:.3cqw solid #e8c690}
.kampung .wall i:first-child{left:14%}.kampung .wall i:last-child{right:14%}
.kampung .stilt{top:76%;width:1cqw;height:24%;background:#6e4423}
.kampung .stairs{left:58%;top:74%;width:14%;height:26%;background:repeating-linear-gradient(#8a5a2b 0 .4cqw,transparent .4cqw 1.1cqw)}
.fxback .fern{position:absolute;bottom:16%;font-size:9cqw;transform-origin:50% 100%;animation:sway 4s ease-in-out infinite}
.fxback .roots{position:absolute;bottom:16.5%;width:18cqw;height:5cqw;background:radial-gradient(ellipse at 50% 100%,transparent 38%,#7a4a22 39% 46%,transparent 47%),radial-gradient(ellipse at 20% 100%,transparent 30%,#8a5a2b 31% 40%,transparent 41%),radial-gradient(ellipse at 80% 100%,transparent 30%,#8a5a2b 31% 40%,transparent 41%)}
.photo.pano.mid{left:20%;right:20%;top:6%}
.fx .glow{position:absolute;inset:0;pointer-events:none}
.fxback .cottage{position:absolute;bottom:17%;width:19cqw;height:17cqw}
.cottage b{position:absolute;display:block}
.cottage .roof{left:-10%;right:-10%;top:0;height:46%;background:linear-gradient(#c79a5a,#9a6a2e);clip-path:polygon(50% 0,100% 100%,0 100%);border-radius:.4cqw}
.cottage .wall{left:4%;right:4%;top:44%;bottom:0;background:#fff4e0;border:.3cqw solid #d9c3a0}
.cottage .wall .win{position:absolute;left:12%;top:20%;width:26%;height:38%;background:#ffe08a;border:.3cqw solid #8a5a2b;box-shadow:0 0 1.2cqw rgba(255,210,120,.8)}
.cottage .wall .door{position:absolute;right:16%;bottom:0;width:24%;height:70%;background:#8a5a2b;border-radius:1cqw 1cqw 0 0}
.cottage .chimney{right:18%;top:8%;width:10%;height:22%;background:#b07a4a}
.cottage .smoke{position:absolute;right:12%;top:-12%;font-size:2.4cqw;animation:rise 5s linear infinite;--dx:-2cqw;opacity:.8}
.g-apron,.g-scarf,.glasses{opacity:0}
.char.apron .g-apron,.char.scarf .g-scarf,.char.specs .glasses{opacity:1}
.char.old .tuft{opacity:0}
/* subtitles */
.subs{position:absolute;left:3%;right:3%;bottom:2.2%;min-height:11%;z-index:8;display:flex;align-items:center;gap:1.4cqw;background:rgba(255,255,255,.94);border-radius:1.8cqw;padding:1cqw 1.8cqw;box-shadow:0 .5cqw 1.4cqw rgba(0,0,0,.2);transition:opacity .3s}
.subs.off{opacity:0}
.subs .chip{flex:none;color:#fff;font-weight:800;font-size:1.55cqw;padding:.25cqw 1.2cqw;border-radius:999px;background:var(--chip-narr)}
.subs .txt{font-size:2.1cqw;font-weight:700;line-height:1.3;color:var(--ink)}
.subs .txt.pop{animation:enter .35s ease-out}
.over{position:absolute;inset:0;z-index:20;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1.6cqw;background:rgba(30,20,5,.55);backdrop-filter:blur(3px);text-align:center;color:#fff;padding:3%}
.over.hide{display:none}
.over h3{margin:0;font-size:4.6cqw;line-height:1.1;text-shadow:0 .4cqw 0 var(--accent-dk)}
.over p{margin:0;font-size:2cqw;font-weight:600}
.over .langs button{font-size:2.2cqw;padding:.9cqw 2.6cqw}
.bigplay{width:11cqw;height:11cqw;border-radius:50%;border:0;background:var(--accent);color:#fff;font-size:5cqw;cursor:pointer;box-shadow:0 .6cqw 0 var(--accent-dk);animation:bob 1.6s ease-in-out infinite}
.ctl{display:flex;align-items:center;gap:8px;padding:10px 0 4px;flex-wrap:wrap;justify-content:center}
.ctl button{background:#fff;color:var(--ink);min-width:44px;height:44px;padding:0 14px;font-size:18px;box-shadow:0 3px 0 var(--soft)}
.ctl button.main{background:var(--accent);color:#fff;box-shadow:0 3px 0 var(--accent-dk);min-width:64px}
.ctl button.off{opacity:.55}
.dots{display:flex;gap:6px;align-items:center;margin:0 6px}
.dots i{width:12px;height:12px;border-radius:50%;background:var(--soft);cursor:pointer;transition:transform .2s,background .2s}
.dots i.on{background:var(--accent);transform:scale(1.35)}
.dots i.done{background:var(--accent2)}
.bar{height:6px;background:var(--soft);border-radius:99px;overflow:hidden;margin-top:6px}
.bar div{height:100%;width:0;background:linear-gradient(90deg,var(--accent),#ffcf3d)}
.note{font-size:13px;color:var(--muted);text-align:center;padding:6px 16px 14px}
@media (max-width:600px){.ctl button{height:40px;min-width:40px;padding:0 10px;font-size:16px}.dots i{width:9px;height:9px}}
