/* ===== Animasi undangan (fitur paket) ===== */
body.anim-gulir{overflow-x:hidden}

/* ---------- Pembuka ---------- */
.anim-pembuka .sampul-isi>*{opacity:0;transform:translateY(16px);animation:anMasuk .9s ease forwards}
.anim-pembuka .sampul-isi>*:nth-child(1){animation-delay:.2s}
.anim-pembuka .sampul-isi>*:nth-child(2){animation-delay:.45s}
.anim-pembuka .sampul-isi>*:nth-child(3){animation-delay:.7s}
.anim-pembuka .sampul-isi>*:nth-child(4){animation-delay:.95s}
.anim-pembuka #bukaUndangan{animation:anMasuk .9s ease 1.2s forwards,anDenyut 2.4s ease-in-out 2.4s infinite}
@keyframes anMasuk{to{opacity:1;transform:none}}
@keyframes anDenyut{0%,100%{box-shadow:0 6px 20px rgba(0,0,0,.15),0 0 0 0 color-mix(in srgb,var(--aksen) 65%,transparent)}60%{box-shadow:0 6px 20px rgba(0,0,0,.15),0 0 0 14px transparent}}
.anim-pembuka .sampul.terbuka{transform:none;opacity:0;transition:opacity .5s ease .3s}
.tirai{position:fixed;inset:0;z-index:55;pointer-events:none;display:flex;opacity:0;transition:opacity .3s ease}
.tirai.tampil{opacity:1}
.tirai-sisi{flex:1;background-color:var(--aksen);background-image:repeating-linear-gradient(90deg,rgba(255,255,255,.10) 0 2px,transparent 2px 28px);transition:transform 1.3s cubic-bezier(.77,0,.18,1)}
.tirai-kiri{box-shadow:inset -12px 0 30px rgba(0,0,0,.25)}
.tirai-kanan{box-shadow:inset 12px 0 30px rgba(0,0,0,.25)}
.tirai.buka .tirai-kiri{transform:translateX(-102%)}
.tirai.buka .tirai-kanan{transform:translateX(102%)}
.tirai-segel{position:absolute;left:50%;top:50%;width:112px;height:112px;margin:-56px 0 0 -56px;border-radius:50%;background:var(--latar);color:var(--aksen);display:grid;place-items:center;font-family:var(--font-judul,'Great Vibes'),cursive;font-size:36px;box-shadow:0 0 0 3px var(--latar),0 0 0 6px var(--aksen),0 12px 30px rgba(0,0,0,.3);transform:scale(0);transition:transform .5s cubic-bezier(.34,1.56,.64,1),opacity .4s}
.tirai.segel .tirai-segel{transform:scale(1)}
.tirai.buka .tirai-segel{transform:scale(1.4);opacity:0}

/* ---------- Muncul saat digulir ---------- */
.anim-gulir .muncul{transform:translateY(50px);filter:blur(5px);transition:opacity 1s ease,transform 1s cubic-bezier(.2,.7,.2,1),filter 1s ease}
.anim-gulir .muncul.dari-kiri{transform:translateX(-50px)}
.anim-gulir .muncul.dari-kanan{transform:translateX(50px)}
.anim-gulir .muncul.zoom{transform:scale(.9)}
.anim-gulir .muncul.tampil{transform:none;filter:none;opacity:1}
.anim-gulir .anak-anim{opacity:0;transform:translateY(24px);transition:opacity .8s ease var(--tunda,0s),transform .8s cubic-bezier(.2,.7,.2,1) var(--tunda,0s)}
.anim-gulir .profil>.foto-bulat.anak-anim,.anim-gulir .orang.anak-anim{transform:scale(.8)}
.anim-gulir .tampil .anak-anim{opacity:1;transform:none}

/* ---------- Teks ---------- */
.anim-teks .kata{display:inline-block;white-space:nowrap}
.anim-teks .huruf{display:inline-block;opacity:0;transform:translateY(.45em) rotate(6deg);transition:opacity .5s ease,transform .7s cubic-bezier(.2,.8,.2,1);transition-delay:calc(var(--n) * 45ms + var(--awal, 150ms))}
.anim-teks .tampil .huruf,.anim-teks .huruf-jalan .huruf{opacity:1;transform:none}
.anim-teks .muncul .kecil-caps{letter-spacing:.8em;opacity:0;transition:letter-spacing 1.4s ease,opacity 1.4s ease}
.anim-teks .muncul.tampil .kecil-caps{letter-spacing:.3em;opacity:1}

/* ---------- Ornamen ---------- */
.orn{position:fixed;z-index:0;pointer-events:none;color:var(--aksen);will-change:transform}
.orn svg{display:block;width:100%;height:auto;transform-origin:0 0;animation:anGoyang var(--durasi,7s) ease-in-out infinite alternate}
@keyframes anGoyang{from{transform:rotate(-2.5deg)}to{transform:rotate(2.5deg)}}
.orn-sudut{width:clamp(110px,30vw,190px);opacity:.85}
.orn-kiri-atas{top:0;left:0}
.orn-kanan-atas{top:0;right:0}
.orn-kiri-bawah{bottom:0;left:0;width:clamp(90px,24vw,150px)}
.orn-kanan-bawah{bottom:0;right:0;width:clamp(90px,24vw,150px)}
.orn-kanan-atas .orn-balik{transform:scaleX(-1)}
.orn-kiri-bawah .orn-balik{transform:scaleY(-1)}
.orn-kanan-bawah .orn-balik{transform:scale(-1,-1)}
.orn-gantung{top:0;width:clamp(36px,10vw,60px);opacity:.9}
.orn-gantung svg{transform-origin:50% 0;animation-name:anAyun}
@keyframes anAyun{from{transform:rotate(-5deg)}to{transform:rotate(5deg)}}
.orn-g1{left:5%}
.orn-g2{left:19%}
.orn-g3{right:6%}
.orn-balon{bottom:-30px;width:clamp(40px,11vw,64px);opacity:.9}
.orn-balon svg{transform-origin:50% 100%;animation-name:anMelayang}
@keyframes anMelayang{from{transform:translateY(0) rotate(-3deg)}to{transform:translateY(-22px) rotate(3deg)}}
.orn-b1{left:4%}
.orn-b2{left:17%;bottom:-60px}
.orn-b3{right:5%}
@media (max-width:600px){.orn-sudut{opacity:.55}.orn-g2{display:none}}

/* ---------- Partikel ---------- */
#kanvasPartikel{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:52}

/* ---------- Parallax ---------- */
.anim-parallax .sampul.ada-foto{background:#111;overflow:hidden;isolation:isolate}
.anim-parallax .sampul.ada-foto::before{content:'';position:absolute;inset:0;z-index:-1;background-image:linear-gradient(rgba(0,0,0,.30),rgba(0,0,0,.60)),var(--foto);background-size:cover;background-position:var(--posisi,50% 30%);animation:anKenBurns 20s ease-in-out infinite alternate}
@keyframes anKenBurns{from{transform:scale(1)}to{transform:scale(1.12) translate(-1.5%,-1%)}}

/* ---------- Hormati pengaturan "kurangi gerakan" ---------- */
@media (prefers-reduced-motion:reduce){
  .beranimasi *,.beranimasi *::before{animation:none!important;transition:none!important}
  .anim-gulir .muncul,.anim-gulir .anak-anim,.anim-teks .huruf,.anim-teks .kecil-caps,.anim-pembuka .sampul-isi>*{opacity:1!important;transform:none!important;filter:none!important}
  #kanvasPartikel,.tirai{display:none}
}
