/* Ilustrasi pasangan flat (app/couples.php) — animasi masuk & gerak halus.
   Dipakai di halaman undangan, dan disematkan ke SVG mandiri (/ilustrasi/*.svg). */
/* transform-box hanya untuk elemen beranimasi: elemen ber-atribut transform (bunga, daun) tidak boleh terkena */
.fc .fc-sway,.fc .fc-breathe,.fc .fc-head,.fc .fc-veil,.fc .fc-cloak,.fc .fc-skirt,.fc .fc-ribbon,.fc .fc-daenggi,.fc .fc-ronce,.fc .fc-lantern,.fc .fc-tassel,
.fc .fc-spark,.fc .fc-heart,.fc .fc-hop,.fc .fc-pump,.fc .fc-shy,.fc .fc-walk,.fc .fc-offer,.fc .fc-goyang,.fc .fc-glow,.fc .fc-wheel,.fc .fc-crank,
.fc .fc-balloons,.fc .fc-balloon,.fc .fc-scarf,.fc .fc-bouquet--l,.fc .fc-bouquet--r,.fc .fc-crown,.fc .fc-tiara,.fc .fc-siger,.fc .fc-groom,.fc .fc-bride,.fc .fc-shadow,.fc .fc-bike{transform-box:fill-box}
.fc .fc-sway{transform-origin:50% 100%;animation:fcSway 6s ease-in-out infinite}
.fc .fc-sway--b{animation-delay:-3s}
.fc .fc-breathe{transform-origin:50% 100%;animation:fcBreathe 4.4s ease-in-out infinite}
.fc .fc-breathe--b{animation-delay:-2.2s}
.fc .fc-head{transform-origin:50% 92%;animation:fcNodR 5.2s ease-in-out infinite}
.fc .fc-head--b{animation-name:fcNodL;animation-delay:-1.4s}
.fc--seoul .fc-head--g,.fc--arirang .fc-head--g,.fc--haneul .fc-head--g{animation-name:fcNodL}
.fc--seoul .fc-head--b,.fc--arirang .fc-head--b,.fc--haneul .fc-head--b,.fc--kayuh .fc-head--b{animation-name:fcNodR}
.fc .fc-veil,.fc .fc-cloak{transform-origin:0 0;animation:fcVeil 4.6s ease-in-out infinite}
.fc .fc-cloak{transform-origin:50% 0;animation-duration:5.4s}
.fc .fc-skirt{transform-origin:50% 0;animation:fcSkirt 3.4s ease-in-out infinite}
.fc .fc-ribbon,.fc .fc-daenggi,.fc .fc-ronce,.fc .fc-lantern{transform-origin:50% 0;animation:fcSwing 3s ease-in-out infinite}
.fc .fc-ronce{animation-duration:3.6s}
.fc .fc-daenggi{animation-duration:2.6s;animation-delay:-.6s}
.fc .fc-tassel{transform-origin:50% 0;animation:fcSwing 2.4s ease-in-out infinite}
.fc--seoul .fc-tassel{transform-origin:0 0}
.fc .fc-spark{transform-origin:50% 50%;animation:fcTwinkle 2.8s ease-in-out infinite}
.fc .fc-spark--2{animation-delay:-1s}.fc .fc-spark--3{animation-delay:-1.9s}
.fc .fc-heart{transform-origin:50% 50%;animation:fcHeart 3.2s ease-in-out infinite}
.fc .fc-heart--2{animation-delay:-.8s}.fc .fc-heart--3{animation-delay:-1.6s}.fc .fc-heart--4{animation-delay:-2.4s}
.fc .fc-hop{animation:fcHop 1.5s cubic-bezier(.4,0,.3,1) infinite}
.fc .fc-hop--g{animation-delay:-.75s}
.fc .fc-pump{transform-origin:100% 100%;animation:fcPumpL 1.5s ease-in-out infinite}
.fc .fc-pump--g{transform-origin:0 100%;animation-name:fcPumpR;animation-delay:-.75s}
.fc .fc-shy{transform-origin:50% 100%;animation:fcShy 3.6s ease-in-out infinite}
.fc .fc-bow{transform-box:view-box;transform-origin:224px 206px;animation:fcBow 5s ease-in-out infinite}
.fc .fc-walk{animation:fcWalk 1.3s ease-in-out infinite}
.fc .fc-walk--g{animation-delay:-.65s}
.fc .fc-offer{transform-origin:0 0;animation:fcOffer 3.2s ease-in-out infinite}
.fc .fc-goyang{transform-origin:50% 100%;animation:fcGoyang 1.9s ease-in-out infinite}
.fc .fc-gem{animation:fcGem 2.4s ease-in-out infinite}
.fc .fc-glow{transform-origin:50% 50%;animation:fcGlow 2.2s ease-in-out infinite}
.fc .fc-flame{animation:fcFlicker 1.6s ease-in-out infinite}
.fc .fc-wheel,.fc .fc-crank{transform-origin:50% 50%;animation:fcSpin 1.8s linear infinite}
.fc .fc-crank{animation-duration:2.4s}
.fc--kayuh .fc-bike,.fc--kayuh .fc-groom,.fc--kayuh .fc-bride{animation:fcBump .6s ease-in-out infinite}
.fc .fc-balloons{transform-origin:40% 100%;animation:fcBalloons 4s ease-in-out infinite}
.fc .fc-balloon{transform-origin:50% 100%;animation:fcBob 2.6s ease-in-out infinite}
.fc .fc-balloon--2{animation-delay:-.9s}.fc .fc-balloon--3{animation-delay:-1.7s}
.fc .fc-scarf{transform-origin:100% 30%;animation:fcScarf 1.1s ease-in-out infinite}
.fc .fc-bouquet--l{transform-origin:0 100%;animation:fcLeafL 5s ease-in-out infinite}
.fc .fc-bouquet--r{transform-origin:100% 100%;animation:fcLeafR 5s ease-in-out infinite}
.fc .fc-crown,.fc .fc-tiara,.fc .fc-siger{transform-origin:50% 100%;animation:fcCrown 4s ease-in-out infinite}

/* Animasi masuk: pria dari kiri, wanita dari kanan, lalu hiasan bermunculan */
.fc-enter .fc-groom{animation:fcInL 1.2s cubic-bezier(.2,.8,.2,1) both}
.fc-enter .fc-bride{animation:fcInR 1.2s cubic-bezier(.2,.8,.2,1) .12s both}
.fc-enter .fc-shadow{transform-origin:50% 50%;animation:fcShadowIn 1.2s ease both}
.fc-enter .fc-heart{animation:fcPop .7s cubic-bezier(.3,1.6,.5,1) 1s both,fcHeart 3.2s ease-in-out 1.7s infinite}
.fc-enter .fc-bouquet--l{animation:fcPop .9s cubic-bezier(.3,1.4,.5,1) .5s both,fcLeafL 5s ease-in-out 1.4s infinite}
.fc-enter .fc-bouquet--r{animation:fcPop .9s cubic-bezier(.3,1.4,.5,1) .6s both,fcLeafR 5s ease-in-out 1.5s infinite}
.fc-enter.fc--kayuh .fc-bike,.fc-enter.fc--kayuh .fc-groom,.fc-enter.fc--kayuh .fc-bride{transform-box:view-box;animation:fcRide 1.8s cubic-bezier(.2,.7,.2,1) both,fcBump .6s ease-in-out 1.8s infinite}
.fc-enter.fc--kayuh .fc-balloons{animation:fcPop .8s cubic-bezier(.3,1.5,.5,1) 1.4s both,fcBalloons 4s ease-in-out 2.2s infinite}

/* Ilustrasi dari berkas vektor (kelas .fcs): tokoh berayun dari titik tumpunya sendiri (--o, satuan viewBox) */
.fcs .fc-groom,.fcs .fc-bride,.fcs .fc-ride,.fcs .fc-wave{transform-box:view-box;transform-origin:var(--o,50% 100%)}
.fcs .fc-groom,.fcs .fc-bride{animation:fcSwayS 6s ease-in-out infinite}
.fcs .fc-bride{animation-delay:-3s}
.fcs .fc-ride{animation:fcBump .7s ease-in-out infinite}
.fcs .fc-wave{animation:fcWave 1.8s ease-in-out infinite}
.fcs .fc-st{transform-box:fill-box;transform-origin:50% 50%;animation:fcStBeat 3.2s ease-in-out infinite}
.fcs .fc-deco{transform-box:fill-box;transform-origin:50% 100%;animation:fcDeco 5s ease-in-out infinite}
.fcs .fc-niqab{animation:none}
.fc-enter.fcs .fc-groom{animation:fcInLs 1.2s cubic-bezier(.2,.8,.2,1) both,fcSwayS 6s ease-in-out 1.2s infinite}
.fc-enter.fcs .fc-bride{animation:fcInRs 1.2s cubic-bezier(.2,.8,.2,1) .12s both,fcSwayS 6s ease-in-out 1.32s infinite}
.fc-enter.fc--riang .fc-groom,.fc-enter.fc--riang .fc-wave{animation:fcInRs 1.2s cubic-bezier(.2,.8,.2,1) both,fcSwayS 6s ease-in-out 1.2s infinite}
.fc-enter.fc--riang .fc-wave{animation:fcInRs 1.2s cubic-bezier(.2,.8,.2,1) both,fcWave 1.8s ease-in-out 1.2s infinite}
.fc-enter.fc--riang .fc-bride{animation:fcInLs 1.2s cubic-bezier(.2,.8,.2,1) .12s both,fcSwayS 6s ease-in-out 1.32s infinite}
.fc-enter.fcs .fc-ride{animation:fcRideS 1.8s cubic-bezier(.2,.7,.2,1) both,fcBump .7s ease-in-out 1.8s infinite}
.fc-enter.fcs .fc-st{animation:fcStIn 1.3s cubic-bezier(.2,.8,.2,1) both,fcStBeat 3.2s ease-in-out 1.3s infinite}
.fc-enter.fcs .fc-deco{animation:fcPop .8s cubic-bezier(.3,1.4,.5,1) .1s both,fcDeco 5s ease-in-out .9s infinite}
@keyframes fcSwayS{0%,100%{transform:rotate(-.6deg)}50%{transform:rotate(.6deg)}}
@keyframes fcWave{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(9deg)}}
@keyframes fcStBeat{0%,100%{transform:scale(1)}14%{transform:scale(1.025)}28%{transform:scale(1)}42%{transform:scale(1.018)}}
@keyframes fcStIn{from{opacity:0;transform:scale(.7)}}
@keyframes fcDeco{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}
@keyframes fcInLs{from{opacity:0;transform:translateX(-140px)}}
@keyframes fcInRs{from{opacity:0;transform:translateX(140px)}}
@keyframes fcRideS{from{opacity:0;transform:translateX(-1500px)}to{opacity:1;transform:translateX(0)}}

@keyframes fcSway{0%,100%{transform:rotate(-.7deg)}50%{transform:rotate(.7deg)}}
@keyframes fcBreathe{0%,100%{transform:scale(1,1)}50%{transform:scale(1.008,1.018)}}
@keyframes fcNodR{0%,100%{transform:rotate(0)}50%{transform:rotate(3deg)}}
@keyframes fcNodL{0%,100%{transform:rotate(0)}50%{transform:rotate(-3deg)}}
@keyframes fcVeil{0%,100%{transform:skewX(0) scaleX(1)}50%{transform:skewX(-3deg) scaleX(1.05)}}
@keyframes fcSkirt{0%,100%{transform:skewX(1.2deg)}50%{transform:skewX(-1.2deg)}}
@keyframes fcSwing{0%,100%{transform:rotate(-5deg)}50%{transform:rotate(5deg)}}
@keyframes fcTwinkle{0%,100%{transform:scale(.35) rotate(0);opacity:.25}50%{transform:scale(1) rotate(45deg);opacity:1}}
@keyframes fcHeart{0%,100%{transform:translateY(0) scale(1)}15%{transform:translateY(-2px) scale(1.25)}30%{transform:translateY(-3px) scale(1)}45%{transform:translateY(-3px) scale(1.14)}65%{transform:translateY(-1px) scale(1)}}
@keyframes fcHop{0%,100%{transform:translateY(0)}12%{transform:translateY(1px) scale(1.01,.99)}50%{transform:translateY(-8px)}}
@keyframes fcPumpL{0%,100%{transform:rotate(0)}50%{transform:rotate(-14deg)}}
@keyframes fcPumpR{0%,100%{transform:rotate(0)}50%{transform:rotate(14deg)}}
@keyframes fcShy{0%,100%{transform:rotate(-1.2deg)}50%{transform:rotate(1.6deg)}}
@keyframes fcBow{0%,18%,100%{transform:rotate(0)}40%,62%{transform:rotate(-6deg)}}
@keyframes fcWalk{0%,100%{transform:translateY(0)}50%{transform:translateY(-3.5px)}}
@keyframes fcOffer{0%,100%{transform:rotate(0)}50%{transform:rotate(-4deg)}}
@keyframes fcGoyang{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}
@keyframes fcGem{0%,100%{opacity:1}50%{opacity:.55}}
@keyframes fcGlow{0%,100%{transform:scale(.85);opacity:.6}50%{transform:scale(1.2);opacity:1}}
@keyframes fcFlicker{0%,100%{opacity:1}30%{opacity:.75}55%{opacity:.95}75%{opacity:.7}}
@keyframes fcSpin{to{transform:rotate(360deg)}}
@keyframes fcBump{0%,100%{transform:translateY(0)}50%{transform:translateY(-1.5px)}}
@keyframes fcBalloons{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(3deg)}}
@keyframes fcBob{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
@keyframes fcScarf{0%,100%{transform:scaleX(1) skewY(0)}50%{transform:scaleX(1.08) skewY(-4deg)}}
@keyframes fcLeafL{0%,100%{transform:rotate(0)}50%{transform:rotate(-2.5deg)}}
@keyframes fcLeafR{0%,100%{transform:rotate(0)}50%{transform:rotate(2.5deg)}}
@keyframes fcCrown{0%,100%{transform:translateY(0)}50%{transform:translateY(-.6px)}}
@keyframes fcInL{from{opacity:0;transform:translateX(-36px)}}
@keyframes fcInR{from{opacity:0;transform:translateX(36px)}}
@keyframes fcShadowIn{from{opacity:0;transform:scaleX(.3)}}
@keyframes fcPop{from{opacity:0;transform:scale(0)}}
@keyframes fcRide{from{opacity:0;transform:translateX(-340px)}to{opacity:1;transform:translateX(0)}}
@media (prefers-reduced-motion:reduce){.fc *{animation:none!important}}
