/* =========================================================
   Studio80Invite - gaya halaman undangan (dipakai editor, daftar Studio, preview)
   Ukuran dasar halaman 390 x 693 (rasio 9:16 = 720 x 1280) px (diperbesar/perkecil lewat transform).
   ========================================================= */
.s80-page {
  position: relative; width: 390px; height: 693px; overflow: hidden;
  color: var(--text); font-family: var(--f-body); font-size: 14px; line-height: 1.5;
  -webkit-font-smoothing: antialiased; text-align: center; box-sizing: border-box;
}
.s80-page *, .s80-page *::before, .s80-page *::after { box-sizing: border-box; }
.s80-bg, .s80-orn, .s80-content, .s80-elements { position: absolute; inset: 0; }
.s80-orn { pointer-events: none; }
.s80-orn svg { display: block; }
.s80-content { display: flex; flex-direction: column; align-items: stretch; justify-content: center; padding: 58px 42px; }
.s80-elements { pointer-events: none; }
.s80-el { position: absolute; pointer-events: auto; transform-origin: center center; }
.s80-el-inner { width: 100%; height: 100%; }
.s80-el-inner svg { display: block; width: 100%; height: 100%; }
.s80-el-imgbox { width: 100%; height: 100%; overflow: hidden; }
.s80-el-image img { width: 100%; height: 100%; object-fit: cover; display: block; }
.s80-el-text .s80-el-inner { height: auto; }
.s80-el-text-inner, .s80-el-text { white-space: normal; word-wrap: break-word; }

/* blok konten (bisa diklik di editor) */
.s80-b { position: relative; }
.s80-kicker { font-family: var(--f-body); font-size: 11.5px; letter-spacing: .32em; text-transform: uppercase; color: var(--muted); font-weight: 500; }
.s80-h-script { font-family: var(--f-script); font-size: 46px; line-height: 1.15; color: var(--accent); margin-top: 4px; }
.s80-heading { margin-bottom: 18px; }

/* ---------- COVER ---------- */
.s80-cover { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 11px; height: 100%; }
.s80-cover-arch { padding-top: 70px; }
.s80-cover-frame, .s80-cover-deco { padding: 30px 0; }
.s80-cover .s80-kicker { font-family: var(--f-title); font-size: 17px; letter-spacing: .16em; color: var(--text); font-weight: 500; }
.s80-names { display: flex; flex-direction: column; align-items: center; line-height: 1; color: var(--accent); }
.s80-n1, .s80-n2 { font-family: var(--f-script); font-size: 68px; line-height: 1.05; padding: 0 6px; }
.s80-and { display: flex; align-items: center; gap: 12px; font-family: var(--f-title); font-size: 26px; color: var(--accent); margin: 2px 0 4px; }
.s80-and i { display: block; width: 58px; height: 1.5px; background: var(--accent); opacity: .7; }
.s80-names-sm .s80-n1, .s80-names-sm .s80-n2 { font-size: 52px; }
.s80-datebox { display: flex; align-items: center; justify-content: center; gap: 16px; font-family: var(--f-title); color: var(--text); margin-top: 6px; }
.s80-db-side { white-space: nowrap; font-size: 13px; letter-spacing: .12em; line-height: 1.5; min-width: 70px; }
.s80-db-mid { display: flex; flex-direction: column; border-left: 1px solid var(--text); border-right: 1px solid var(--text); padding: 0 18px; line-height: 1.12; }
.s80-db-mid b { font-weight: 500; font-size: 22px; }
.s80-quote { font-family: var(--f-title); font-size: 12.5px; line-height: 1.6; color: var(--text); max-width: 290px; margin: 4px auto 0; }
.s80-quote > span:not([data-edit]) { display: block; margin-top: 6px; }
.s80-btn { display: inline-block; white-space: nowrap; background: var(--accent); color: #fff; font-family: var(--f-body); font-size: 15px; font-weight: 500; padding: 12px 46px; border-radius: 999px; box-shadow: 0 8px 18px var(--accent-soft); }
.s80-btn-sm { font-size: 13px; padding: 10px 26px; margin-top: 10px; }
.s80-btn-xs { font-size: 11px; padding: 6px 16px; margin-top: 8px; }
.s80-btn-block { display: block; width: 100%; }
.s80-heart { color: var(--accent); font-size: 18px; margin-top: 6px; position: relative; }
.s80-heart::before, .s80-heart::after { content: ""; position: absolute; top: 50%; width: 50px; height: 1px; background: var(--accent); opacity: .6; }
.s80-heart::before { right: calc(50% + 16px); } .s80-heart::after { left: calc(50% + 16px); }
.s80-logo { max-width: 90px; max-height: 60px; object-fit: contain; margin: 0 auto; display: block; }
.s80-cover-photo { width: 160px; height: 160px; border-radius: 50%; background: center/cover no-repeat; margin: 0 auto 4px; box-shadow: 0 0 0 5px rgba(255,255,255,.8), 0 0 0 7px var(--gold); overflow: hidden; }
.s80-cover-ring .s80-cover-photo { width: 170px; height: 170px; margin-bottom: 10px; box-shadow: 0 0 0 7px rgba(255,255,255,.85), 0 0 0 8.5px var(--gold), 0 0 0 15px transparent, 0 0 0 16px var(--gold); }
.s80-cover-circle .s80-n1, .s80-cover-circle .s80-n2, .s80-cover-ring .s80-n1, .s80-cover-ring .s80-n2 { font-size: 50px; }
.s80-cover-circle, .s80-cover-ring { gap: 7px; }
.s80-ph svg { display: block; width: 100%; height: 100%; }

/* ---------- halaman dalam ---------- */
.s80-center-page { display: flex; flex-direction: column; align-items: stretch; justify-content: center; gap: 12px; min-height: 100%; }
.s80-quote-lg { font-size: 16px; line-height: 1.8; max-width: 300px; }
.s80-quote-src { font-family: var(--f-title); font-size: 14px; color: var(--accent); margin-top: 10px; }
.s80-person { display: flex; flex-direction: column; align-items: center; gap: 2px; }
.s80-person-photo { width: 100px; height: 124px; border-radius: 60px 60px 12px 12px; background: center/cover no-repeat; overflow: hidden; border: 3px solid rgba(255,255,255,.9); box-shadow: 0 0 0 1.5px var(--gold); margin-bottom: 6px; }
.s80-person-name { font-family: var(--f-script); font-size: 38px; line-height: 1.1; color: var(--accent); }
.s80-person-full { font-family: var(--f-title); font-size: 16px; font-weight: 600; }
.s80-person-parents { font-size: 12px; color: var(--muted); line-height: 1.5; }
.s80-couple { gap: 4px; }
.s80-couple .s80-heading { margin-bottom: 4px; }
.s80-couple .s80-h-script { font-size: 38px; }
.s80-amp { font-family: var(--f-script); font-size: 34px; color: var(--gold); line-height: 1; }
.s80-card { background: var(--card); border: 1px solid rgba(0,0,0,.06); border-radius: 18px; padding: 18px 16px; box-shadow: 0 8px 20px rgba(0,0,0,.05); backdrop-filter: blur(4px); }
.s80-dark .s80-card { border-color: rgba(255,255,255,.12); }
.s80-card-title { font-family: var(--f-title); font-size: 22px; font-weight: 600; color: var(--accent); }
.s80-card-date { font-weight: 600; margin-top: 4px; }
.s80-card-time { color: var(--muted); font-size: 13px; }
.s80-card-venue { font-family: var(--f-title); font-weight: 600; font-size: 16px; margin-top: 8px; }
.s80-card-addr { font-size: 12.5px; color: var(--muted); line-height: 1.5; }
.s80-map { border-radius: 16px; overflow: hidden; height: 190px; box-shadow: 0 8px 20px rgba(0,0,0,.08); }
.s80-map svg { display: block; width: 100%; height: 100%; }
.s80-timeline { position: relative; text-align: left; padding-left: 26px; display: flex; flex-direction: column; gap: 16px; }
.s80-timeline::before { content: ""; position: absolute; left: 7px; top: 4px; bottom: 4px; width: 1.5px; background: var(--gold); opacity: .7; }
.s80-tl-item { position: relative; }
.s80-tl-dot { position: absolute; left: -25px; top: 3px; width: 13px; height: 13px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 3px var(--accent-soft); }
.s80-tl-date { font-size: 11.5px; letter-spacing: .15em; color: var(--muted); }
.s80-tl-title { font-family: var(--f-title); font-size: 17px; font-weight: 600; color: var(--accent); }
.s80-tl-text { font-size: 12.5px; line-height: 1.55; }
.s80-gallery { display: grid; grid-template-columns: 1fr 1fr; grid-auto-rows: 118px; gap: 8px; }
.s80-gal-cell { border-radius: 12px; background: center/cover no-repeat; overflow: hidden; }
.s80-gal-big { grid-column: span 2; }
.s80-note { font-size: 13px; line-height: 1.6; color: var(--text); }
.s80-form { display: flex; flex-direction: column; gap: 10px; text-align: left; background: var(--card); border-radius: 18px; padding: 18px; border: 1px solid rgba(0,0,0,.06); }
.s80-input { border: 1px solid rgba(0,0,0,.14); border-radius: 10px; padding: 10px 12px; font-size: 13px; color: var(--muted); background: rgba(255,255,255,.8); }
.s80-dark .s80-input { background: rgba(255,255,255,.08); border-color: rgba(255,255,255,.2); }
.s80-input-lg { height: 76px; }
.s80-radio { display: flex; align-items: center; gap: 8px; font-size: 13px; }
.s80-radio span { width: 16px; height: 16px; border-radius: 50%; border: 1.5px solid var(--accent); display: inline-block; }
.s80-radio span.on { background: radial-gradient(var(--accent) 45%, transparent 50%); }
.s80-bank { background: var(--card); border-radius: 16px; padding: 16px; border: 1px solid rgba(0,0,0,.06); box-shadow: 0 6px 16px rgba(0,0,0,.05); }
.s80-bank-name { font-family: var(--f-title); font-weight: 700; font-size: 18px; color: var(--accent); letter-spacing: .06em; }
.s80-bank-no { font-size: 20px; font-weight: 600; letter-spacing: .08em; margin-top: 2px; }
.s80-bank-holder { font-size: 12.5px; color: var(--muted); }
.s80-wish { text-align: left; background: var(--card); border-radius: 12px; padding: 10px 12px; margin-top: 8px; font-size: 12.5px; border: 1px solid rgba(0,0,0,.05); }
.s80-wish b { display: block; font-size: 12.5px; color: var(--accent); }

/* ---------- Judul & Teks tambahan ---------- */
.s80-extra { margin-top: 4px; }
.s80-extra-t { font-family: var(--f-title); font-size: 21px; font-weight: 600; line-height: 1.25; color: var(--accent); }
.s80-extra-x { font-size: 13px; line-height: 1.6; color: var(--text); margin-top: 4px; }

/* ---------- penyesuaian per template ---------- */
.s80-t-romantic-bloom .s80-cover-arch { padding: 128px 50px 64px; }
.s80-t-islamic-elegant .s80-cover-arch { padding: 146px 56px 64px; }
.s80-t-islamic-elegant .s80-n1, .s80-t-islamic-elegant .s80-n2 { font-size: 58px; }
.s80-t-traditional-javanese .s80-cover { padding-top: 142px; }
.s80-t-modern-luxury .s80-kicker, .s80-t-traditional-javanese .s80-kicker { letter-spacing: .28em; }
.s80-t-modern-luxury .s80-n1, .s80-t-modern-luxury .s80-n2 { font-size: 62px; }
.s80-t-minimalist-love .s80-and i { width: 40px; }
.s80-t-blue-classic .s80-cover-ring { justify-content: flex-start; padding-top: 26px; }
.s80-t-blue-classic .s80-cover-ring .s80-cover-photo { width: 140px; height: 140px; }
.s80-t-blue-classic .s80-cover-ring { gap: 5px; }
.s80-t-blue-classic .s80-cover-ring .s80-n1, .s80-t-blue-classic .s80-cover-ring .s80-n2 { font-size: 44px; }
.s80-t-pink-floral .s80-cover-circle { padding-top: 30px; }
.s80-t-sunset-garden .s80-cover { padding-bottom: 70px; }
.s80-dark .s80-btn { color: #1b1712; }
.s80-dark .s80-db-mid { border-color: var(--text); }

/* ---------- thumbnail ---------- */
.s80-thumb-scale { width: 390px; height: 693px; transform-origin: 0 0; pointer-events: none; }

/* ---------- animasi 4 momen: Muncul, Tampil, Keluar, Kembali ----------
   Nama keyframes & durasi datang dari variabel yang ditulis studio-render.js:
   --kin/--din/--lin (Muncul), --kloop/--dloop (Tampil), --kout/--dout (Keluar), --kback/--dback/--lback (Kembali).
   Kelas is-wait/is-in/is-loop/is-out/is-back diatur mesin animasi (S80Render.animObserve). */
.s80-a { backface-visibility: hidden; }
.s80-a.is-wait { opacity: 0; }
/* Muncul lalu langsung disambung Tampil dalam satu deklarasi: Tampil mulai di 85% durasi Muncul
   (saat gerakan masuk sudah hampir diam), jadi tidak ada jeda/hentakan saat berganti. */
.s80-a.is-in {
  animation: var(--kin) var(--din, 1.2s) var(--ein, cubic-bezier(.16, 1, .3, 1)) var(--lin, 0s) both,
             var(--kloop, none) var(--dloop, 4s) var(--eloop, cubic-bezier(.37, 0, .63, 1)) calc(var(--lin, 0s) + var(--din, 1.2s)) var(--aloopn, infinite) var(--aloopf, none);
  will-change: transform, opacity;
}
.s80-a.is-back {
  animation: var(--kback) var(--dback, .9s) cubic-bezier(.16, 1, .3, 1) var(--lback, 0s) both,
             var(--kloop, none) var(--dloop, 4s) var(--eloop, cubic-bezier(.37, 0, .63, 1)) calc(var(--lback, 0s) + var(--dback, .9s)) var(--aloopn, infinite) var(--aloopf, none);
  will-change: transform, opacity;
}
/* Super halus (UPDATE KE-90): gerakan Tampil mulai TEPAT saat Muncul selesai, dan kekuatannya naik pelan dari 0
   (variabel --s80amp dianimasikan 0 -> 1), jadi tidak ada hentakan/patah sama sekali saat berganti. */
.s80-amp .s80-a.is-in {
  animation: var(--kin) var(--din, 1.2s) var(--ein, cubic-bezier(.16, 1, .3, 1)) var(--lin, 0s) both,
             var(--kloop, none) var(--dloop, 4s) var(--eloop, cubic-bezier(.37, 0, .63, 1)) calc(var(--lin, 0s) + var(--din, 1.2s)) var(--aloopn, infinite) var(--aloopf, none),
             s80AmpIn calc(var(--dloop, 4s) * .75) cubic-bezier(.45, 0, .55, 1) calc(var(--lin, 0s) + var(--din, 1.2s)) 1 both;
}
.s80-amp .s80-a.is-back {
  animation: var(--kback) var(--dback, .9s) cubic-bezier(.16, 1, .3, 1) var(--lback, 0s) both,
             var(--kloop, none) var(--dloop, 4s) var(--eloop, cubic-bezier(.37, 0, .63, 1)) calc(var(--lback, 0s) + var(--dback, .9s)) var(--aloopn, infinite) var(--aloopf, none),
             s80AmpIn calc(var(--dloop, 4s) * .75) cubic-bezier(.45, 0, .55, 1) calc(var(--lback, 0s) + var(--dback, .9s)) 1 both;
}
.s80-amp .s80-a.is-loop {
  animation: var(--kloop) var(--dloop, 4s) var(--eloop, cubic-bezier(.37, 0, .63, 1)) 0s var(--aloopn, infinite) var(--aloopf, none),
             s80AmpIn calc(var(--dloop, 4s) * .75) cubic-bezier(.45, 0, .55, 1) 0s 1 both;
}
@keyframes s80AmpIn { from { --s80amp: 0; } to { --s80amp: 1; } }
.s80-a.is-out { animation: var(--kout) var(--dout, .7s) cubic-bezier(.55, 0, .75, .25) 0s both; will-change: transform, opacity; }
.s80-a.is-loop { animation: var(--kloop) var(--dloop, 4s) var(--eloop, cubic-bezier(.37, 0, .63, 1)) 0s var(--aloopn, infinite) var(--aloopf, none); will-change: transform; }

/* Muncul */
@keyframes s80Fade { from { opacity: 0; filter: blur(6px); } to { opacity: 1; filter: none; } }
@keyframes s80SlideUp { from { opacity: 0; transform: translate3d(0, 42px, 0); filter: blur(4px); } to { opacity: 1; transform: none; filter: none; } }
@keyframes s80SlideDown { from { opacity: 0; transform: translate3d(0, -42px, 0); filter: blur(4px); } to { opacity: 1; transform: none; filter: none; } }
@keyframes s80SlideLeft { from { opacity: 0; transform: translate3d(56px, 0, 0); filter: blur(4px); } to { opacity: 1; transform: none; filter: none; } }
@keyframes s80SlideRight { from { opacity: 0; transform: translate3d(-56px, 0, 0); filter: blur(4px); } to { opacity: 1; transform: none; filter: none; } }
@keyframes s80Zoom { from { opacity: 0; transform: scale3d(.86, .86, 1); filter: blur(5px); } to { opacity: 1; transform: none; filter: none; } }
@keyframes s80ZoomIn2 { from { opacity: 0; transform: scale3d(1.18, 1.18, 1); filter: blur(6px); } to { opacity: 1; transform: none; filter: none; } }
@keyframes s80BlurIn { from { opacity: 0; transform: scale3d(1.04, 1.04, 1); filter: blur(16px); } to { opacity: 1; transform: none; filter: none; } }
@keyframes s80Rise { from { opacity: 0; transform: translate3d(0, 64px, 0) scale3d(.94, .94, 1); filter: blur(6px); } to { opacity: 1; transform: none; filter: none; } }
@keyframes s80EnvelopeRise { from { opacity: 1; transform: translate3d(var(--env-x, 0px), var(--env-y, 120px), 0); } to { opacity: 1; transform: none; } }
@keyframes s80Reveal { from { opacity: 0; clip-path: inset(-40% -40% 100% -40%); transform: translate3d(0, 14px, 0); } 20% { opacity: 1; } to { opacity: 1; clip-path: inset(-40% -40% -40% -40%); transform: none; } }
@keyframes s80Pop { 0% { opacity: 0; transform: scale3d(.6, .6, 1); } 60% { opacity: 1; transform: scale3d(1.06, 1.06, 1); } 80% { transform: scale3d(.98, .98, 1); } 100% { opacity: 1; transform: none; } }
@keyframes s80FlipIn { from { opacity: 0; transform: perspective(700px) rotateX(-75deg); } to { opacity: 1; transform: none; } }
@keyframes s80SpinIn { from { opacity: 0; transform: rotate(-14deg) scale3d(.8, .8, 1); filter: blur(4px); } to { opacity: 1; transform: none; filter: none; } }
/* Tampil (berulang) */
/* jarak/kekuatan gerak bisa diatur per item lewat variabel --aloop (px), --aloopd (derajat), --aloops (skala), --aloopg (px) (UPDATE KE-76) */
/* UPDATE KE-90: Melayang & Bergoyang digambar sebagai gelombang sinus (32 titik, linear) = gerakan sangat halus tanpa berhenti di tengah */
@keyframes s80Float {
  0% { transform: translate3d(0, calc(var(--aloop, 10px) * 0 * var(--s80amp, 1)), 0); }
  4.167% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.017 * var(--s80amp, 1)), 0); }
  8.333% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.067 * var(--s80amp, 1)), 0); }
  12.5% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.1464 * var(--s80amp, 1)), 0); }
  16.67% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.25 * var(--s80amp, 1)), 0); }
  20.83% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.3706 * var(--s80amp, 1)), 0); }
  25% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.5 * var(--s80amp, 1)), 0); }
  29.17% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.6294 * var(--s80amp, 1)), 0); }
  33.33% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.75 * var(--s80amp, 1)), 0); }
  37.5% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.8536 * var(--s80amp, 1)), 0); }
  41.67% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.933 * var(--s80amp, 1)), 0); }
  45.83% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.983 * var(--s80amp, 1)), 0); }
  50% { transform: translate3d(0, calc(var(--aloop, 10px) * -1 * var(--s80amp, 1)), 0); }
  54.17% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.983 * var(--s80amp, 1)), 0); }
  58.33% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.933 * var(--s80amp, 1)), 0); }
  62.5% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.8536 * var(--s80amp, 1)), 0); }
  66.67% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.75 * var(--s80amp, 1)), 0); }
  70.83% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.6294 * var(--s80amp, 1)), 0); }
  75% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.5 * var(--s80amp, 1)), 0); }
  79.17% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.3706 * var(--s80amp, 1)), 0); }
  83.33% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.25 * var(--s80amp, 1)), 0); }
  87.5% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.1464 * var(--s80amp, 1)), 0); }
  91.67% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.067 * var(--s80amp, 1)), 0); }
  95.83% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.017 * var(--s80amp, 1)), 0); }
  100% { transform: translate3d(0, calc(var(--aloop, 10px) * 0 * var(--s80amp, 1)), 0); }
}
@keyframes s80SwayUp {
  0% { transform: translate3d(0, calc(var(--aloop, 10px) * 0 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0 * var(--s80amp, 1))); }
  3.125% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.0096 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.1951 * var(--s80amp, 1))); }
  6.25% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.0381 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.3827 * var(--s80amp, 1))); }
  9.375% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.0843 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.5556 * var(--s80amp, 1))); }
  12.5% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.1464 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.7071 * var(--s80amp, 1))); }
  15.62% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.2222 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.8315 * var(--s80amp, 1))); }
  18.75% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.3087 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.9239 * var(--s80amp, 1))); }
  21.88% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.4025 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.9808 * var(--s80amp, 1))); }
  25% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.5 * var(--s80amp, 1)), 0) rotate(calc(3deg * 1 * var(--s80amp, 1))); }
  28.12% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.5975 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.9808 * var(--s80amp, 1))); }
  31.25% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.6913 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.9239 * var(--s80amp, 1))); }
  34.38% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.7778 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.8315 * var(--s80amp, 1))); }
  37.5% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.8536 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.7071 * var(--s80amp, 1))); }
  40.62% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.9157 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.5556 * var(--s80amp, 1))); }
  43.75% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.9619 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.3827 * var(--s80amp, 1))); }
  46.88% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.9904 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0.1951 * var(--s80amp, 1))); }
  50% { transform: translate3d(0, calc(var(--aloop, 10px) * -1 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0 * var(--s80amp, 1))); }
  53.12% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.9904 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.1951 * var(--s80amp, 1))); }
  56.25% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.9619 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.3827 * var(--s80amp, 1))); }
  59.38% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.9157 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.5556 * var(--s80amp, 1))); }
  62.5% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.8536 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.7071 * var(--s80amp, 1))); }
  65.62% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.7778 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.8315 * var(--s80amp, 1))); }
  68.75% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.6913 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.9239 * var(--s80amp, 1))); }
  71.88% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.5975 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.9808 * var(--s80amp, 1))); }
  75% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.5 * var(--s80amp, 1)), 0) rotate(calc(3deg * -1 * var(--s80amp, 1))); }
  78.12% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.4025 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.9808 * var(--s80amp, 1))); }
  81.25% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.3087 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.9239 * var(--s80amp, 1))); }
  84.38% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.2222 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.8315 * var(--s80amp, 1))); }
  87.5% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.1464 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.7071 * var(--s80amp, 1))); }
  90.62% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.0843 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.5556 * var(--s80amp, 1))); }
  93.75% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.0381 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.3827 * var(--s80amp, 1))); }
  96.88% { transform: translate3d(0, calc(var(--aloop, 10px) * -0.0096 * var(--s80amp, 1)), 0) rotate(calc(3deg * -0.1951 * var(--s80amp, 1))); }
  100% { transform: translate3d(0, calc(var(--aloop, 10px) * 0 * var(--s80amp, 1)), 0) rotate(calc(3deg * 0 * var(--s80amp, 1))); }
}
@keyframes s80SwayX {
  0% { transform: translate3d(calc(var(--aloop, 8px) * 0 * var(--s80amp, 1)), 0, 0); }
  3.125% { transform: translate3d(calc(var(--aloop, 8px) * 0.1951 * var(--s80amp, 1)), 0, 0); }
  6.25% { transform: translate3d(calc(var(--aloop, 8px) * 0.3827 * var(--s80amp, 1)), 0, 0); }
  9.375% { transform: translate3d(calc(var(--aloop, 8px) * 0.5556 * var(--s80amp, 1)), 0, 0); }
  12.5% { transform: translate3d(calc(var(--aloop, 8px) * 0.7071 * var(--s80amp, 1)), 0, 0); }
  15.62% { transform: translate3d(calc(var(--aloop, 8px) * 0.8315 * var(--s80amp, 1)), 0, 0); }
  18.75% { transform: translate3d(calc(var(--aloop, 8px) * 0.9239 * var(--s80amp, 1)), 0, 0); }
  21.88% { transform: translate3d(calc(var(--aloop, 8px) * 0.9808 * var(--s80amp, 1)), 0, 0); }
  25% { transform: translate3d(calc(var(--aloop, 8px) * 1 * var(--s80amp, 1)), 0, 0); }
  28.12% { transform: translate3d(calc(var(--aloop, 8px) * 0.9808 * var(--s80amp, 1)), 0, 0); }
  31.25% { transform: translate3d(calc(var(--aloop, 8px) * 0.9239 * var(--s80amp, 1)), 0, 0); }
  34.38% { transform: translate3d(calc(var(--aloop, 8px) * 0.8315 * var(--s80amp, 1)), 0, 0); }
  37.5% { transform: translate3d(calc(var(--aloop, 8px) * 0.7071 * var(--s80amp, 1)), 0, 0); }
  40.62% { transform: translate3d(calc(var(--aloop, 8px) * 0.5556 * var(--s80amp, 1)), 0, 0); }
  43.75% { transform: translate3d(calc(var(--aloop, 8px) * 0.3827 * var(--s80amp, 1)), 0, 0); }
  46.88% { transform: translate3d(calc(var(--aloop, 8px) * 0.1951 * var(--s80amp, 1)), 0, 0); }
  50% { transform: translate3d(calc(var(--aloop, 8px) * 0 * var(--s80amp, 1)), 0, 0); }
  53.12% { transform: translate3d(calc(var(--aloop, 8px) * -0.1951 * var(--s80amp, 1)), 0, 0); }
  56.25% { transform: translate3d(calc(var(--aloop, 8px) * -0.3827 * var(--s80amp, 1)), 0, 0); }
  59.38% { transform: translate3d(calc(var(--aloop, 8px) * -0.5556 * var(--s80amp, 1)), 0, 0); }
  62.5% { transform: translate3d(calc(var(--aloop, 8px) * -0.7071 * var(--s80amp, 1)), 0, 0); }
  65.62% { transform: translate3d(calc(var(--aloop, 8px) * -0.8315 * var(--s80amp, 1)), 0, 0); }
  68.75% { transform: translate3d(calc(var(--aloop, 8px) * -0.9239 * var(--s80amp, 1)), 0, 0); }
  71.88% { transform: translate3d(calc(var(--aloop, 8px) * -0.9808 * var(--s80amp, 1)), 0, 0); }
  75% { transform: translate3d(calc(var(--aloop, 8px) * -1 * var(--s80amp, 1)), 0, 0); }
  78.12% { transform: translate3d(calc(var(--aloop, 8px) * -0.9808 * var(--s80amp, 1)), 0, 0); }
  81.25% { transform: translate3d(calc(var(--aloop, 8px) * -0.9239 * var(--s80amp, 1)), 0, 0); }
  84.38% { transform: translate3d(calc(var(--aloop, 8px) * -0.8315 * var(--s80amp, 1)), 0, 0); }
  87.5% { transform: translate3d(calc(var(--aloop, 8px) * -0.7071 * var(--s80amp, 1)), 0, 0); }
  90.62% { transform: translate3d(calc(var(--aloop, 8px) * -0.5556 * var(--s80amp, 1)), 0, 0); }
  93.75% { transform: translate3d(calc(var(--aloop, 8px) * -0.3827 * var(--s80amp, 1)), 0, 0); }
  96.88% { transform: translate3d(calc(var(--aloop, 8px) * -0.1951 * var(--s80amp, 1)), 0, 0); }
  100% { transform: translate3d(calc(var(--aloop, 8px) * 0 * var(--s80amp, 1)), 0, 0); }
}
@keyframes s80Sway {
  0% { transform: rotate(calc(var(--aloopd, 3deg) * 0 * var(--s80amp, 1))); }
  3.125% { transform: rotate(calc(var(--aloopd, 3deg) * 0.1951 * var(--s80amp, 1))); }
  6.25% { transform: rotate(calc(var(--aloopd, 3deg) * 0.3827 * var(--s80amp, 1))); }
  9.375% { transform: rotate(calc(var(--aloopd, 3deg) * 0.5556 * var(--s80amp, 1))); }
  12.5% { transform: rotate(calc(var(--aloopd, 3deg) * 0.7071 * var(--s80amp, 1))); }
  15.62% { transform: rotate(calc(var(--aloopd, 3deg) * 0.8315 * var(--s80amp, 1))); }
  18.75% { transform: rotate(calc(var(--aloopd, 3deg) * 0.9239 * var(--s80amp, 1))); }
  21.88% { transform: rotate(calc(var(--aloopd, 3deg) * 0.9808 * var(--s80amp, 1))); }
  25% { transform: rotate(calc(var(--aloopd, 3deg) * 1 * var(--s80amp, 1))); }
  28.12% { transform: rotate(calc(var(--aloopd, 3deg) * 0.9808 * var(--s80amp, 1))); }
  31.25% { transform: rotate(calc(var(--aloopd, 3deg) * 0.9239 * var(--s80amp, 1))); }
  34.38% { transform: rotate(calc(var(--aloopd, 3deg) * 0.8315 * var(--s80amp, 1))); }
  37.5% { transform: rotate(calc(var(--aloopd, 3deg) * 0.7071 * var(--s80amp, 1))); }
  40.62% { transform: rotate(calc(var(--aloopd, 3deg) * 0.5556 * var(--s80amp, 1))); }
  43.75% { transform: rotate(calc(var(--aloopd, 3deg) * 0.3827 * var(--s80amp, 1))); }
  46.88% { transform: rotate(calc(var(--aloopd, 3deg) * 0.1951 * var(--s80amp, 1))); }
  50% { transform: rotate(calc(var(--aloopd, 3deg) * 0 * var(--s80amp, 1))); }
  53.12% { transform: rotate(calc(var(--aloopd, 3deg) * -0.1951 * var(--s80amp, 1))); }
  56.25% { transform: rotate(calc(var(--aloopd, 3deg) * -0.3827 * var(--s80amp, 1))); }
  59.38% { transform: rotate(calc(var(--aloopd, 3deg) * -0.5556 * var(--s80amp, 1))); }
  62.5% { transform: rotate(calc(var(--aloopd, 3deg) * -0.7071 * var(--s80amp, 1))); }
  65.62% { transform: rotate(calc(var(--aloopd, 3deg) * -0.8315 * var(--s80amp, 1))); }
  68.75% { transform: rotate(calc(var(--aloopd, 3deg) * -0.9239 * var(--s80amp, 1))); }
  71.88% { transform: rotate(calc(var(--aloopd, 3deg) * -0.9808 * var(--s80amp, 1))); }
  75% { transform: rotate(calc(var(--aloopd, 3deg) * -1 * var(--s80amp, 1))); }
  78.12% { transform: rotate(calc(var(--aloopd, 3deg) * -0.9808 * var(--s80amp, 1))); }
  81.25% { transform: rotate(calc(var(--aloopd, 3deg) * -0.9239 * var(--s80amp, 1))); }
  84.38% { transform: rotate(calc(var(--aloopd, 3deg) * -0.8315 * var(--s80amp, 1))); }
  87.5% { transform: rotate(calc(var(--aloopd, 3deg) * -0.7071 * var(--s80amp, 1))); }
  90.62% { transform: rotate(calc(var(--aloopd, 3deg) * -0.5556 * var(--s80amp, 1))); }
  93.75% { transform: rotate(calc(var(--aloopd, 3deg) * -0.3827 * var(--s80amp, 1))); }
  96.88% { transform: rotate(calc(var(--aloopd, 3deg) * -0.1951 * var(--s80amp, 1))); }
  100% { transform: rotate(calc(var(--aloopd, 3deg) * 0 * var(--s80amp, 1))); }
}
@keyframes s80Breathe { 0%, 100% { transform: scale3d(1, 1, 1); opacity: 1; } 50% { transform: scale3d(calc(1 + var(--aloops, .035) * var(--s80amp, 1)), calc(1 + var(--aloops, .035) * var(--s80amp, 1)), 1); opacity: .86; } }
@keyframes s80Pulse { 0%, 100% { transform: scale3d(1, 1, 1); } 50% { transform: scale3d(calc(1 + var(--aloops, .07) * var(--s80amp, 1)), calc(1 + var(--aloops, .07) * var(--s80amp, 1)), 1); } }
@keyframes s80Bounce { 0%, 100% { transform: translate3d(0, 0, 0); } 40% { transform: translate3d(0, calc(var(--aloop, 12px) * -1 * var(--s80amp, 1)), 0); } 60% { transform: translate3d(0, calc(var(--aloop, 12px) * -1 * var(--s80amp, 1)), 0); } 80% { transform: translate3d(0, calc(var(--aloop, 12px) / 6 * var(--s80amp, 1)), 0); } }
@keyframes s80Glow { 0%, 100% { filter: drop-shadow(0 0 0 rgba(255, 255, 255, 0)) brightness(1); } 50% { filter: drop-shadow(0 0 var(--aloopg, 9px) var(--accent, #F70487)) brightness(1.08); } }
@keyframes s80Rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
/* Keluar */
@keyframes s80FadeOut { to { opacity: 0; filter: blur(6px); } }
@keyframes s80UpOut { to { opacity: 0; transform: translate3d(0, -42px, 0); filter: blur(4px); } }
@keyframes s80DownOut { to { opacity: 0; transform: translate3d(0, 42px, 0); filter: blur(4px); } }
@keyframes s80ZoomAway { to { opacity: 0; transform: scale3d(.84, .84, 1); filter: blur(5px); } }
@keyframes s80BlurOut { to { opacity: 0; filter: blur(16px); transform: scale3d(1.05, 1.05, 1); } }
@media (prefers-reduced-motion: reduce) { .s80-a, .s80-a.is-wait { animation: none !important; opacity: 1 !important; } }

/* ---------- UPDATE KE-51: gaya teks blok diteruskan ke semua teks di dalamnya ---------- */
.s80-b[style*="--s80c:"] * { color: var(--s80c) !important; }
.s80-b[style*="--s80f:"], .s80-b[style*="--s80f:"] * { font-family: var(--s80f) !important; }
.s80-b[style*="--s80w:"], .s80-b[style*="--s80w:"] * { font-weight: var(--s80w) !important; }
.s80-b[style*="--s80i:"], .s80-b[style*="--s80i:"] * { font-style: var(--s80i) !important; }
.s80-b[style*="--s80ls:"], .s80-b[style*="--s80ls:"] * { letter-spacing: var(--s80ls) !important; }
.s80-b[style*="--s80lh:"], .s80-b[style*="--s80lh:"] * { line-height: var(--s80lh) !important; }
.s80-b[style*="--s80tt:"], .s80-b[style*="--s80tt:"] * { text-transform: var(--s80tt) !important; }
.s80-b[style*="--s80op:"] > * { opacity: var(--s80op); }
/* efek teks blok (Bayangan, Kerangka, Neon, dll) - dihitung per teks supaya ukurannya pas */
.s80-b[style*="--s80ts:"], .s80-b[style*="--s80ts:"] * { text-shadow: var(--s80ts); }
.s80-b[style*="--s80st:"], .s80-b[style*="--s80st:"] * { -webkit-text-stroke: var(--s80st); paint-order: var(--s80po, normal); }
.s80-b[style*="--s80tf:"], .s80-b[style*="--s80tf:"] * { -webkit-text-fill-color: var(--s80tf); }
/* teks bebas: daftar berpoin / bernomor & teks melengkung */
.s80-el-text.is-list .s80-li { display: block; padding-left: 1.35em; text-indent: -1.35em; }
.s80-el-text.is-list .s80-li b { display: inline-block; width: 1.35em; text-indent: 0; font-weight: inherit; }
.s80-el-curve { display: flex; justify-content: center; }
.s80-el-curve svg { display: block; overflow: visible; width: 100%; height: auto; }

/* UPDATE KE-60: lapisan video */
.s80-el-videobox { position: relative; background: #111; }
.s80-el-videobox video { width: 100%; height: 100%; display: block; }
.s80-el-vbadge { position: absolute; left: 6px; bottom: 6px; background: rgba(0,0,0,.55); color: #fff; font: 600 10px/1 sans-serif; padding: 4px 7px; border-radius: 99px; pointer-events: none; }
.s80-bgvideo, .s80-bgvideo-ov { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }

/* UPDATE KE-68: ukuran font judul Tambahan (px) */
.s80-b[style*="--s80fs:"] .s80-extra-t { font-size: var(--s80fs) !important; }

/* UPDATE KE-70: elemen di belakang teks halaman. Area kosong isi halaman tembus klik supaya gambar di belakang tetap bisa dipilih */
.s80-page.has-behind .s80-content, .s80-page.has-behind .s80-content * { pointer-events: none; }
.s80-page.has-behind .s80-content .s80-b, .s80-page.has-behind .s80-content .s80-b *,
.s80-page.has-behind .s80-content a, .s80-page.has-behind .s80-content button, .s80-page.has-behind .s80-content input,
.s80-page.has-behind .s80-content textarea, .s80-page.has-behind .s80-content select, .s80-page.has-behind .s80-content label,
.s80-page.has-behind .s80-content iframe, .s80-page.has-behind .s80-content audio, .s80-page.has-behind .s80-content video { pointer-events: auto; }

/* UPDATE KE-76: gradasi warna di atas foto/video */
.s80-el-grad { position: absolute; inset: 0; pointer-events: none; border-radius: inherit; display: block; }

/* UPDATE KE-77: Terbang Melintas (animasi Tampil) + sayap mengepak */
@keyframes s80FlyR {
  0% { transform: translate3d(var(--fx0, -460px), 0, 0) scaleX(var(--fflip, 1)); }
  20% { transform: translate3d(calc(var(--fx0, -460px) * .75 + var(--fx1, 460px) * .25), calc(var(--aloop, 14px) * -1), 0) scaleX(var(--fflip, 1)); }
  40% { transform: translate3d(calc(var(--fx0, -460px) * .5 + var(--fx1, 460px) * .5), 0, 0) scaleX(var(--fflip, 1)); }
  60% { transform: translate3d(calc(var(--fx0, -460px) * .25 + var(--fx1, 460px) * .75), calc(var(--aloop, 14px) * -1), 0) scaleX(var(--fflip, 1)); }
  80%, 100% { transform: translate3d(var(--fx1, 460px), 0, 0) scaleX(var(--fflip, 1)); }
}
@keyframes s80FlyL {
  0% { transform: translate3d(var(--fx1, 460px), 0, 0) scaleX(var(--fflip, 1)); }
  20% { transform: translate3d(calc(var(--fx1, 460px) * .75 + var(--fx0, -460px) * .25), calc(var(--aloop, 14px) * -1), 0) scaleX(var(--fflip, 1)); }
  40% { transform: translate3d(calc(var(--fx1, 460px) * .5 + var(--fx0, -460px) * .5), 0, 0) scaleX(var(--fflip, 1)); }
  60% { transform: translate3d(calc(var(--fx1, 460px) * .25 + var(--fx0, -460px) * .75), calc(var(--aloop, 14px) * -1), 0) scaleX(var(--fflip, 1)); }
  80%, 100% { transform: translate3d(var(--fx0, -460px), 0, 0) scaleX(var(--fflip, 1)); }
}
.s80-flap { transform-box: fill-box; transform-origin: 50% 100%; animation: s80Flap .42s ease-in-out infinite alternate; }
.s80-flap-b { animation-delay: -.21s; }
@keyframes s80Flap { from { transform: scaleY(1); } to { transform: scaleY(-.5); } }
.s80-flapx { transform-box: fill-box; animation: s80FlapX .32s ease-in-out infinite alternate; }
.s80-flapx-l { transform-origin: 100% 50%; }
.s80-flapx-r { transform-origin: 0% 50%; }
@keyframes s80FlapX { from { transform: scaleX(1); } to { transform: scaleX(.28); } }

/* UPDATE KE-78: merpati realistis — kepakan lebih lembut, sayap depan berputar di bahu, kepala mengangguk */
.s80-flap-soft { animation-name: s80FlapSoft; animation-duration: .5s; }
@keyframes s80FlapSoft { from { transform: scaleY(1); } to { transform: scaleY(-.38); } }
.s80-flap-late .s80-flap { animation-delay: -.18s; }
.s80-flap-late .s80-flap.s80-flap-b { animation-delay: -.4s; }
.s80-flapr-l, .s80-flapr-r { transform-box: fill-box; animation: s80FlapRL .5s ease-in-out infinite alternate; }
.s80-flapr-l { transform-origin: 100% 95%; }
.s80-flapr-r { transform-origin: 0% 95%; animation-name: s80FlapRR; }
@keyframes s80FlapRL { from { transform: rotate(4deg); } to { transform: rotate(-36deg) scaleY(.85); } }
@keyframes s80FlapRR { from { transform: rotate(-4deg); } to { transform: rotate(36deg) scaleY(.85); } }
.s80-nod { transform-box: fill-box; transform-origin: 0% 100%; animation: s80Nod 2.6s ease-in-out infinite; }
@keyframes s80Nod { 0%, 70%, 100% { transform: translate(0, 0) rotate(0); } 78% { transform: translate(2px, 2px) rotate(8deg); } 86% { transform: translate(0, 0) rotate(0); } }

/* UPDATE KE-79: animasi Lottie */
.s80-lottie { width: 100%; height: 100%; }
.s80-lottie svg { display: block; }
.s80-lottie.is-error { display: flex; align-items: center; justify-content: center; border: 1.5px dashed rgba(0,0,0,.25); border-radius: 8px; font: 600 11px/1.2 sans-serif; color: rgba(0,0,0,.45); text-align: center; }

/* ================= UPDATE KE-80: Urutan lapisan bebas (teks & elemen) ================= */
.s80-page.has-order { isolation: isolate; }
.s80-page.has-order > .s80-bg { z-index: -2000; }
.s80-page.has-order > .s80-orn { z-index: -1999; }

/* ================= UPDATE KE-84: foto yang belum diisi tidak tampil di Preview / undangan ================= */
.s80-page.is-live .s80-ph { visibility: hidden; }

/* ================= UPDATE KE-86: Galeri foto (elegan & lembut) ================= */
.s80-el-gallery .s80-el-inner { height: 100%; }
.s80-gal { position: relative; width: 100%; height: 100%; font-family: var(--f-body); }
.s80-gal-stage { position: absolute; left: 0; right: 0; transition: opacity .26s ease, transform .26s ease, filter .26s ease; }
.s80-gal-cell { position: absolute; box-sizing: border-box; overflow: hidden; border-radius: var(--grad, 10px); border: var(--gframe-width, 2px) var(--gframe-style, solid) var(--gframe-color, #fff); background: rgba(255,255,255,.55); box-shadow: var(--gframe-shadow, 0 6px 18px rgba(60,30,45,.10)); cursor: zoom-in; }
.s80-gal-cell img, .s80-gal-slide img, .s80-gal-card img { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .6s ease; }
.s80-page.is-live .s80-gal-cell:hover img { transform: scale(1.04); }
.s80-gal-stage.is-polaroid .s80-gal-cell.is-polaroid-cell { border-radius: 4px; border-bottom-width: 16px; background: var(--gframe-color, #fff); box-shadow: 0 5px 12px rgba(45,30,35,.16); }
.s80-gal-stage.is-polaroid .s80-gal-cell.is-polaroid-cell img { position: absolute; left: 4px; top: 4px; width: calc(100% - 8px); height: calc(100% - 23px); }
.s80-gal-stage.is-polaroid .s80-gal-cell.is-polaroid-cell .s80-gal-ov { inset: 4px 4px 19px; }
.s80-gal-stage.is-cascade .s80-gal-cell { border-radius: 14px; box-shadow: 0 9px 24px rgba(45,30,35,.2); }
.s80-gal-stage.is-scrapbook .s80-gal-cell { border-radius: 3px; box-shadow: 0 5px 15px rgba(45,30,35,.2); }
.s80-gal-more { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: rgba(40, 20, 30, .42); color: #fff; font-size: 20px; font-weight: 500; letter-spacing: .04em; backdrop-filter: blur(1px); }
/* tombol ganti tampilan */
.s80-gal-switch { position: absolute; top: 0; left: 50%; transform: translateX(-50%); height: 28px; max-width: calc(100% - 8px); display: flex; gap: 2px; padding: 3px; border-radius: 999px; background: rgba(255,255,255,.82); box-shadow: 0 3px 12px rgba(60,30,45,.12); backdrop-filter: blur(6px); z-index: 3; overflow-x: auto; scrollbar-width: none; }
.s80-gal-switch::-webkit-scrollbar { display: none; }
.s80-gal-switch button { flex: 0 0 30px; width: 30px; height: 22px; border: 0; border-radius: 999px; background: transparent; color: #8a7a82; display: flex; align-items: center; justify-content: center; padding: 0; cursor: pointer; transition: background .2s, color .2s; }
.s80-gal-switch button svg { width: 15px; height: 15px; }
.s80-gal-switch button.is-on { background: var(--gacc); color: #fff; }
/* slideshow */
.s80-gal-stage.is-slideshow { border-radius: var(--grad, 10px); overflow: hidden; box-shadow: var(--gstage-shadow, 0 8px 24px rgba(60,30,45,.14)); }
.s80-gal-slide { position: absolute; box-sizing: border-box; inset: 0; border: var(--gframe-width, 2px) var(--gframe-style, solid) var(--gframe-color, #fff); box-shadow: var(--gframe-shadow, 0 6px 18px rgba(60,30,45,.10)); opacity: 0; transition: opacity var(--gtd, .52s) ease, transform var(--gtd, .52s) ease, filter var(--gtd, .52s) ease; cursor: zoom-in; }
.s80-gal-slide.is-on { opacity: 1; z-index: 1; }
.s80-gal[data-trans="slide"] .s80-gal-slide.is-in.dir-l { transform: translateX(14%); opacity: 0; }
.s80-gal[data-trans="slide"] .s80-gal-slide.is-in.dir-r { transform: translateX(-14%); opacity: 0; }
.s80-gal[data-trans="slide"] .s80-gal-slide.is-out.dir-l { transform: translateX(-14%); }
.s80-gal[data-trans="slide"] .s80-gal-slide.is-out.dir-r { transform: translateX(14%); }
.s80-gal[data-trans="zoom"] .s80-gal-slide.is-in { transform: scale(1.06); opacity: 0; }
.s80-gal[data-trans="zoom"] .s80-gal-slide.is-out { transform: scale(.97); }
.s80-gal[data-trans="fade"] .s80-gal-slide.is-in { opacity: 0; }
.s80-gal[data-trans="blur"] .s80-gal-slide.is-in { filter: blur(9px); opacity: 0; transform: scale(1.035); }
.s80-gal[data-trans="blur"] .s80-gal-slide.is-out { filter: blur(5px); opacity: 0; }
.s80-gal[data-trans="rise"] .s80-gal-slide.is-in { transform: translateY(10%); opacity: 0; }
.s80-gal[data-trans="rise"] .s80-gal-slide.is-out { transform: translateY(-7%); opacity: 0; }
.s80-gal[data-trans="flip"] .s80-gal-slide { backface-visibility: hidden; }
.s80-gal[data-trans="flip"] .s80-gal-slide.is-in { transform: perspective(900px) rotateY(10deg); opacity: 0; }
.s80-gal[data-trans="flip"] .s80-gal-slide.is-out { transform: perspective(900px) rotateY(-8deg); opacity: 0; }
.s80-gal-slide.is-on.is-in { animation: s80GalIn var(--gtd, .52s) ease forwards; }
@keyframes s80GalIn { to { opacity: 1; transform: none; } }
.s80-gal-nav { position: absolute; top: 50%; transform: translateY(-50%); z-index: 2; width: 30px; height: 30px; border: 0; border-radius: 50%; background: rgba(255,255,255,.78); color: #5a4650; font-size: 22px; line-height: 1; display: flex; align-items: center; justify-content: center; padding: 0 0 2px; cursor: pointer; box-shadow: 0 2px 8px rgba(0,0,0,.12); }
.s80-gal-nav.is-prev { left: 8px; } .s80-gal-nav.is-next { right: 8px; }
.s80-gal-bar { position: absolute; left: 0; right: 0; bottom: 8px; z-index: 2; display: flex; align-items: center; justify-content: center; gap: 10px; }
.s80-gal-dots { display: flex; gap: 5px; padding: 5px 8px; border-radius: 999px; background: rgba(0,0,0,.18); }
.s80-gal-dots i { width: 6px; height: 6px; border-radius: 50%; background: rgba(255,255,255,.6); cursor: pointer; transition: width .3s, background .3s; }
.s80-gal-dots i.is-on { width: 16px; border-radius: 4px; background: #fff; }
.s80-gal-count { font-size: 11px; color: #fff; background: rgba(0,0,0,.25); padding: 3px 9px; border-radius: 999px; letter-spacing: .05em; }
.s80-gal-pause { width: 24px; height: 24px; border-radius: 50%; border: 0; background: rgba(255,255,255,.85); display: flex; align-items: center; justify-content: center; cursor: pointer; padding: 0; }
.s80-gal-pause span { width: 8px; height: 9px; border-left: 2.5px solid #5a4650; border-right: 2.5px solid #5a4650; }
.s80-gal-pause.is-paused span { width: 0; height: 0; border: 0; border-left: 8px solid #5a4650; border-top: 5px solid transparent; border-bottom: 5px solid transparent; margin-left: 2px; }
/* kartu bertumpuk */
.s80-gal-card { position: absolute; box-sizing: border-box; overflow: hidden; border-radius: var(--grad, 10px); background: #fff; border: var(--gframe-width, 6px) var(--gframe-style, solid) var(--gframe-color, #fff); box-shadow: var(--gframe-shadow, 0 10px 26px rgba(60,30,45,.18)); transition: transform var(--gtd, .45s) ease, opacity var(--gtd, .38s) ease, filter var(--gtd, .45s) ease; cursor: pointer; }
.s80-gal-card.is-top { cursor: zoom-in; }
.s80-gal-card.is-leave { transform: translateX(-40%) rotate(-14deg) !important; opacity: 0; }
.s80-gal[data-trans="fade"] .s80-gal-card.is-leave { transform: scale(.94) !important; }
.s80-gal[data-trans="zoom"] .s80-gal-card.is-leave { transform: scale(1.12) !important; }
.s80-gal[data-trans="blur"] .s80-gal-card.is-leave { filter: blur(6px); transform: scale(.94) !important; }
.s80-gal[data-trans="rise"] .s80-gal-card.is-leave { transform: translateY(-14%) scale(.96) !important; }
.s80-gal[data-trans="flip"] .s80-gal-card.is-leave { transform: perspective(800px) rotateY(70deg) scale(.9) !important; }
.s80-gal-card.is-arrive { animation: s80GalCard .4s ease; }
@keyframes s80GalCard { from { transform: translateY(10px) scale(.97); } }
.s80-gal-bar.is-stack { bottom: 0; }
.s80-gal-bar.is-stack .s80-gal-count { background: rgba(255,255,255,.8); color: #5a4650; }
.s80-gal-next2 { border: 0; border-radius: 999px; background: var(--gacc); color: #fff; font: inherit; font-size: 11.5px; padding: 5px 12px; cursor: pointer; box-shadow: 0 3px 10px rgba(0,0,0,.12); }
/* perpindahan antar tampilan: singkat & lembut */
.s80-gal-stage.is-leaving { opacity: 0; }
.s80-gal-stage.is-leaving.tr-slide { transform: translateX(-8%); }
.s80-gal-stage.is-leaving.tr-zoom { transform: scale(.96); }
.s80-gal-stage.is-leaving.tr-blur { filter: blur(7px); transform: scale(1.02); }
.s80-gal-stage.is-leaving.tr-rise { transform: translateY(-6%); }
.s80-gal-stage.is-leaving.tr-flip { transform: perspective(900px) rotateY(-7deg); }
.s80-gal-stage.is-entering { opacity: 0; transition: none; }
.s80-gal-stage.is-entering.tr-slide { transform: translateX(8%); }
.s80-gal-stage.is-entering.tr-zoom { transform: scale(1.04); }
.s80-gal-stage.is-entering.tr-blur { filter: blur(6px); transform: scale(.98); }
.s80-gal-stage.is-entering.tr-rise { transform: translateY(6%); }
.s80-gal-stage.is-entering.tr-flip { transform: perspective(900px) rotateY(7deg); }
/* galeri kosong */
.s80-gal.is-empty { border: 1.5px dashed rgba(120, 80, 100, .35); border-radius: 12px; background: rgba(255,255,255,.45); display: flex; align-items: center; justify-content: center; }
.s80-gal-emptybox { display: flex; flex-direction: column; align-items: center; gap: 4px; color: #8a7a82; text-align: center; padding: 10px; }
.s80-gal-emptybox svg { width: 34px; height: 34px; }
.s80-gal-emptybox b { font-size: 14px; color: #6b5560; } .s80-gal-emptybox small { font-size: 11px; }
.s80-page.is-live .s80-gal.is-empty { visibility: hidden; }
.s80-page:not(.is-live) .s80-gal button { pointer-events: none; }
/* layar penuh */
.s80-lb { position: fixed; inset: 0; z-index: 2000; background: rgba(24, 16, 22, .93); display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity .25s ease; touch-action: pan-y; }
.s80-lb.is-open { opacity: 1; } .s80-lb.is-closing { opacity: 0; }
.s80-lb-img { position: relative; width: min(92vw, 1100px); height: 84vh; }
.s80-lb-img img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; transition: opacity .5s ease, transform .5s ease; border-radius: 4px; }
.s80-lb-img img.is-in, .s80-lb-img img.is-out { opacity: 0; }
.s80-lb.tr-slide .s80-lb-img img.is-in.dir-l, .s80-lb.tr-slide .s80-lb-img img.is-out.dir-r { transform: translateX(6%); }
.s80-lb.tr-slide .s80-lb-img img.is-in.dir-r, .s80-lb.tr-slide .s80-lb-img img.is-out.dir-l { transform: translateX(-6%); }
.s80-lb.tr-zoom .s80-lb-img img.is-in { transform: scale(1.05); }
.s80-lb.tr-zoom .s80-lb-img img.is-out { transform: scale(.97); }
.s80-lb-nav, .s80-lb-x { position: absolute; border: 0; background: rgba(255,255,255,.12); color: #fff; border-radius: 50%; width: 46px; height: 46px; font-size: 30px; line-height: 1; cursor: pointer; display: flex; align-items: center; justify-content: center; padding: 0 0 3px; transition: background .2s; }
.s80-lb-nav:hover, .s80-lb-x:hover { background: rgba(255,255,255,.24); }
.s80-lb-nav.is-prev { left: 16px; top: 50%; transform: translateY(-50%); } .s80-lb-nav.is-next { right: 16px; top: 50%; transform: translateY(-50%); }
.s80-lb-x { top: 16px; right: 16px; font-size: 28px; }
.s80-lb-count { position: absolute; bottom: 18px; left: 50%; transform: translateX(-50%); color: rgba(255,255,255,.85); font-size: 13px; letter-spacing: .12em; font-family: Poppins, sans-serif; }
@media (max-width: 600px) { .s80-lb-nav { width: 38px; height: 38px; } .s80-lb-nav.is-prev { left: 6px; } .s80-lb-nav.is-next { right: 6px; } .s80-lb-img { width: 100vw; height: 78vh; } }

/* ================= UPDATE KE-88: Tombol "Buka Undangan" (8 model) ================= */
.s80-el-openbtn .s80-el-inner { height: 100%; }
.s80-ob { all: unset; box-sizing: border-box; position: relative; width: 100%; height: 100%; display: inline-flex; align-items: center; justify-content: center; gap: .55em; cursor: pointer; white-space: nowrap; line-height: 1; font-weight: 500; letter-spacing: .03em; transition: transform .25s ease, box-shadow .25s ease, filter .25s ease; -webkit-tap-highlight-color: transparent; }
.s80-ob .s80-ob-ic { width: 1.35em; height: 1.35em; flex: none; }
.s80-ob .s80-ob-ar { width: 1.4em; height: 1.4em; flex: none; transition: transform .3s ease; }
.s80-page.is-live .s80-ob:hover { transform: translateY(-2px); }
.s80-page:not(.is-live) .s80-ob { pointer-events: none; }
.s80-ob-pill, .s80-ob-pulse { border-radius: 999px; background: var(--obc); color: #fff; box-shadow: 0 8px 22px -6px var(--obc); }
.s80-ob-outline { border-radius: 999px; border: 1.5px solid var(--obc); color: var(--obc); text-transform: uppercase; letter-spacing: .2em; font-size: .86em; background: rgba(255,255,255,.35); }
.s80-ob-envelope { border-radius: 14px; background: #fff; color: var(--obd); box-shadow: 0 10px 26px -8px rgba(60,30,45,.35), inset 0 0 0 1px var(--obl); }
.s80-ob-envelope .s80-ob-ic { color: #fff; background: var(--obc); border-radius: 8px; padding: .28em; width: 1.9em; height: 1.9em; }
.s80-ob-gold { border-radius: 999px; color: #4a3514; background: linear-gradient(115deg, #b8893b 0%, #f6e3a4 38%, #d7ae5b 55%, #fbeec3 72%, #b8893b 100%); background-size: 220% 100%; box-shadow: 0 8px 22px -8px rgba(120,86,20,.7), inset 0 0 0 1px rgba(255,255,255,.5); font-weight: 600; }
.s80-page.is-live .s80-ob-gold { animation: s80ObShine 3.2s ease-in-out infinite; }
@keyframes s80ObShine { 0%, 100% { background-position: 100% 0; } 50% { background-position: 0 0; } }
.s80-ob-seal { border-radius: 50%; color: #fff; background: radial-gradient(circle at 35% 30%, var(--obc) 0%, var(--obd) 70%, var(--obd) 100%); box-shadow: 0 10px 24px -6px rgba(60,20,30,.55), inset 0 -4px 10px rgba(0,0,0,.25), inset 0 3px 8px rgba(255,255,255,.25); }
.s80-ob-seal::before { content: ""; position: absolute; inset: 9%; border-radius: 50%; border: 1.5px dashed rgba(255,255,255,.55); }
.s80-ob-sealin { all: unset; display: flex; flex-direction: column; align-items: center; gap: .35em; text-align: center; white-space: normal; line-height: 1.15; max-width: 72%; }
.s80-ob-seal .s80-ob-ic { width: 2.2em; height: 2.2em; }
.s80-ob-glass { border-radius: 999px; color: var(--obd); background: rgba(255,255,255,.42); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); box-shadow: 0 8px 26px -10px rgba(40,20,30,.4), inset 0 0 0 1.5px rgba(255,255,255,.75); }
.s80-ob-minimal { color: var(--obc); letter-spacing: .14em; text-transform: uppercase; font-size: .9em; }
.s80-ob-minimal span { padding-bottom: .3em; border-bottom: 1px solid var(--obc); }
.s80-page.is-live .s80-ob-minimal:hover .s80-ob-ar { transform: translateX(4px); }
.s80-ob-pulse::after { content: ""; position: absolute; inset: 0; border-radius: inherit; box-shadow: 0 0 0 0 var(--obc); animation: s80ObPulse 2s ease-out infinite; }
@keyframes s80ObPulse { 0% { box-shadow: 0 0 0 0 var(--obc); opacity: .55; } 100% { box-shadow: 0 0 0 16px var(--obc); opacity: 0; } }
/* tamu mencoba menggulir sebelum menekan tombol: tombol bergoyang pelan sebagai petunjuk */
.s80-ob.is-nudge { animation: s80ObNudge .8s ease; }
@keyframes s80ObNudge { 0%, 100% { transform: none; } 20% { transform: scale(1.07); } 40% { transform: scale(.97); } 60% { transform: scale(1.04); } }
.s80-el.is-opened .s80-ob { transform: scale(.96); filter: brightness(.95); }
.s80-gate-locked { overflow: hidden !important; }
.s80-page.is-live [data-s80-open-next] { cursor: pointer; }
.s80-page.is-live [data-s80-open-next]:focus-visible { outline: 2px solid var(--accent, #f70487); outline-offset: 4px; }
.s80-page.is-live [data-s80-open-next].is-nudge { filter: brightness(1.2); }

/* UPDATE KE-89: kolase - foto utama bergantian */
.s80-gal-cell img.s80-gal-fadein { position: absolute; inset: 0; opacity: 0; transition: opacity var(--gtd, .8s) ease, transform var(--gtd, .8s) ease, filter var(--gtd, .8s) ease; }
.s80-gal-cell img.s80-gal-fadein.tr-slide { transform: translateX(8%); }
.s80-gal-cell img.s80-gal-fadein.tr-zoom { transform: scale(1.08); }
.s80-gal-cell img.s80-gal-fadein.tr-blur { filter: blur(8px); transform: scale(1.04); }
.s80-gal-cell img.s80-gal-fadein.tr-rise { transform: translateY(10%); }
.s80-gal-cell img.s80-gal-fadein.tr-flip { transform: perspective(700px) rotateY(12deg); }
.s80-gal-cell img.s80-gal-fadein.is-show { opacity: 1; transform: none; }
.s80-gal-cell img.s80-gal-fadein.tr-blur.is-show { filter: none; }

/* ================= UPDATE KE-90: Terbang Zigzag (burung naik-turun berkelok tajam) ================= */
@keyframes s80ZigR {
  0% { transform: translate3d(calc(var(--fx0, -460px) * 1 + var(--fx1, 460px) * 0), calc(var(--aloop, 40px) * 0), 0) rotate(-10deg) scaleX(var(--fflip, 1)); }
  1.562% { transform: translate3d(calc(var(--fx0, -460px) * 0.9816 + var(--fx1, 460px) * 0.0184), calc(var(--aloop, 40px) * -0.3579), 0) rotate(-8.9516deg) scaleX(var(--fflip, 1)); }
  3.125% { transform: translate3d(calc(var(--fx0, -460px) * 0.9632 + var(--fx1, 460px) * 0.0368), calc(var(--aloop, 40px) * -0.7002), 0) rotate(-6.0263deg) scaleX(var(--fflip, 1)); }
  4.688% { transform: translate3d(calc(var(--fx0, -460px) * 0.9449 + var(--fx1, 460px) * 0.0551), calc(var(--aloop, 40px) * -0.9657), 0) rotate(-1.8375deg) scaleX(var(--fflip, 1)); }
  6.25% { transform: translate3d(calc(var(--fx0, -460px) * 0.9265 + var(--fx1, 460px) * 0.0735), calc(var(--aloop, 40px) * -0.9271), 0) rotate(2.7366deg) scaleX(var(--fflip, 1)); }
  7.812% { transform: translate3d(calc(var(--fx0, -460px) * 0.9081 + var(--fx1, 460px) * 0.0919), calc(var(--aloop, 40px) * -0.6344), 0) rotate(6.737deg) scaleX(var(--fflip, 1)); }
  9.375% { transform: translate3d(calc(var(--fx0, -460px) * 0.8897 + var(--fx1, 460px) * 0.1103), calc(var(--aloop, 40px) * -0.2869), 0) rotate(9.3247deg) scaleX(var(--fflip, 1)); }
  10.94% { transform: translate3d(calc(var(--fx0, -460px) * 0.8713 + var(--fx1, 460px) * 0.1287), calc(var(--aloop, 40px) * 0.0719), 0) rotate(9.9573deg) scaleX(var(--fflip, 1)); }
  12.5% { transform: translate3d(calc(var(--fx0, -460px) * 0.8529 + var(--fx1, 460px) * 0.1471), calc(var(--aloop, 40px) * 0.4283), 0) rotate(8.5022deg) scaleX(var(--fflip, 1)); }
  14.06% { transform: translate3d(calc(var(--fx0, -460px) * 0.8346 + var(--fx1, 460px) * 0.1654), calc(var(--aloop, 40px) * 0.7635), 0) rotate(5.2643deg) scaleX(var(--fflip, 1)); }
  15.62% { transform: translate3d(calc(var(--fx0, -460px) * 0.8162 + var(--fx1, 460px) * 0.1838), calc(var(--aloop, 40px) * 0.9911), 0) rotate(0.9227deg) scaleX(var(--fflip, 1)); }
  17.19% { transform: translate3d(calc(var(--fx0, -460px) * 0.7978 + var(--fx1, 460px) * 0.2022), calc(var(--aloop, 40px) * 0.8787), 0) rotate(-3.6124deg) scaleX(var(--fflip, 1)); }
  18.75% { transform: translate3d(calc(var(--fx0, -460px) * 0.7794 + var(--fx1, 460px) * 0.2206), calc(var(--aloop, 40px) * 0.5669), 0) rotate(-7.3901deg) scaleX(var(--fflip, 1)); }
  20.31% { transform: translate3d(calc(var(--fx0, -460px) * 0.761 + var(--fx1, 460px) * 0.239), calc(var(--aloop, 40px) * 0.2155), 0) rotate(-9.6183deg) scaleX(var(--fflip, 1)); }
  21.88% { transform: translate3d(calc(var(--fx0, -460px) * 0.7426 + var(--fx1, 460px) * 0.2574), calc(var(--aloop, 40px) * -0.1438), 0) rotate(-9.8297deg) scaleX(var(--fflip, 1)); }
  23.44% { transform: translate3d(calc(var(--fx0, -460px) * 0.7243 + var(--fx1, 460px) * 0.2757), calc(var(--aloop, 40px) * -0.4981), 0) rotate(-7.9802deg) scaleX(var(--fflip, 1)); }
  25% { transform: translate3d(calc(var(--fx0, -460px) * 0.7059 + var(--fx1, 460px) * 0.2941), calc(var(--aloop, 40px) * -0.8235), 0) rotate(-4.4574deg) scaleX(var(--fflip, 1)); }
  26.56% { transform: translate3d(calc(var(--fx0, -460px) * 0.6875 + var(--fx1, 460px) * 0.3125), calc(var(--aloop, 40px) * -1), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  28.12% { transform: translate3d(calc(var(--fx0, -460px) * 0.6691 + var(--fx1, 460px) * 0.3309), calc(var(--aloop, 40px) * -0.8235), 0) rotate(4.4574deg) scaleX(var(--fflip, 1)); }
  29.69% { transform: translate3d(calc(var(--fx0, -460px) * 0.6507 + var(--fx1, 460px) * 0.3493), calc(var(--aloop, 40px) * -0.4981), 0) rotate(7.9802deg) scaleX(var(--fflip, 1)); }
  31.25% { transform: translate3d(calc(var(--fx0, -460px) * 0.6324 + var(--fx1, 460px) * 0.3676), calc(var(--aloop, 40px) * -0.1438), 0) rotate(9.8297deg) scaleX(var(--fflip, 1)); }
  32.81% { transform: translate3d(calc(var(--fx0, -460px) * 0.614 + var(--fx1, 460px) * 0.386), calc(var(--aloop, 40px) * 0.2155), 0) rotate(9.6183deg) scaleX(var(--fflip, 1)); }
  34.38% { transform: translate3d(calc(var(--fx0, -460px) * 0.5956 + var(--fx1, 460px) * 0.4044), calc(var(--aloop, 40px) * 0.5669), 0) rotate(7.3901deg) scaleX(var(--fflip, 1)); }
  35.94% { transform: translate3d(calc(var(--fx0, -460px) * 0.5772 + var(--fx1, 460px) * 0.4228), calc(var(--aloop, 40px) * 0.8787), 0) rotate(3.6124deg) scaleX(var(--fflip, 1)); }
  37.5% { transform: translate3d(calc(var(--fx0, -460px) * 0.5588 + var(--fx1, 460px) * 0.4412), calc(var(--aloop, 40px) * 0.9911), 0) rotate(-0.9227deg) scaleX(var(--fflip, 1)); }
  39.06% { transform: translate3d(calc(var(--fx0, -460px) * 0.5404 + var(--fx1, 460px) * 0.4596), calc(var(--aloop, 40px) * 0.7635), 0) rotate(-5.2643deg) scaleX(var(--fflip, 1)); }
  40.62% { transform: translate3d(calc(var(--fx0, -460px) * 0.5221 + var(--fx1, 460px) * 0.4779), calc(var(--aloop, 40px) * 0.4283), 0) rotate(-8.5022deg) scaleX(var(--fflip, 1)); }
  42.19% { transform: translate3d(calc(var(--fx0, -460px) * 0.5037 + var(--fx1, 460px) * 0.4963), calc(var(--aloop, 40px) * 0.0719), 0) rotate(-9.9573deg) scaleX(var(--fflip, 1)); }
  43.75% { transform: translate3d(calc(var(--fx0, -460px) * 0.4853 + var(--fx1, 460px) * 0.5147), calc(var(--aloop, 40px) * -0.2869), 0) rotate(-9.3247deg) scaleX(var(--fflip, 1)); }
  45.31% { transform: translate3d(calc(var(--fx0, -460px) * 0.4669 + var(--fx1, 460px) * 0.5331), calc(var(--aloop, 40px) * -0.6344), 0) rotate(-6.737deg) scaleX(var(--fflip, 1)); }
  46.88% { transform: translate3d(calc(var(--fx0, -460px) * 0.4485 + var(--fx1, 460px) * 0.5515), calc(var(--aloop, 40px) * -0.9271), 0) rotate(-2.7366deg) scaleX(var(--fflip, 1)); }
  48.44% { transform: translate3d(calc(var(--fx0, -460px) * 0.4301 + var(--fx1, 460px) * 0.5699), calc(var(--aloop, 40px) * -0.9657), 0) rotate(1.8375deg) scaleX(var(--fflip, 1)); }
  50% { transform: translate3d(calc(var(--fx0, -460px) * 0.4118 + var(--fx1, 460px) * 0.5882), calc(var(--aloop, 40px) * -0.7002), 0) rotate(6.0263deg) scaleX(var(--fflip, 1)); }
  51.56% { transform: translate3d(calc(var(--fx0, -460px) * 0.3934 + var(--fx1, 460px) * 0.6066), calc(var(--aloop, 40px) * -0.3579), 0) rotate(8.9516deg) scaleX(var(--fflip, 1)); }
  53.12% { transform: translate3d(calc(var(--fx0, -460px) * 0.375 + var(--fx1, 460px) * 0.625), calc(var(--aloop, 40px) * 0), 0) rotate(10deg) scaleX(var(--fflip, 1)); }
  54.69% { transform: translate3d(calc(var(--fx0, -460px) * 0.3566 + var(--fx1, 460px) * 0.6434), calc(var(--aloop, 40px) * 0.3579), 0) rotate(8.9516deg) scaleX(var(--fflip, 1)); }
  56.25% { transform: translate3d(calc(var(--fx0, -460px) * 0.3382 + var(--fx1, 460px) * 0.6618), calc(var(--aloop, 40px) * 0.7002), 0) rotate(6.0263deg) scaleX(var(--fflip, 1)); }
  57.81% { transform: translate3d(calc(var(--fx0, -460px) * 0.3199 + var(--fx1, 460px) * 0.6801), calc(var(--aloop, 40px) * 0.9657), 0) rotate(1.8375deg) scaleX(var(--fflip, 1)); }
  59.38% { transform: translate3d(calc(var(--fx0, -460px) * 0.3015 + var(--fx1, 460px) * 0.6985), calc(var(--aloop, 40px) * 0.9271), 0) rotate(-2.7366deg) scaleX(var(--fflip, 1)); }
  60.94% { transform: translate3d(calc(var(--fx0, -460px) * 0.2831 + var(--fx1, 460px) * 0.7169), calc(var(--aloop, 40px) * 0.6344), 0) rotate(-6.737deg) scaleX(var(--fflip, 1)); }
  62.5% { transform: translate3d(calc(var(--fx0, -460px) * 0.2647 + var(--fx1, 460px) * 0.7353), calc(var(--aloop, 40px) * 0.2869), 0) rotate(-9.3247deg) scaleX(var(--fflip, 1)); }
  64.06% { transform: translate3d(calc(var(--fx0, -460px) * 0.2463 + var(--fx1, 460px) * 0.7537), calc(var(--aloop, 40px) * -0.0719), 0) rotate(-9.9573deg) scaleX(var(--fflip, 1)); }
  65.62% { transform: translate3d(calc(var(--fx0, -460px) * 0.2279 + var(--fx1, 460px) * 0.7721), calc(var(--aloop, 40px) * -0.4283), 0) rotate(-8.5022deg) scaleX(var(--fflip, 1)); }
  67.19% { transform: translate3d(calc(var(--fx0, -460px) * 0.2096 + var(--fx1, 460px) * 0.7904), calc(var(--aloop, 40px) * -0.7635), 0) rotate(-5.2643deg) scaleX(var(--fflip, 1)); }
  68.75% { transform: translate3d(calc(var(--fx0, -460px) * 0.1912 + var(--fx1, 460px) * 0.8088), calc(var(--aloop, 40px) * -0.9911), 0) rotate(-0.9227deg) scaleX(var(--fflip, 1)); }
  70.31% { transform: translate3d(calc(var(--fx0, -460px) * 0.1728 + var(--fx1, 460px) * 0.8272), calc(var(--aloop, 40px) * -0.8787), 0) rotate(3.6124deg) scaleX(var(--fflip, 1)); }
  71.88% { transform: translate3d(calc(var(--fx0, -460px) * 0.1544 + var(--fx1, 460px) * 0.8456), calc(var(--aloop, 40px) * -0.5669), 0) rotate(7.3901deg) scaleX(var(--fflip, 1)); }
  73.44% { transform: translate3d(calc(var(--fx0, -460px) * 0.136 + var(--fx1, 460px) * 0.864), calc(var(--aloop, 40px) * -0.2155), 0) rotate(9.6183deg) scaleX(var(--fflip, 1)); }
  75% { transform: translate3d(calc(var(--fx0, -460px) * 0.1176 + var(--fx1, 460px) * 0.8824), calc(var(--aloop, 40px) * 0.1438), 0) rotate(9.8297deg) scaleX(var(--fflip, 1)); }
  76.56% { transform: translate3d(calc(var(--fx0, -460px) * 0.0993 + var(--fx1, 460px) * 0.9007), calc(var(--aloop, 40px) * 0.4981), 0) rotate(7.9802deg) scaleX(var(--fflip, 1)); }
  78.12% { transform: translate3d(calc(var(--fx0, -460px) * 0.0809 + var(--fx1, 460px) * 0.9191), calc(var(--aloop, 40px) * 0.8235), 0) rotate(4.4574deg) scaleX(var(--fflip, 1)); }
  79.69% { transform: translate3d(calc(var(--fx0, -460px) * 0.0625 + var(--fx1, 460px) * 0.9375), calc(var(--aloop, 40px) * 1), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  81.25% { transform: translate3d(calc(var(--fx0, -460px) * 0.0441 + var(--fx1, 460px) * 0.9559), calc(var(--aloop, 40px) * 0.8235), 0) rotate(-4.4574deg) scaleX(var(--fflip, 1)); }
  82.81% { transform: translate3d(calc(var(--fx0, -460px) * 0.0257 + var(--fx1, 460px) * 0.9743), calc(var(--aloop, 40px) * 0.4981), 0) rotate(-7.9802deg) scaleX(var(--fflip, 1)); }
  84.38% { transform: translate3d(calc(var(--fx0, -460px) * 0.0074 + var(--fx1, 460px) * 0.9926), calc(var(--aloop, 40px) * 0.1438), 0) rotate(-9.8297deg) scaleX(var(--fflip, 1)); }
  85.94% { transform: translate3d(calc(var(--fx0, -460px) * 0 + var(--fx1, 460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  87.5% { transform: translate3d(calc(var(--fx0, -460px) * 0 + var(--fx1, 460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  89.06% { transform: translate3d(calc(var(--fx0, -460px) * 0 + var(--fx1, 460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  90.62% { transform: translate3d(calc(var(--fx0, -460px) * 0 + var(--fx1, 460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  92.19% { transform: translate3d(calc(var(--fx0, -460px) * 0 + var(--fx1, 460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  93.75% { transform: translate3d(calc(var(--fx0, -460px) * 0 + var(--fx1, 460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  95.31% { transform: translate3d(calc(var(--fx0, -460px) * 0 + var(--fx1, 460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  96.88% { transform: translate3d(calc(var(--fx0, -460px) * 0 + var(--fx1, 460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  98.44% { transform: translate3d(calc(var(--fx0, -460px) * 0 + var(--fx1, 460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  100% { transform: translate3d(calc(var(--fx0, -460px) * 0 + var(--fx1, 460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
}
@keyframes s80ZigL {
  0% { transform: translate3d(calc(var(--fx1, 460px) * 1 + var(--fx0, -460px) * 0), calc(var(--aloop, 40px) * 0), 0) rotate(10deg) scaleX(var(--fflip, 1)); }
  1.562% { transform: translate3d(calc(var(--fx1, 460px) * 0.9816 + var(--fx0, -460px) * 0.0184), calc(var(--aloop, 40px) * -0.3579), 0) rotate(8.9516deg) scaleX(var(--fflip, 1)); }
  3.125% { transform: translate3d(calc(var(--fx1, 460px) * 0.9632 + var(--fx0, -460px) * 0.0368), calc(var(--aloop, 40px) * -0.7002), 0) rotate(6.0263deg) scaleX(var(--fflip, 1)); }
  4.688% { transform: translate3d(calc(var(--fx1, 460px) * 0.9449 + var(--fx0, -460px) * 0.0551), calc(var(--aloop, 40px) * -0.9657), 0) rotate(1.8375deg) scaleX(var(--fflip, 1)); }
  6.25% { transform: translate3d(calc(var(--fx1, 460px) * 0.9265 + var(--fx0, -460px) * 0.0735), calc(var(--aloop, 40px) * -0.9271), 0) rotate(-2.7366deg) scaleX(var(--fflip, 1)); }
  7.812% { transform: translate3d(calc(var(--fx1, 460px) * 0.9081 + var(--fx0, -460px) * 0.0919), calc(var(--aloop, 40px) * -0.6344), 0) rotate(-6.737deg) scaleX(var(--fflip, 1)); }
  9.375% { transform: translate3d(calc(var(--fx1, 460px) * 0.8897 + var(--fx0, -460px) * 0.1103), calc(var(--aloop, 40px) * -0.2869), 0) rotate(-9.3247deg) scaleX(var(--fflip, 1)); }
  10.94% { transform: translate3d(calc(var(--fx1, 460px) * 0.8713 + var(--fx0, -460px) * 0.1287), calc(var(--aloop, 40px) * 0.0719), 0) rotate(-9.9573deg) scaleX(var(--fflip, 1)); }
  12.5% { transform: translate3d(calc(var(--fx1, 460px) * 0.8529 + var(--fx0, -460px) * 0.1471), calc(var(--aloop, 40px) * 0.4283), 0) rotate(-8.5022deg) scaleX(var(--fflip, 1)); }
  14.06% { transform: translate3d(calc(var(--fx1, 460px) * 0.8346 + var(--fx0, -460px) * 0.1654), calc(var(--aloop, 40px) * 0.7635), 0) rotate(-5.2643deg) scaleX(var(--fflip, 1)); }
  15.62% { transform: translate3d(calc(var(--fx1, 460px) * 0.8162 + var(--fx0, -460px) * 0.1838), calc(var(--aloop, 40px) * 0.9911), 0) rotate(-0.9227deg) scaleX(var(--fflip, 1)); }
  17.19% { transform: translate3d(calc(var(--fx1, 460px) * 0.7978 + var(--fx0, -460px) * 0.2022), calc(var(--aloop, 40px) * 0.8787), 0) rotate(3.6124deg) scaleX(var(--fflip, 1)); }
  18.75% { transform: translate3d(calc(var(--fx1, 460px) * 0.7794 + var(--fx0, -460px) * 0.2206), calc(var(--aloop, 40px) * 0.5669), 0) rotate(7.3901deg) scaleX(var(--fflip, 1)); }
  20.31% { transform: translate3d(calc(var(--fx1, 460px) * 0.761 + var(--fx0, -460px) * 0.239), calc(var(--aloop, 40px) * 0.2155), 0) rotate(9.6183deg) scaleX(var(--fflip, 1)); }
  21.88% { transform: translate3d(calc(var(--fx1, 460px) * 0.7426 + var(--fx0, -460px) * 0.2574), calc(var(--aloop, 40px) * -0.1438), 0) rotate(9.8297deg) scaleX(var(--fflip, 1)); }
  23.44% { transform: translate3d(calc(var(--fx1, 460px) * 0.7243 + var(--fx0, -460px) * 0.2757), calc(var(--aloop, 40px) * -0.4981), 0) rotate(7.9802deg) scaleX(var(--fflip, 1)); }
  25% { transform: translate3d(calc(var(--fx1, 460px) * 0.7059 + var(--fx0, -460px) * 0.2941), calc(var(--aloop, 40px) * -0.8235), 0) rotate(4.4574deg) scaleX(var(--fflip, 1)); }
  26.56% { transform: translate3d(calc(var(--fx1, 460px) * 0.6875 + var(--fx0, -460px) * 0.3125), calc(var(--aloop, 40px) * -1), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  28.12% { transform: translate3d(calc(var(--fx1, 460px) * 0.6691 + var(--fx0, -460px) * 0.3309), calc(var(--aloop, 40px) * -0.8235), 0) rotate(-4.4574deg) scaleX(var(--fflip, 1)); }
  29.69% { transform: translate3d(calc(var(--fx1, 460px) * 0.6507 + var(--fx0, -460px) * 0.3493), calc(var(--aloop, 40px) * -0.4981), 0) rotate(-7.9802deg) scaleX(var(--fflip, 1)); }
  31.25% { transform: translate3d(calc(var(--fx1, 460px) * 0.6324 + var(--fx0, -460px) * 0.3676), calc(var(--aloop, 40px) * -0.1438), 0) rotate(-9.8297deg) scaleX(var(--fflip, 1)); }
  32.81% { transform: translate3d(calc(var(--fx1, 460px) * 0.614 + var(--fx0, -460px) * 0.386), calc(var(--aloop, 40px) * 0.2155), 0) rotate(-9.6183deg) scaleX(var(--fflip, 1)); }
  34.38% { transform: translate3d(calc(var(--fx1, 460px) * 0.5956 + var(--fx0, -460px) * 0.4044), calc(var(--aloop, 40px) * 0.5669), 0) rotate(-7.3901deg) scaleX(var(--fflip, 1)); }
  35.94% { transform: translate3d(calc(var(--fx1, 460px) * 0.5772 + var(--fx0, -460px) * 0.4228), calc(var(--aloop, 40px) * 0.8787), 0) rotate(-3.6124deg) scaleX(var(--fflip, 1)); }
  37.5% { transform: translate3d(calc(var(--fx1, 460px) * 0.5588 + var(--fx0, -460px) * 0.4412), calc(var(--aloop, 40px) * 0.9911), 0) rotate(0.9227deg) scaleX(var(--fflip, 1)); }
  39.06% { transform: translate3d(calc(var(--fx1, 460px) * 0.5404 + var(--fx0, -460px) * 0.4596), calc(var(--aloop, 40px) * 0.7635), 0) rotate(5.2643deg) scaleX(var(--fflip, 1)); }
  40.62% { transform: translate3d(calc(var(--fx1, 460px) * 0.5221 + var(--fx0, -460px) * 0.4779), calc(var(--aloop, 40px) * 0.4283), 0) rotate(8.5022deg) scaleX(var(--fflip, 1)); }
  42.19% { transform: translate3d(calc(var(--fx1, 460px) * 0.5037 + var(--fx0, -460px) * 0.4963), calc(var(--aloop, 40px) * 0.0719), 0) rotate(9.9573deg) scaleX(var(--fflip, 1)); }
  43.75% { transform: translate3d(calc(var(--fx1, 460px) * 0.4853 + var(--fx0, -460px) * 0.5147), calc(var(--aloop, 40px) * -0.2869), 0) rotate(9.3247deg) scaleX(var(--fflip, 1)); }
  45.31% { transform: translate3d(calc(var(--fx1, 460px) * 0.4669 + var(--fx0, -460px) * 0.5331), calc(var(--aloop, 40px) * -0.6344), 0) rotate(6.737deg) scaleX(var(--fflip, 1)); }
  46.88% { transform: translate3d(calc(var(--fx1, 460px) * 0.4485 + var(--fx0, -460px) * 0.5515), calc(var(--aloop, 40px) * -0.9271), 0) rotate(2.7366deg) scaleX(var(--fflip, 1)); }
  48.44% { transform: translate3d(calc(var(--fx1, 460px) * 0.4301 + var(--fx0, -460px) * 0.5699), calc(var(--aloop, 40px) * -0.9657), 0) rotate(-1.8375deg) scaleX(var(--fflip, 1)); }
  50% { transform: translate3d(calc(var(--fx1, 460px) * 0.4118 + var(--fx0, -460px) * 0.5882), calc(var(--aloop, 40px) * -0.7002), 0) rotate(-6.0263deg) scaleX(var(--fflip, 1)); }
  51.56% { transform: translate3d(calc(var(--fx1, 460px) * 0.3934 + var(--fx0, -460px) * 0.6066), calc(var(--aloop, 40px) * -0.3579), 0) rotate(-8.9516deg) scaleX(var(--fflip, 1)); }
  53.12% { transform: translate3d(calc(var(--fx1, 460px) * 0.375 + var(--fx0, -460px) * 0.625), calc(var(--aloop, 40px) * 0), 0) rotate(-10deg) scaleX(var(--fflip, 1)); }
  54.69% { transform: translate3d(calc(var(--fx1, 460px) * 0.3566 + var(--fx0, -460px) * 0.6434), calc(var(--aloop, 40px) * 0.3579), 0) rotate(-8.9516deg) scaleX(var(--fflip, 1)); }
  56.25% { transform: translate3d(calc(var(--fx1, 460px) * 0.3382 + var(--fx0, -460px) * 0.6618), calc(var(--aloop, 40px) * 0.7002), 0) rotate(-6.0263deg) scaleX(var(--fflip, 1)); }
  57.81% { transform: translate3d(calc(var(--fx1, 460px) * 0.3199 + var(--fx0, -460px) * 0.6801), calc(var(--aloop, 40px) * 0.9657), 0) rotate(-1.8375deg) scaleX(var(--fflip, 1)); }
  59.38% { transform: translate3d(calc(var(--fx1, 460px) * 0.3015 + var(--fx0, -460px) * 0.6985), calc(var(--aloop, 40px) * 0.9271), 0) rotate(2.7366deg) scaleX(var(--fflip, 1)); }
  60.94% { transform: translate3d(calc(var(--fx1, 460px) * 0.2831 + var(--fx0, -460px) * 0.7169), calc(var(--aloop, 40px) * 0.6344), 0) rotate(6.737deg) scaleX(var(--fflip, 1)); }
  62.5% { transform: translate3d(calc(var(--fx1, 460px) * 0.2647 + var(--fx0, -460px) * 0.7353), calc(var(--aloop, 40px) * 0.2869), 0) rotate(9.3247deg) scaleX(var(--fflip, 1)); }
  64.06% { transform: translate3d(calc(var(--fx1, 460px) * 0.2463 + var(--fx0, -460px) * 0.7537), calc(var(--aloop, 40px) * -0.0719), 0) rotate(9.9573deg) scaleX(var(--fflip, 1)); }
  65.62% { transform: translate3d(calc(var(--fx1, 460px) * 0.2279 + var(--fx0, -460px) * 0.7721), calc(var(--aloop, 40px) * -0.4283), 0) rotate(8.5022deg) scaleX(var(--fflip, 1)); }
  67.19% { transform: translate3d(calc(var(--fx1, 460px) * 0.2096 + var(--fx0, -460px) * 0.7904), calc(var(--aloop, 40px) * -0.7635), 0) rotate(5.2643deg) scaleX(var(--fflip, 1)); }
  68.75% { transform: translate3d(calc(var(--fx1, 460px) * 0.1912 + var(--fx0, -460px) * 0.8088), calc(var(--aloop, 40px) * -0.9911), 0) rotate(0.9227deg) scaleX(var(--fflip, 1)); }
  70.31% { transform: translate3d(calc(var(--fx1, 460px) * 0.1728 + var(--fx0, -460px) * 0.8272), calc(var(--aloop, 40px) * -0.8787), 0) rotate(-3.6124deg) scaleX(var(--fflip, 1)); }
  71.88% { transform: translate3d(calc(var(--fx1, 460px) * 0.1544 + var(--fx0, -460px) * 0.8456), calc(var(--aloop, 40px) * -0.5669), 0) rotate(-7.3901deg) scaleX(var(--fflip, 1)); }
  73.44% { transform: translate3d(calc(var(--fx1, 460px) * 0.136 + var(--fx0, -460px) * 0.864), calc(var(--aloop, 40px) * -0.2155), 0) rotate(-9.6183deg) scaleX(var(--fflip, 1)); }
  75% { transform: translate3d(calc(var(--fx1, 460px) * 0.1176 + var(--fx0, -460px) * 0.8824), calc(var(--aloop, 40px) * 0.1438), 0) rotate(-9.8297deg) scaleX(var(--fflip, 1)); }
  76.56% { transform: translate3d(calc(var(--fx1, 460px) * 0.0993 + var(--fx0, -460px) * 0.9007), calc(var(--aloop, 40px) * 0.4981), 0) rotate(-7.9802deg) scaleX(var(--fflip, 1)); }
  78.12% { transform: translate3d(calc(var(--fx1, 460px) * 0.0809 + var(--fx0, -460px) * 0.9191), calc(var(--aloop, 40px) * 0.8235), 0) rotate(-4.4574deg) scaleX(var(--fflip, 1)); }
  79.69% { transform: translate3d(calc(var(--fx1, 460px) * 0.0625 + var(--fx0, -460px) * 0.9375), calc(var(--aloop, 40px) * 1), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  81.25% { transform: translate3d(calc(var(--fx1, 460px) * 0.0441 + var(--fx0, -460px) * 0.9559), calc(var(--aloop, 40px) * 0.8235), 0) rotate(4.4574deg) scaleX(var(--fflip, 1)); }
  82.81% { transform: translate3d(calc(var(--fx1, 460px) * 0.0257 + var(--fx0, -460px) * 0.9743), calc(var(--aloop, 40px) * 0.4981), 0) rotate(7.9802deg) scaleX(var(--fflip, 1)); }
  84.38% { transform: translate3d(calc(var(--fx1, 460px) * 0.0074 + var(--fx0, -460px) * 0.9926), calc(var(--aloop, 40px) * 0.1438), 0) rotate(9.8297deg) scaleX(var(--fflip, 1)); }
  85.94% { transform: translate3d(calc(var(--fx1, 460px) * 0 + var(--fx0, -460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  87.5% { transform: translate3d(calc(var(--fx1, 460px) * 0 + var(--fx0, -460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  89.06% { transform: translate3d(calc(var(--fx1, 460px) * 0 + var(--fx0, -460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  90.62% { transform: translate3d(calc(var(--fx1, 460px) * 0 + var(--fx0, -460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  92.19% { transform: translate3d(calc(var(--fx1, 460px) * 0 + var(--fx0, -460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  93.75% { transform: translate3d(calc(var(--fx1, 460px) * 0 + var(--fx0, -460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  95.31% { transform: translate3d(calc(var(--fx1, 460px) * 0 + var(--fx0, -460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  96.88% { transform: translate3d(calc(var(--fx1, 460px) * 0 + var(--fx0, -460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  98.44% { transform: translate3d(calc(var(--fx1, 460px) * 0 + var(--fx0, -460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
  100% { transform: translate3d(calc(var(--fx1, 460px) * 0 + var(--fx0, -460px) * 1), calc(var(--aloop, 40px) * 0), 0) rotate(0deg) scaleX(var(--fflip, 1)); }
}

/* UPDATE KE-90: efek per foto galeri (lapisan putih/hitam + gradasi) */
.s80-gal-ov { position: absolute; inset: 0; pointer-events: none; display: block; border-radius: inherit; transition: background .6s ease; }
.s80-gal-slide .s80-gal-ov, .s80-gal-card .s80-gal-ov { z-index: 1; }
.s80-gal-cell .s80-gal-more { z-index: 2; }

/* ---------- Elemen hitung mundur / countdown (UPDATE KE-106) ---------- */
.s80-el-countdown .s80-el-inner { width: 100%; height: 100%; }
svg.s80-cd { display: block; overflow: visible; }
svg.s80-cd text { font-variant-numeric: lining-nums; }
.s80-cd .s80-cd-n { transform-box: fill-box; transform-origin: center; }
.s80-page.is-live .s80-cd-flip .s80-cd-n.is-tick { animation: s80CdFlip .45s cubic-bezier(.3,.7,.4,1); }
@keyframes s80CdFlip { 0% { transform: scaleY(.15); opacity: .25; } 100% { transform: scaleY(1); opacity: 1; } }
.s80-page.is-live .s80-cd-beat { animation: s80CdBeat 1.3s ease-in-out infinite; }
@keyframes s80CdBeat { 0%, 100% { transform: scale(1); } 14% { transform: scale(1.05); } 28% { transform: scale(1); } 42% { transform: scale(1.035); } 60% { transform: scale(1); } }
.s80-page.is-live .s80-cd-stream { animation: s80CdStream 1s linear infinite; }
@keyframes s80CdStream { 0%, 100% { opacity: .85; } 50% { opacity: .35; } }
.s80-cd .s80-cd-arc, .s80-cd .s80-cd-sand, .s80-cd .s80-cd-bar { transition: stroke-dashoffset .6s ease, height .6s ease, y .6s ease, width .6s ease; }

/* ---------- Paper texture (UPDATE KE-111) ---------- */
.s80-el-paper .s80-el-inner { width: 100%; height: 100%; position: relative; }
.s80-paper { position: absolute; inset: 0; }
.s80-paper-sheet, .s80-paper-fringe { position: absolute; inset: 0; overflow: hidden; isolation: isolate; }
.s80-paper i { position: absolute; inset: 0; display: block; pointer-events: none; }
.s80-paper-tex { background-repeat: repeat; mix-blend-mode: hard-light; }
.s80-paper.is-ov .s80-paper-sheet { isolation: auto; }
.s80-paper.is-ov .s80-paper-tex { mix-blend-mode: normal; }
.s80-paper-burn { position: absolute; inset: 0; width: 100%; height: 100%; display: block; pointer-events: none; }

/* ---------- Bingkai foto (UPDATE KE-112) ---------- */
.s80-el-pframe .s80-el-inner { width: 100%; height: 100%; position: relative; }
.s80-pf { position: absolute; inset: 0; }
.s80-pf-under, .s80-pf-over { position: absolute; left: 0; top: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; display: block; }
.s80-pf-win { position: absolute; overflow: hidden; background: #e9e6e1; }
.s80-pf-win img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; max-width: none; display: block; }
.s80-pf-ph { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.s80-pf-cap { position: absolute; display: flex; align-items: center; justify-content: center; text-align: center; line-height: 1.1; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; padding: 0 4px; }

/* ---------- Garis tepi & efek foto (UPDATE KE-117) ---------- */
.s80-el-fxwrap { width: 100%; height: 100%; }
.s80-el-imgline { position: absolute; inset: 0; display: block; pointer-events: none; box-sizing: border-box; }

/* ---------- Galeri "Geser Berjalan" (UPDATE KE-118) ---------- */
.s80-gal-mq { position: absolute; inset: 0; overflow: hidden; }
.s80-gal-mq.is-fade { -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 17%, #000 83%, transparent 100%); mask-image: linear-gradient(90deg, transparent 0, #000 17%, #000 83%, transparent 100%); }
.s80-gal-mq-track { position: absolute; left: 0; display: flex; flex-wrap: nowrap; will-change: transform; animation: s80GalMq var(--mqd, 20s) linear infinite; }
.s80-gal-mq-track.is-right { animation-direction: reverse; }
.s80-gal-mq-item { position: relative; box-sizing: border-box; flex: none; height: 100%; overflow: hidden; border: var(--gframe-width, 2px) var(--gframe-style, solid) var(--gframe-color, #fff); border-radius: var(--grad, 10px); background: #eee; box-shadow: var(--gframe-shadow, 0 6px 18px rgba(60,30,45,.10)); cursor: zoom-in; }
.s80-gal-mq-item img { width: 100%; height: 100%; object-fit: cover; display: block; }
.s80-page.is-live .s80-gal-mq:hover .s80-gal-mq-track { animation-play-state: paused; }
@keyframes s80GalMq { from { transform: translateX(0); } to { transform: translateX(var(--mqx, -50%)); } }

/* ================= MENU FITUR (UPDATE KE-121) =================
   Peta, Waktu Acara (10), Susunan Acara (20), Kehadiran & Ucapan (4), Kartu Rekening (6), Tombol Link.
   Ukuran huruf dasar dari el.fs (style font-size di .s80-ft), semua ukuran lain pakai em. */
.s80-ft { box-sizing: border-box; width: 100%; color: var(--ft); font-family: var(--ffb); line-height: 1.45; text-align: center; }
.s80-ft *, .s80-ft *::before, .s80-ft *::after { box-sizing: border-box; }
.s80-el .s80-ft svg { display: inline-block; width: 1em; height: 1em; flex: none; vertical-align: -.14em; }
.s80-page:not(.is-live) .s80-ft * { pointer-events: none; }
.s80-el-event .s80-el-inner, .s80-el-rundown .s80-el-inner, .s80-el-rsvp .s80-el-inner, .s80-el-gift .s80-el-inner { height: auto; }
.s80-el-map .s80-el-inner, .s80-el-linkbtn .s80-el-inner { height: 100%; }
.s80-page.is-live .s80-el.has-link { cursor: pointer; }
.s80-page.is-live .s80-el.has-link:active { filter: brightness(.94); }
.s80-page:not(.is-live) .s80-el-linkbtn .s80-ob { pointer-events: none; }
.s80-ft-btn { display: inline-flex; align-items: center; justify-content: center; gap: .45em; margin-top: .9em; padding: .62em 1.3em; border-radius: 99px; background: var(--fa); color: #fff; font-size: .86em; font-weight: 600; letter-spacing: .02em; cursor: pointer; box-shadow: 0 .35em 1em -.35em var(--fa); transition: transform .2s, filter .2s; white-space: nowrap; }
.s80-ft-btn:hover { filter: brightness(1.08); transform: translateY(-1px); }
.s80-ft-btn.is-sm { margin: 0; padding: .5em .95em; font-size: .78em; }
.s80-ft-toast { position: absolute; left: 50%; bottom: 7%; transform: translateX(-50%); z-index: 99; background: rgba(20,20,26,.9); color: #fff; font: 500 13px/1.3 Poppins, sans-serif; padding: .7em 1.2em; border-radius: 99px; box-shadow: 0 8px 24px rgba(0,0,0,.25); transition: opacity .35s, transform .35s; pointer-events: none; }
.s80-ft-toast.is-out { opacity: 0; transform: translate(-50%, 8px); }

/* ---------- Peta ---------- */
.s80-map { position: relative; height: 100%; display: flex; flex-direction: column; }
.s80-map-view { position: relative; flex: 1; min-height: 0; overflow: hidden; background: #eef1ec; }
.s80-map-if, .s80-el .s80-ft svg.s80-map-ph { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; display: block; }
.s80-map-empty { position: absolute; left: 50%; bottom: 12%; transform: translateX(-50%); background: rgba(255,255,255,.92); color: #555; font-size: .72em; padding: .3em .8em; border-radius: 99px; white-space: nowrap; }
.s80-map-pill { position: absolute; left: 50%; bottom: .9em; transform: translateX(-50%); z-index: 2; display: inline-flex; align-items: center; gap: .45em; padding: .55em 1.15em; border-radius: 99px; background: #fff; color: #1d1d22; font-size: .82em; font-weight: 600; box-shadow: 0 .4em 1.2em rgba(0,0,0,.2); cursor: pointer; white-space: nowrap; }
.s80-map-pill svg { color: var(--fa); }
.s80-map-kartu .s80-map-view { border-radius: 1.1em; box-shadow: 0 .8em 2em -.6em rgba(0,0,0,.35); border: .3em solid #fff; }
.s80-map-polos .s80-map-view { border-radius: .3em; }
.s80-map-bulat .s80-map-view { border-radius: 50%; border: .35em solid #fff; box-shadow: 0 0 0 .12em var(--fa), 0 .8em 2em -.6em rgba(0,0,0,.35); }
.s80-map-bulat .s80-map-pill { bottom: 8%; }
.s80-map-lengkung .s80-map-view { border-radius: 50% 50% 1em 1em / 32% 32% 1em 1em; border: .3em solid #fff; box-shadow: 0 0 0 .1em var(--fa), 0 .8em 2em -.6em rgba(0,0,0,.35); }
.s80-map-polaroid { background: #fff; padding: .8em .8em 0; box-shadow: 0 .8em 2em -.5em rgba(0,0,0,.35); transform: rotate(-1.2deg); }
.s80-map-polaroid .s80-map-cap { font-family: var(--ffs); color: #3a3a44; font-size: 1.5em; line-height: 1; padding: .45em 0 .6em; }
.s80-map-polaroid .s80-map-pill { bottom: 3.6em; }
.s80-map-alamat { border-radius: 1.1em; overflow: hidden; background: var(--fcard); box-shadow: 0 .8em 2em -.6em rgba(0,0,0,.3); }
.s80-map-card { display: flex; align-items: center; gap: .7em; padding: .85em .95em; text-align: left; }
.s80-map-card > div { flex: 1; min-width: 0; font-size: .8em; line-height: 1.35; }
.s80-map-card b { display: block; font-size: 1.12em; color: var(--ft); }
.s80-map-card > div > span { color: var(--fm); overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.s80-map-card .s80-ft-btn { flex: none; }
.s80-map-pin { flex: none; width: 2.3em; height: 2.3em; border-radius: 50%; background: var(--fal); color: var(--fa); display: grid; place-items: center; font-style: normal; }
.s80-el .s80-map-pin svg { width: 1.2em; height: 1.2em; }

/* ---------- Peta motion wedding: 10 motif + tema terang/gelap ---------- */
.s80-map-view:after { content: ""; position: absolute; inset: 0; z-index: 2; pointer-events: none; opacity: .26; }
.s80-map-route { position: absolute; inset: 0; z-index: 3; width: 100% !important; height: 100% !important; overflow: visible; pointer-events: none; }
.s80-map-route path { fill: none; stroke: var(--fa); stroke-width: 3.4; stroke-linecap: round; stroke-linejoin: round; stroke-dasharray: 260; stroke-dashoffset: 260; filter: drop-shadow(0 1px 2px rgba(0,0,0,.3)); animation: s80-map-route-draw 4.2s .25s cubic-bezier(.45,.05,.2,1) forwards; }
.s80-map-destination path { fill: var(--fa); stroke: #fff; stroke-width: 1.2; transform-origin: center; animation: s80-map-pin-arrive .6s 4.25s both; filter: drop-shadow(0 2px 2px rgba(0,0,0,.35)); }
.s80-map-destination circle { fill: #fff; animation: s80-map-pin-arrive .6s 4.25s both; }
@keyframes s80-map-route-draw { to { stroke-dashoffset: 0; } }
@keyframes s80-map-pin-arrive { 0% { opacity: 0; transform: scale(.45); } 72% { opacity: 1; transform: scale(1.12); } 100% { opacity: 1; transform: scale(1); } }
.s80-map-romantis .s80-map-view:after { opacity: .2; background-image: linear-gradient(28deg, transparent 48%, #d9dfd2 49%, #d9dfd2 50%, transparent 51%), linear-gradient(118deg, transparent 48%, #e9ddd1 49%, #e9ddd1 50%, transparent 51%); background-size: 72px 60px, 95px 77px; }
.s80-map-topografi .s80-map-view:after { opacity: .42; background-image: repeating-radial-gradient(ellipse at 28% 60%, transparent 0 12px, #879c75 13px 14px, transparent 15px 22px); }
.s80-map-metro .s80-map-view:after { opacity: .24; background-image: linear-gradient(90deg, transparent 95%, #637e93 96%), linear-gradient(transparent 95%, #637e93 96%); background-size: 19px 19px; }
.s80-map-blueprint .s80-map-view { background: #202633; }
.s80-map-blueprint .s80-map-view:after { opacity: .38; background-image: linear-gradient(#8fa2c51b 1px, transparent 1px), linear-gradient(90deg, #8fa2c51b 1px, transparent 1px), radial-gradient(ellipse at 75% 70%, #735c9580, transparent 54%); background-size: 13px 13px, 13px 13px, auto; }
.s80-map-botanical .s80-map-view:after { opacity: .43; background-image: radial-gradient(ellipse at 17% 18%, #97ae7e 0 2px, transparent 3px), radial-gradient(ellipse at 74% 24%, #bd8f82 0 3px, transparent 4px), radial-gradient(ellipse at 82% 76%, #8fa77a 0 4px, transparent 5px), radial-gradient(ellipse at 36% 83%, #d0b78a 0 3px, transparent 4px); background-size: 57px 61px, 83px 77px, 69px 73px, 78px 81px; }
.s80-map-pesisir .s80-map-view { background: linear-gradient(160deg, #c7e0e5 0 43%, #efe5d1 44% 100%); }
.s80-map-pesisir .s80-map-view:after { opacity: .37; background: repeating-linear-gradient(172deg, transparent 0 10px, #fff 11px 12px, transparent 13px 24px); }
.s80-map-atlas .s80-map-view:after { opacity: .25; background-image: radial-gradient(#a07b4d 0 1px, transparent 1.5px), linear-gradient(45deg, #a07b4d17 25%, transparent 25% 75%, #a07b4d17 75%); background-size: 8px 8px, 20px 20px; }
.s80-map-watercolor .s80-map-view:after { opacity: .36; background-image: radial-gradient(ellipse at 17% 75%, #8bb09b99 0 10%, transparent 34%), radial-gradient(ellipse at 79% 17%, #d6a99388 0 12%, transparent 35%), radial-gradient(ellipse at 52% 55%, #b7cfa377 0 13%, transparent 39%); }
.s80-map-ticket .s80-map-view:after { opacity: .3; background-image: repeating-linear-gradient(0deg, transparent 0 19px, #a2785b 20px 21px), repeating-linear-gradient(90deg, transparent 0 31px, #a2785b 32px 33px); }
.s80-map-celestial .s80-map-view { background: radial-gradient(ellipse at 64% 38%, #51456f 0, #171b35 64%); }
.s80-map-celestial .s80-map-view:after { opacity: .9; background-image: radial-gradient(circle at 13% 20%, #fff 0 1px, transparent 1.6px), radial-gradient(circle at 34% 62%, #fff 0 1px, transparent 1.6px), radial-gradient(circle at 68% 22%, #fff 0 1px, transparent 1.6px), radial-gradient(circle at 84% 76%, #eed6ff 0 1.4px, transparent 2px), radial-gradient(circle at 54% 83%, #fff 0 1px, transparent 1.6px); }
.s80-map-theme-dark .s80-map-view { background-color: #1d222b; }
.s80-map-theme-dark .s80-map-if, .s80-map-theme-dark .s80-map-ph { filter: invert(1) hue-rotate(180deg) saturate(.76) brightness(.82); }
.s80-map-theme-dark .s80-map-pill { background: #282d36; color: #f7f3ef; border: 1px solid rgba(255,255,255,.16); }
.s80-map-theme-dark .s80-map-card { background: #262b34; color: #f7f3ef; }
.s80-map-theme-dark .s80-map-card b { color: #f7f3ef; }
.s80-map-theme-dark .s80-map-card > div > span { color: #cbc6c1; }
.s80-map-theme-dark.s80-map-polaroid { background: #282b32; }
.s80-map-theme-dark.s80-map-polaroid .s80-map-cap { color: #f7f3ef; }
.s80-map-scene-card { position: absolute; z-index: 4; left: .8em; top: .8em; width: 61%; padding: .85em 1em; text-align: left; border-radius: .8em; backdrop-filter: blur(9px); animation: s80-map-card-arrive .55s .2s both; }
.s80-map-scene-card small { display: block; margin-bottom: .32em; font: 700 .55em/1.3 var(--fft); letter-spacing: .17em; }
.s80-map-scene-card b { display: block; font: 600 1em/1.2 var(--ffs); }
.s80-map-scene-card span { display: block; margin-top: .25em; font: 400 .66em/1.35 var(--ffb); opacity: .78; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.s80-map-classic .s80-map-view { background: #e8dfca; }
.s80-map-classic .s80-map-view:after { opacity: .25; background-image: radial-gradient(#8e754f 0 1px, transparent 1.5px), linear-gradient(45deg, #a07d4a17 25%, transparent 25% 75%, #a07d4a17 75%); background-size: 8px 8px, 21px 21px; }
.s80-map-classic .s80-map-scene-card { background: #fbf6e8ed; color: #584b3c; border: 1px solid #cbb78b; border-radius: 2px; box-shadow: 3px 4px 0 #9e84514a; }
.s80-map-modern .s80-map-view { background: #e8eceb; }
.s80-map-modern .s80-map-view:after { opacity: .28; background-image: linear-gradient(90deg, transparent 96%, #768889 97%), linear-gradient(transparent 96%, #768889 97%); background-size: 24px 24px; }
.s80-map-modern .s80-map-scene-card { background: rgba(255,255,255,.88); color: #263335; border-left: 3px solid var(--fa); border-radius: .45em; box-shadow: 0 .45em 1.6em rgba(29,43,43,.17); }
.s80-map-supermodern .s80-map-view { background: radial-gradient(ellipse at 73% 27%, #30395f, #151927 72%); }
.s80-map-supermodern .s80-map-view:after { opacity: .55; background-image: linear-gradient(#a3b8ff15 1px, transparent 1px), linear-gradient(90deg, #a3b8ff15 1px, transparent 1px), radial-gradient(circle at 72% 26%, #fff 0 1px, transparent 1.8px), radial-gradient(circle at 44% 71%, #8aeaff 0 1px, transparent 1.8px); background-size: 18px 18px, 18px 18px, 53px 47px, 67px 61px; }
.s80-map-supermodern .s80-map-route path { stroke: #72e8ff; stroke-width: 2.7; filter: drop-shadow(0 0 4px #72e8ff) drop-shadow(0 0 9px #a758f3); }
.s80-map-supermodern .s80-map-destination path { fill: #b25cff; stroke: #bcf7ff; filter: drop-shadow(0 0 5px #72e8ff); }
.s80-map-supermodern .s80-map-scene-card { background: rgba(16,21,37,.82); color: #f1f3ff; border: 1px solid #7eeaff90; border-radius: .55em; box-shadow: 0 0 1.2em #4bdfff40, inset 0 0 1em #5861a522; }
.s80-map-theme-dark.s80-map-classic .s80-map-scene-card { background: #292820ed; color: #f2ead9; border-color: #7b694a; }
.s80-map-theme-dark.s80-map-modern .s80-map-scene-card { background: rgba(32,38,45,.9); color: #f1f5f3; }
@keyframes s80-map-card-arrive { from { opacity: 0; transform: translateY(-5px); } to { opacity: 1; transform: translateY(0); } }
@media (prefers-reduced-motion: reduce) { .s80-map-route path, .s80-map-destination path, .s80-map-destination circle, .s80-map-scene-card { animation-duration: .01ms; animation-iteration-count: 1; } }

/* ---------- Waktu Acara ---------- */
.s80-ev { padding: .2em .4em; }
.s80-ev-t { font-family: var(--ffs); font-size: 2.3em; line-height: 1.15; color: var(--fa); margin-bottom: .1em; }
.s80-ev-mon { font-family: var(--fft); text-transform: uppercase; letter-spacing: .28em; font-size: 1.05em; margin: .3em 0 .25em; }
.s80-ev-row { display: flex; align-items: center; justify-content: center; }
.s80-ev-row span { flex: 1; font-size: .98em; padding: .2em .6em; border-color: var(--fa); border-style: solid; border-width: 0; }
.s80-ev-row span:first-child { text-align: right; border-right-width: 1.5px; }
.s80-ev-row span:last-child { text-align: left; border-left-width: 1.5px; }
.s80-ev-row b { font-family: var(--fft); font-size: 2.6em; line-height: 1; padding: 0 .28em; font-weight: 600; }
.s80-ev-jam { margin-top: .7em; font-size: .95em; }
.s80-ev-place { margin-top: .55em; font-weight: 700; font-size: 1.02em; }
.s80-ev-addr { color: var(--fm); font-size: .86em; margin-top: .15em; }
.s80-ev-date { font-family: var(--fft); font-size: 1.15em; margin: .3em 0; }
.s80-ev-kartu { padding: 0; }
.s80-ev-kartu .s80-ev-box { background: var(--fcard); border: 1.5px solid var(--fline); border-bottom: 0; border-radius: 9em 9em 0 0 / 5em 5em 0 0; padding: 2em 1.2em 1.4em; }
.s80-ev-foot { background: var(--fa); color: #fff; font-family: var(--ffs); font-size: 1.6em; padding: .35em .6em; border-radius: 0 0 .5em .5em; min-height: 1.6em; }
.s80-ev-sep { width: 3.2em; height: 2px; background: var(--fa); margin: .5em auto .4em; border-radius: 2px; }
.s80-ev-boxes { display: flex; gap: .5em; justify-content: center; margin: .6em 0 .2em; }
.s80-ev-boxes div { flex: 1; max-width: 6.6em; border: 1.5px solid var(--fa); border-radius: .7em; padding: .5em .2em; background: var(--fcard); }
.s80-ev-boxes small { display: block; font-size: .72em; color: var(--fm); text-transform: uppercase; letter-spacing: .12em; }
.s80-ev-boxes b { display: block; font-family: var(--fft); font-size: 1.35em; line-height: 1.25; }
.s80-ev-frame { border: 1.5px solid var(--fa); outline: 1.5px solid var(--fa); outline-offset: .3em; margin: .45em; padding: 1.3em 1em; background: var(--fcard); }
.s80-ev-circle { width: 8.6em; height: 8.6em; margin: .6em auto .2em; border-radius: 50%; border: 1.5px solid var(--fa); box-shadow: 0 0 0 .35em var(--fal); background: var(--fcard); display: flex; flex-direction: column; align-items: center; justify-content: center; }
.s80-ev-circle b { font-family: var(--fft); font-size: 3em; line-height: 1; color: var(--fa); }
.s80-ev-circle small { font-size: .82em; letter-spacing: .06em; }
.s80-ev-cal { width: 8.2em; margin: .2em auto .7em; border-radius: .8em; overflow: hidden; background: var(--fcard); box-shadow: 0 .6em 1.5em -.6em rgba(0,0,0,.35); border: 1px solid var(--fline); }
.s80-ev-calh { background: var(--fa); color: #fff; font-size: .78em; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; padding: .45em 0; }
.s80-ev-cal b { display: block; font-family: var(--fft); font-size: 3.1em; line-height: 1.15; }
.s80-ev-cal span { display: block; font-size: .82em; color: var(--fm); padding-bottom: .5em; }
.s80-ev-garis { text-align: left; }
.s80-ev-bar { border-left: .28em solid var(--fa); background: var(--fcard); border-radius: 0 .9em .9em 0; padding: 1em 1.1em; }
.s80-ev-garis .s80-ev-t { font-size: 2em; }
.s80-ev-li { display: flex; gap: .6em; align-items: flex-start; margin-top: .55em; font-size: .92em; }
.s80-el .s80-ev-li svg { color: var(--fa); width: 1.25em; height: 1.25em; margin-top: .1em; }
.s80-ev-orn { display: flex; align-items: center; gap: .6em; color: var(--fg); margin: .45em auto; width: 70%; font-size: .9em; }
.s80-ev-orn i { flex: 1; height: 1px; background: currentColor; opacity: .7; }
.s80-ev-elegan .s80-ev-t { font-size: 2.6em; }
.s80-ev-elegan .s80-ev-date { text-transform: uppercase; letter-spacing: .14em; font-size: .98em; }
.s80-ev-mod { display: flex; align-items: stretch; border-radius: 1em; overflow: hidden; background: var(--fcard); box-shadow: 0 .6em 1.6em -.7em rgba(0,0,0,.35); text-align: left; }
.s80-ev-modl { flex: none; width: 5.2em; background: var(--fa); color: #fff; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: .8em .3em; text-transform: uppercase; letter-spacing: .1em; font-size: .92em; }
.s80-ev-modl b { font-family: var(--fft); font-size: 2.8em; line-height: 1; letter-spacing: 0; }
.s80-ev-modr { flex: 1; padding: .9em 1em; min-width: 0; }
.s80-ev-modr .s80-ev-t { font-size: 1.9em; }
.s80-ev-modr .s80-ev-date { font-family: var(--ffb); font-weight: 600; font-size: .95em; margin: 0; }
.s80-ev-modr .s80-ev-jam { margin-top: .3em; }
.s80-ev-modr .s80-ft-btn { margin-top: .7em; }

/* ---------- Susunan Acara ---------- */
.s80-rd-head { font-family: var(--ffs); font-size: 2.3em; line-height: 1.2; color: var(--fa); margin-bottom: .45em; }
.s80-rd-list { position: relative; display: flex; flex-direction: column; gap: 1em; }
.s80-rd-it { position: relative; display: grid; grid-template-columns: 2.6em 1fr; grid-template-areas: "ic time" "ic body"; column-gap: .8em; text-align: left; align-items: start; }
.s80-rd-no { display: none; }
.s80-rd-ic { grid-area: ic; position: relative; z-index: 1; width: 2.6em; height: 2.6em; border-radius: 50%; background: var(--fa); color: #fff; display: grid; place-items: center; }
.s80-el .s80-rd-ic svg { width: 1.3em; height: 1.3em; }
.s80-rd-time { grid-area: time; font-weight: 700; color: var(--fa); font-size: .88em; letter-spacing: .03em; }
.s80-rd-body { grid-area: body; }
.s80-rd-n { font-weight: 600; font-size: 1.02em; line-height: 1.3; }
.s80-rd-d { font-size: .82em; color: var(--fm); margin-top: .15em; }
/* 1 zigzag: garis tengah, jam & nama bergantian kiri-kanan */
.s80-rd-zigzag .s80-rd-list::before { content: ""; position: absolute; left: 50%; top: 1.3em; bottom: 1.3em; width: 1.5px; background: var(--fa); transform: translateX(-50%); opacity: .6; }
.s80-rd-zigzag .s80-rd-it { grid-template-columns: 1fr 2.6em 1fr; grid-template-areas: "time ic body"; align-items: center; column-gap: .9em; }
.s80-rd-zigzag .s80-rd-time { text-align: right; font-size: 1em; }
.s80-rd-zigzag .s80-rd-it:nth-child(even) { grid-template-areas: "body ic time"; }
.s80-rd-zigzag .s80-rd-it:nth-child(even) .s80-rd-time { text-align: left; }
.s80-rd-zigzag .s80-rd-it:nth-child(even) .s80-rd-body { text-align: right; }
/* 2 kiri & 3 kanan: garis samping */
.s80-rd-kiri .s80-rd-list::before, .s80-rd-kanan .s80-rd-list::before { content: ""; position: absolute; left: 1.3em; top: 1.3em; bottom: 1.3em; width: 1.5px; background: var(--fa); opacity: .55; }
.s80-rd-kanan .s80-rd-list::before { left: auto; right: 1.3em; }
.s80-rd-kanan .s80-rd-it { grid-template-columns: 1fr 2.6em; grid-template-areas: "time ic" "body ic"; text-align: right; }
/* 4 kartu */
.s80-rd-kartu .s80-rd-it { background: var(--fcard); border-radius: .9em; padding: .8em .9em; box-shadow: 0 .5em 1.4em -.7em rgba(0,0,0,.35); border: 1px solid var(--fline); }
.s80-rd-kartu .s80-rd-ic { border-radius: .7em; }
.s80-rd-kartu .s80-rd-time { display: inline-block; justify-self: start; background: var(--fal); color: var(--fad); padding: .1em .7em; border-radius: 99px; margin-bottom: .25em; }
/* 5 nomor */
.s80-rd-nomor .s80-rd-ic { display: none; }
.s80-rd-nomor .s80-rd-no { display: grid; grid-area: ic; width: 2.3em; height: 2.3em; border-radius: 50%; border: 1.5px solid var(--fa); color: var(--fa); place-items: center; font-family: var(--fft); font-weight: 700; font-size: 1.1em; }
.s80-rd-nomor .s80-rd-it { grid-template-columns: 2.6em 1fr; }
/* 6 jam besar */
.s80-rd-jambesar .s80-rd-ic { display: none; }
.s80-rd-jambesar .s80-rd-it { grid-template-columns: 6.6em 1fr; grid-template-areas: "time body"; align-items: center; padding-bottom: 1em; border-bottom: 1px solid var(--fline); }
.s80-rd-jambesar .s80-rd-it:last-child { border-bottom: 0; padding-bottom: 0; }
.s80-rd-jambesar .s80-rd-time { font-family: var(--fft); font-size: 1.3em; white-space: nowrap; line-height: 1.1; color: var(--fa); border-right: 1.5px solid var(--fa); padding-right: .35em; }
/* 7 titik-titik (seperti menu) */
.s80-rd-titik .s80-rd-ic { display: none; }
.s80-rd-titik .s80-rd-list { gap: .75em; }
.s80-rd-titik .s80-rd-it { grid-template-columns: auto 1fr auto; grid-template-areas: "body dot time"; align-items: baseline; column-gap: .4em; }
.s80-rd-titik .s80-rd-it::after { content: ""; grid-area: dot; border-bottom: 2px dotted var(--fa); opacity: .6; transform: translateY(-.3em); }
.s80-rd-titik .s80-rd-time { font-size: 1em; }
/* 8 pita jam */
.s80-rd-pita .s80-rd-ic { display: none; }
.s80-rd-pita .s80-rd-it { grid-template-columns: 5.6em 1fr; grid-template-areas: "time body"; align-items: center; }
.s80-rd-pita .s80-rd-time { background: var(--fa); color: #fff; text-align: center; padding: .5em .2em .5em 0; clip-path: polygon(0 0, 88% 0, 100% 50%, 88% 100%, 0 100%); font-size: .86em; }
/* 9 ikon besar */
.s80-rd-ikon .s80-rd-it { grid-template-columns: 1fr; grid-template-areas: "ic" "time" "body"; justify-items: center; text-align: center; row-gap: .2em; }
.s80-rd-ikon .s80-rd-ic { width: 3.4em; height: 3.4em; background: var(--fal); color: var(--fa); border: 1.5px solid var(--fa); }
.s80-rd-ikon .s80-rd-it:not(:last-child)::after { content: "\2726"; color: var(--fa); opacity: .6; font-size: .8em; margin-top: .5em; }
/* 10 tabel */
.s80-rd-tabel .s80-rd-ic { display: none; }
.s80-rd-tabel .s80-rd-list { gap: 0; border: 1.5px solid var(--fa); border-radius: .7em; overflow: hidden; background: var(--fcard); }
.s80-rd-tabel .s80-rd-it { grid-template-columns: 5.4em 1fr; grid-template-areas: "time body"; align-items: center; column-gap: 0; }
.s80-rd-tabel .s80-rd-it + .s80-rd-it { border-top: 1px solid var(--fline); }
.s80-rd-tabel .s80-rd-time { align-self: stretch; display: flex; align-items: center; justify-content: center; background: var(--fal); color: var(--fad); padding: .7em .3em; border-right: 1px solid var(--fline); }
.s80-rd-tabel .s80-rd-body { padding: .6em .8em; }
/* 11 kapsul */
.s80-rd-kapsul .s80-rd-ic { display: none; }
.s80-rd-kapsul .s80-rd-list { gap: .6em; }
.s80-rd-kapsul .s80-rd-it { grid-template-columns: auto 1fr; grid-template-areas: "time body"; align-items: center; background: var(--fcard); border: 1.5px solid var(--fa); border-radius: 99px; padding: .3em 1em .3em .3em; }
.s80-rd-kapsul .s80-rd-time { background: var(--fa); color: #fff; border-radius: 99px; padding: .55em .9em; font-size: .82em; }
.s80-rd-kapsul .s80-rd-d { display: none; }
/* 12 gelembung */
.s80-rd-gelembung .s80-rd-it { grid-template-columns: 2.6em auto; grid-template-areas: "ic body"; justify-content: start; align-items: end; }
.s80-rd-gelembung .s80-rd-body { background: var(--fcard); border: 1px solid var(--fline); border-radius: 1em 1em 1em .2em; padding: .6em .9em; box-shadow: 0 .4em 1em -.6em rgba(0,0,0,.3); }
.s80-rd-gelembung .s80-rd-time { grid-area: body; align-self: start; margin: -.3em 0 0 .9em; position: relative; z-index: 1; transform: translateY(-.9em); font-size: .78em; }
.s80-rd-gelembung .s80-rd-it { margin-top: .7em; }
.s80-rd-gelembung .s80-rd-it:nth-child(even) { grid-template-columns: auto 2.6em; grid-template-areas: "body ic"; justify-content: end; text-align: right; }
.s80-rd-gelembung .s80-rd-it:nth-child(even) .s80-rd-body { border-radius: 1em 1em .2em 1em; }
.s80-rd-gelembung .s80-rd-it:nth-child(even) .s80-rd-time { margin: -.3em .9em 0 0; justify-self: end; }
/* 13 minimal */
.s80-rd-minimal .s80-rd-ic { display: none; }
.s80-rd-minimal .s80-rd-list { gap: .8em; }
.s80-rd-minimal .s80-rd-it { grid-template-columns: 1fr; grid-template-areas: "time" "body"; text-align: center; }
.s80-rd-minimal .s80-rd-time { font-weight: 500; letter-spacing: .15em; font-size: .8em; }
.s80-rd-minimal .s80-rd-n { font-family: var(--fft); font-size: 1.2em; font-weight: 500; }
/* 14 garis tebal */
.s80-rd-tebal .s80-rd-ic { display: none; }
.s80-rd-tebal .s80-rd-it { grid-template-columns: 1fr; grid-template-areas: "time" "body"; border-left: .35em solid var(--fa); padding: .15em 0 .15em .9em; }
.s80-rd-tebal .s80-rd-n { font-weight: 800; text-transform: uppercase; letter-spacing: .04em; font-size: .98em; }
/* 15 kotak garis */
.s80-rd-kotak { border: 1.5px solid var(--fa); border-radius: 1.2em; padding: 1.1em 1em; background: var(--fcard); }
.s80-rd-kotak .s80-rd-ic { display: none; }
.s80-rd-kotak .s80-rd-list { gap: 0; }
.s80-rd-kotak .s80-rd-it { grid-template-columns: 1fr; grid-template-areas: "time" "body"; text-align: center; padding: .65em 0; }
.s80-rd-kotak .s80-rd-it + .s80-rd-it { border-top: 1px dashed var(--fline); }
/* 16 tangga */
.s80-rd-tangga .s80-rd-it { background: var(--fcard); border-radius: .8em; padding: .6em .8em; border: 1px solid var(--fline); width: 82%; }
.s80-rd-tangga .s80-rd-it:nth-child(2) { margin-left: 6%; } .s80-rd-tangga .s80-rd-it:nth-child(3) { margin-left: 12%; } .s80-rd-tangga .s80-rd-it:nth-child(4) { margin-left: 18%; }
.s80-rd-tangga .s80-rd-it:nth-child(5) { margin-left: 12%; } .s80-rd-tangga .s80-rd-it:nth-child(6) { margin-left: 6%; } .s80-rd-tangga .s80-rd-it:nth-child(n+8) { margin-left: 9%; }
.s80-rd-tangga .s80-rd-ic { width: 2.3em; height: 2.3em; }
/* 17 dua kolom */
.s80-rd-grid .s80-rd-list { display: grid; grid-template-columns: 1fr 1fr; gap: .6em; }
.s80-rd-grid .s80-rd-it { grid-template-columns: 1fr; grid-template-areas: "ic" "time" "body"; justify-items: center; text-align: center; background: var(--fcard); border-radius: 1em; padding: .8em .5em; border: 1px solid var(--fline); row-gap: .15em; }
.s80-rd-grid .s80-rd-ic { width: 2.4em; height: 2.4em; }
/* 18 emas wajik */
.s80-rd-emas .s80-rd-list::before { content: ""; position: absolute; left: 50%; top: .5em; bottom: .5em; width: 1px; background: linear-gradient(var(--fg), transparent 2%, var(--fg) 6%, var(--fg) 94%, transparent 98%, var(--fg)); }
.s80-rd-emas .s80-rd-it { grid-template-columns: 1fr 1.4em 1fr; grid-template-areas: "time ic body"; align-items: center; column-gap: 1em; }
.s80-rd-emas .s80-rd-ic { width: .95em; height: .95em; border-radius: 0; background: var(--fg); transform: rotate(45deg); box-shadow: 0 0 0 .25em var(--fcard), 0 0 0 .32em var(--fg); justify-self: center; }
.s80-rd-emas .s80-rd-ic svg { display: none !important; }
.s80-rd-emas .s80-rd-time { text-align: right; color: var(--fg); font-family: var(--fft); font-size: 1.05em; }
.s80-rd-emas .s80-rd-n { font-family: var(--fft); }
.s80-rd-emas .s80-rd-head { color: var(--fg); }
/* 19 jam dalam lingkaran */
.s80-rd-lingkar .s80-rd-ic { display: none; }
.s80-rd-lingkar .s80-rd-list::before { content: ""; position: absolute; left: 2.2em; top: 2em; bottom: 2em; border-left: 1.5px dashed var(--fa); opacity: .6; }
.s80-rd-lingkar .s80-rd-it { grid-template-columns: 4.4em 1fr; grid-template-areas: "time body"; align-items: center; }
.s80-rd-lingkar .s80-rd-time { position: relative; z-index: 1; width: 4.4em; height: 4.4em; border-radius: 50%; background: var(--fcard); border: 1.5px solid var(--fa); display: grid; place-items: center; text-align: center; font-size: .8em; line-height: 1.15; padding: .3em; }
/* 20 tulisan indah */
.s80-rd-script .s80-rd-ic { display: none; }
.s80-rd-script .s80-rd-it { grid-template-columns: 1fr; grid-template-areas: "time" "body"; text-align: center; }
.s80-rd-script .s80-rd-time { font-family: var(--ffs); font-weight: 400; font-size: 1.9em; line-height: 1.1; letter-spacing: 0; }
.s80-rd-script .s80-rd-n { text-transform: uppercase; letter-spacing: .2em; font-size: .82em; }
.s80-rd-script .s80-rd-it:not(:last-child)::after { content: ""; width: 2.4em; height: 1px; background: var(--fa); margin: .8em auto 0; opacity: .6; }

/* ---------- Kehadiran & Ucapan ---------- */
.s80-rv { text-align: left; padding: 1.3em 1.1em; border-radius: 1.3em; background: var(--fcard); box-shadow: 0 1em 2.4em -1.1em rgba(0,0,0,.35); }
.s80-rv-head { font-family: var(--ffs); color: var(--fa); font-size: 2.1em; line-height: 1.15; text-align: center; }
.s80-rv-note { text-align: center; font-size: .82em; color: var(--fm); margin-top: .3em; }
.s80-rv-form { margin-top: .6em; }
.s80-rv-form.is-nopax .s80-rv-paxw { display: none; }
.s80-rv-lbl { display: block; font-size: .78em; font-weight: 600; margin: .8em 0 .3em; color: var(--ft); }
.s80-rv-in { display: block; width: 100%; font: inherit; font-size: .88em; color: #1d1d22; background: #fff; border: 1px solid rgba(0,0,0,.14); border-radius: .7em; padding: .7em .85em; outline: none; resize: vertical; -webkit-appearance: none; appearance: none; }
select.s80-rv-in { background-image: linear-gradient(45deg, transparent 50%, #888 50%), linear-gradient(135deg, #888 50%, transparent 50%); background-position: calc(100% - 1.1em) 55%, calc(100% - .8em) 55%; background-size: .32em .32em; background-repeat: no-repeat; }
.s80-rv-in:focus { border-color: var(--fa); box-shadow: 0 0 0 .2em var(--fal); }
.s80-rv-att { display: flex; gap: .4em; }
.s80-rv-att label { flex: 1; cursor: pointer; }
.s80-rv-att input { position: absolute; opacity: 0; pointer-events: none; }
.s80-rv-att span { display: block; text-align: center; font-size: .8em; padding: .6em .2em; border-radius: 99px; border: 1.5px solid var(--fa); color: var(--fa); background: #fff; font-weight: 600; transition: background .2s, color .2s; }
.s80-rv-att input:checked + span { background: var(--fa); color: #fff; }
.s80-rv-hp { position: absolute !important; left: -9999px; width: 1px; height: 1px; opacity: 0; }
.s80-rv-send { all: unset; box-sizing: border-box; display: block; width: 100%; text-align: center; margin-top: 1em; padding: .8em; border-radius: 99px; background: var(--fa); color: #fff; font-weight: 700; font-size: .92em; letter-spacing: .04em; cursor: pointer; box-shadow: 0 .5em 1.2em -.5em var(--fa); }
.s80-rv-send:disabled { opacity: .6; cursor: default; }
.s80-rv-status { font-size: .78em; text-align: center; min-height: 1em; margin-top: .5em; }
.s80-rv-status.is-ok { color: #1f8f4e; } .s80-rv-status.is-err { color: #d23b3b; }
.s80-rv-wh { display: flex; align-items: baseline; justify-content: space-between; gap: .5em; margin-top: 1.1em; padding-top: .9em; border-top: 1px solid var(--fline); }
.s80-rv-wh b { font-family: var(--fft); font-size: 1.1em; }
.s80-rv-sum { font-size: .72em; color: var(--fm); }
.s80-rv-list { margin-top: .6em; display: flex; flex-direction: column; gap: .6em; max-height: 17em; overflow-y: auto; padding-right: .2em; }
.s80-rv-item { display: flex; gap: .65em; background: rgba(127,127,127,.07); border-radius: .9em; padding: .7em .75em; }
.s80-rv-av { flex: none; width: 2.2em; height: 2.2em; border-radius: 50%; background: var(--fa); color: #fff; display: grid; place-items: center; font-weight: 700; font-size: .9em; }
.s80-rv-ib { flex: 1; min-width: 0; font-size: .82em; }
.s80-rv-ih { display: flex; align-items: center; gap: .4em; flex-wrap: wrap; }
.s80-rv-ih b { font-size: 1.05em; }
.s80-rv-tag { font-size: .78em; padding: .1em .6em; border-radius: 99px; background: #e3f5ea; color: #1f8f4e; font-weight: 600; }
.s80-rv-tag.is-tidak { background: #fde8e8; color: #c43b3b; } .s80-rv-tag.is-ragu { background: #fff3d6; color: #a8740b; }
.s80-rv-with { color: var(--fm); font-size: .92em; }
.s80-ws { color: var(--ws-text); padding: 1.15em; border: 1px solid var(--ws-line, rgba(127,127,127,.22)); border-radius: 1.15em; background: var(--ws-bg, transparent); box-shadow: var(--ws-shadow, none); }
.s80-ws-head { margin: 0; color: var(--ws-accent); font: 400 2em/1.15 var(--fft); text-align: center; }
.s80-ws-note { margin: .45em 0 .9em; color: var(--fm); font-size: .84em; line-height: 1.55; text-align: center; }
.s80-ws-label { display: block; margin: .75em 0 .3em; color: var(--ws-text); font-size: .78em; font-weight: 600; }
.s80-ws-input { display: block; box-sizing: border-box; width: 100%; min-height: 2.8em; padding: .68em .8em; border: 1px solid var(--ws-line, rgba(127,127,127,.28)); border-radius: .65em; outline: 0; background: var(--ws-field, rgba(255,255,255,.72)); color: var(--ws-text); font: inherit; font-size: .88em; }
.s80-ws-input:focus { border-color: var(--ws-accent); box-shadow: 0 0 0 .18em color-mix(in srgb, var(--ws-accent) 17%, transparent); }
textarea.s80-ws-input { min-height: 5.8em; resize: vertical; }
.s80-ws-send { display: block; width: 100%; margin-top: .8em; padding: .75em 1em; border: 0; border-radius: 99px; background: var(--ws-accent); color: #fff; font: inherit; font-size: .9em; font-weight: 700; cursor: pointer; }
.s80-ws-send:disabled { opacity: .6; cursor: default; }
.s80-ws-listhead { display: flex; justify-content: space-between; align-items: baseline; gap: .6em; margin-top: 1.1em; padding-top: .85em; border-top: 1px solid var(--ws-line, rgba(127,127,127,.22)); color: var(--ws-accent); font: 600 1.04em/1.3 var(--fft); }
.s80-ws-listhead span { color: var(--fm); font: 400 .7em/1.3 var(--ffb); }
.s80-ws-list { display: flex; flex-direction: column; gap: .55em; max-height: 18em; margin-top: .6em; overflow: auto; padding-right: .15em; }
.s80-ws-item { display: flex; align-items: flex-start; gap: .65em; padding: .7em; border: 1px solid var(--ws-line, rgba(127,127,127,.16)); border-radius: .8em; background: var(--ws-item, rgba(127,127,127,.045)); }
.s80-ws-avatar { display: grid; flex: none; width: 2.1em; height: 2.1em; place-items: center; border-radius: 50%; background: var(--ws-accent); color: #fff; font-size: .88em; font-weight: 700; }
.s80-ws-itembody { min-width: 0; flex: 1; font-size: .82em; }
.s80-ws-itembody b { color: var(--ws-accent); }
.s80-ws-itembody p { margin: .25em 0; color: var(--ws-text); line-height: 1.5; overflow-wrap: anywhere; }
.s80-ws-itembody small { color: var(--fm); font-size: .78em; }
.s80-ws-empty { padding: .85em .6em; color: var(--fm); font-size: .82em; text-align: center; }
.s80-ws-classic { --ws-bg: #fffdfa; --ws-field: #fff; --ws-line: #e8e1d8; --ws-item: #fff; }
.s80-ws-rose { --ws-bg: #fff8fa; --ws-field: #fff; --ws-line: #ead2db; --ws-item: #fff; --ws-shadow: 0 10px 28px rgba(127,68,91,.08); }
.s80-ws-sage { --ws-bg: #f8faf6; --ws-field: #fff; --ws-line: #d7e0d2; --ws-item: rgba(255,255,255,.86); }
.s80-ws-gold { --ws-bg: #fcfaf5; --ws-field: #fff; --ws-line: #e8dfc9; --ws-item: #fff; }
.s80-ws-lavender { --ws-bg: #faf8fd; --ws-field: #fff; --ws-line: #e3dbed; --ws-item: #fff; }
.s80-ws-blue { --ws-bg: #f6fafc; --ws-field: #fff; --ws-line: #d7e5eb; --ws-item: #fff; }
.s80-ws-terracotta { --ws-bg: #fbf7f3; --ws-field: #fff; --ws-line: #eadbd0; --ws-item: #fff; }
.s80-ws-marun { --ws-bg: #3e171b; --ws-field: rgba(255,255,255,.08); --ws-line: rgba(255,255,255,.22); --ws-item: rgba(255,255,255,.08); --ws-shadow: 0 12px 30px rgba(35,8,12,.2); }
.s80-ws-marun .s80-ws-head, .s80-ws-marun .s80-ws-listhead { color: var(--fg); }
.s80-ws-marun .s80-ws-input { color: #fff; }
.s80-ws-marun .s80-ws-input::placeholder { color: rgba(255,255,255,.62); }
.s80-ws-marun .s80-ws-itembody b { color: #f4dcae; }
.s80-ws-minimal { border-color: transparent; padding: .8em; }
.s80-ws-floral { --ws-bg: #fffaf7; --ws-field: #fff; --ws-line: #eadcd4; --ws-item: rgba(255,255,255,.9); }
/* Wedding Wishes tanpa kartu/latar supaya menyatu dengan desain halaman. */
.s80-ws:not(.s80-ws-cocoa) { background: transparent !important; border-color: transparent !important; box-shadow: none !important; }
.s80-ws:not(.s80-ws-cocoa) .s80-ws-input, .s80-ws:not(.s80-ws-cocoa) .s80-ws-item { background: transparent !important; }
.s80-ws-cocoa { --ws-line: rgba(255,255,255,.12); --ws-field: #dedbd8; --ws-item: transparent; padding: 1.25em; border: 1px solid transparent; border-radius: 1.25em; background: var(--ws-panel, transparent) !important; box-shadow: none !important; color: #f7f3ed; }
.s80-ws-cocoa .s80-ws-head { margin: 0 0 .72em; color: #f7f3ed; font-family: var(--fft); font-size: 2.15em; font-weight: 400; line-height: 1.15; }
.s80-ws-cocoa .s80-ws-note { color: rgba(255,255,255,.82); }
.s80-ws-cocoa .s80-ws-label { display: none; }
.s80-ws-cocoa .s80-wishes-form { margin: 0; }
.s80-ws-cocoa .s80-ws-input { min-height: 2.8em; margin: 0 0 .72em; padding: .75em .9em; border: 1px solid rgba(0,0,0,.08); border-radius: 1em; background: #dedbd8 !important; color: #403a35; font-size: .92em; }
.s80-ws-cocoa .s80-ws-input::placeholder { color: #918d89; opacity: 1; }
.s80-ws-cocoa textarea.s80-ws-input { min-height: 6em; }
.s80-ws-cocoa .s80-ws-send { min-height: 2.8em; margin-top: .2em; border-radius: 99em; background: var(--ws-accent); color: #fff; font-weight: 500; }
.s80-ws-cocoa .s80-ws-listhead { color: #f7f3ed; }
.s80-ws-cocoa .s80-ws-item { border-color: rgba(255,255,255,.14); }
.s80-ws-cocoa .s80-ws-itembody p, .s80-ws-cocoa .s80-ws-itembody small { color: rgba(255,255,255,.86); }
.s80-rv-events { min-width: 0; border: 0; padding: 0; margin: .8em 0 0; }
.s80-rv-events legend { width: 100%; padding: 0; }
.s80-rv-events > label { display: flex; align-items: center; gap: .55em; margin: .42em 0; color: var(--ft); font-size: .82em; cursor: pointer; }
.s80-rv-events input { flex: none; width: 1.05em; height: 1.05em; margin: 0; accent-color: var(--fa); }
.s80-rv-events input:focus-visible { outline: 2px solid var(--fa); outline-offset: 2px; }
.s80-rv-msg { margin-top: .2em; line-height: 1.45; white-space: pre-line; word-wrap: break-word; }
.s80-rv-time { color: var(--fm); font-size: .82em; margin-top: .25em; }
.s80-rv-empty { text-align: center; font-size: .8em; color: var(--fm); padding: 1em 0; }
.s80-rv-kaca { background: rgba(255,255,255,.18); -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); border: 1px solid rgba(255,255,255,.45); }
.s80-rv-kaca .s80-rv-in { background: rgba(255,255,255,.75); }
.s80-rv-kaca .s80-rv-item { background: rgba(255,255,255,.35); }
.s80-rv-gelap { background: #1d1c22; color: #f3f0ea; --ft: #f3f0ea !important; --fm: rgba(243,240,234,.62) !important; --fline: rgba(255,255,255,.16) !important; }
.s80-rv-gelap .s80-rv-in { background: rgba(255,255,255,.08); border-color: rgba(255,255,255,.18); color: #fff; }
.s80-rv-gelap select.s80-rv-in option { color: #1d1d22; }
.s80-rv-gelap .s80-rv-att span { background: transparent; }
.s80-rv-gelap .s80-rv-att input:checked + span { background: var(--fa); }
.s80-rv-gelap .s80-rv-item { background: rgba(255,255,255,.06); }
.s80-rv-minimal { background: transparent; box-shadow: none; padding: .4em .2em; }
.s80-rv-minimal .s80-rv-in { background: transparent; border: 0; border-bottom: 1.5px solid var(--fline); border-radius: 0; padding: .55em .1em; color: var(--ft); }
.s80-rv-minimal .s80-rv-in:focus { box-shadow: none; border-color: var(--fa); }
.s80-rv-minimal .s80-rv-att span { background: transparent; }
.s80-rv-minimal .s80-rv-item { background: transparent; border-bottom: 1px solid var(--fline); border-radius: 0; padding: .6em 0; }
.s80-rv-marun { --fa: #d7ad87 !important; --fal: rgba(215,173,135,.16) !important; --ft: #f0dfd4 !important; --fm: #c59d9d !important; --fline: rgba(228,190,170,.32) !important;
  color: #f0dfd4; padding: 1.25em 1.15em; border: 1px solid rgba(225,184,155,.25); border-radius: .42em;
  background: linear-gradient(155deg, #4a0509 0%, #360006 58%, #49080b 100%); box-shadow: 0 .9em 2em rgba(32,0,4,.3), inset 0 1px rgba(255,235,225,.08); }
.s80-rv-marun .s80-rv-head { color: #eed5c6; font-size: 2.05em; letter-spacing: .015em; }
.s80-rv-marun .s80-rv-note { color: #d2b6b3; font-family: var(--ffs); font-size: .9em; font-style: italic; }
.s80-rv-marun .s80-rv-lbl { color: #e5c7bd; font-family: var(--ffs); font-weight: 400; font-size: .8em; letter-spacing: .015em; }
.s80-rv-marun .s80-rv-in { color: #fff4ed; background: transparent; border: 0; border-bottom: 1px solid rgba(228,190,170,.48); border-radius: 0; padding: .56em .15em; }
.s80-rv-marun .s80-rv-in::placeholder { color: rgba(239,205,197,.52); }
.s80-rv-marun .s80-rv-in:focus { border-color: #d7ad87; box-shadow: 0 2px 0 -1px #d7ad87; }
.s80-rv-marun .s80-rv-att { gap: .8em; }
.s80-rv-marun .s80-rv-att label { flex: 0 1 auto; }
.s80-rv-marun .s80-rv-att span { padding: .38em .15em; border: 0; border-bottom: 1px solid rgba(228,190,170,.42); border-radius: 0; color: #c99b9c; background: transparent; font-family: var(--ffs); font-size: .9em; font-weight: 400; }
.s80-rv-marun .s80-rv-att input:checked + span { color: #f4ddcd; background: transparent; border-color: #d7ad87; }
.s80-rv-marun .s80-rv-events > label { color: #e2c7be; font-family: var(--ffs); font-size: .88em; }
.s80-rv-marun .s80-rv-events input { accent-color: #d7ad87; }
.s80-rv-marun .s80-rv-send { color: #3f090b; background: linear-gradient(110deg, #c69c6e, #e3c59b 48%, #b88759); border-radius: .2em; letter-spacing: .06em; box-shadow: 0 .45em 1.2em rgba(5,0,0,.22); }
.s80-rv-marun .s80-rv-wh { border-color: rgba(228,190,170,.28); }
.s80-rv-marun .s80-rv-wh b { color: #efdbcc; }
.s80-rv-marun .s80-rv-sum, .s80-rv-marun .s80-rv-time { color: #c59d9d; }
.s80-rv-marun .s80-rv-item { border: 1px solid rgba(228,190,170,.14); border-radius: .35em; background: rgba(255,255,255,.045); }
.s80-rv-marun .s80-rv-av { color: #3e070a; background: #d7ad87; }
.s80-rv-marun .s80-rv-tag { color: #3d2814; background: #d7ad87; }
.s80-rv-marun .s80-rv-tag.is-tidak { color: #f2d8d4; background: rgba(255,255,255,.12); }
.s80-rv-marun .s80-rv-tag.is-ragu { color: #f3dcb9; background: rgba(215,173,135,.18); }

/* RSVP templates: text-led, with no background panel behind the form. */
.s80-rv { background: transparent !important; border: 0 !important; box-shadow: none !important; padding: .35em .15em !important; color: var(--rv-label) !important; }
.s80-rv .s80-rv-head { color: var(--rv-title) !important; }
.s80-rv .s80-rv-note, .s80-rv .s80-rv-sum, .s80-rv .s80-rv-time, .s80-rv .s80-rv-with { color: var(--rv-label) !important; opacity: .78; }
.s80-rv .s80-rv-lbl, .s80-rv .s80-rv-events > label { color: var(--rv-label) !important; }
.s80-rv .s80-rv-in { color: var(--rv-text) !important; background: var(--rv-field) !important; border-color: var(--rv-line) !important; }
.s80-rv .s80-rv-in::placeholder { color: var(--rv-label) !important; opacity: .58; }
.s80-rv .s80-rv-in:focus { border-color: var(--rv-choice-text) !important; }
.s80-rv .s80-rv-att span { color: var(--rv-choice-text) !important; background: var(--rv-choice) !important; border-color: var(--rv-line) !important; }
.s80-rv .s80-rv-att input:checked + span { color: var(--rv-button-text) !important; background: var(--rv-button) !important; border-color: var(--rv-button) !important; }
.s80-rv .s80-rv-events input { accent-color: var(--rv-button) !important; }
.s80-rv .s80-rv-send { color: var(--rv-button-text) !important; background: var(--rv-button) !important; border-color: var(--rv-button) !important; box-shadow: none !important; }
.s80-rv .s80-rv-wh { border-color: var(--rv-line) !important; }
.s80-rv .s80-rv-wh b { color: var(--rv-title) !important; }
.s80-rv .s80-rv-item { color: var(--rv-label) !important; background: var(--rv-list) !important; border: 1px solid var(--rv-line) !important; }
.s80-rv .s80-rv-av { color: var(--rv-button-text) !important; background: var(--rv-button) !important; }

/* Ten layout treatments share the same editable colors and transparent outer canvas. */
.s80-rv-kartu .s80-rv-in { border-radius: .25em; }
.s80-rv-kaca .s80-rv-in { border-radius: 1.2em; border-width: 1px; }
.s80-rv-gelap .s80-rv-in { border-radius: .15em; }
.s80-rv-minimal .s80-rv-in, .s80-rv-marun .s80-rv-in { border-width: 0 0 1px; border-radius: 0; padding-left: .15em; }
.s80-rv-marun .s80-rv-head { font-size: 2em; letter-spacing: .02em; }
.s80-rv-rose .s80-rv-head, .s80-rv-lavender .s80-rv-head { font-family: var(--ffs); }
.s80-rv-rose .s80-rv-att span, .s80-rv-lavender .s80-rv-att span { border-radius: 1.1em; }
.s80-rv-ivory .s80-rv-head, .s80-rv-gold .s80-rv-head { font-family: var(--fft); letter-spacing: .06em; }
.s80-rv-sage .s80-rv-head { font-family: var(--fft); }
.s80-rv-blue .s80-rv-in { border-radius: .35em; }
.s80-rv-terracotta .s80-rv-att span { border-radius: .28em; }
.s80-rv-mono .s80-rv-head { font-family: var(--ffb); font-size: 1.35em; font-weight: 700; letter-spacing: .14em; text-transform: uppercase; }
.s80-rv-gold .s80-rv-send { border-radius: .25em; letter-spacing: .08em; }
.s80-rv-ivory .s80-rv-wh, .s80-rv-gold .s80-rv-wh { border-top-style: double; }
.s80-rv-minimal .s80-rv-item { border-width: 0 0 1px !important; border-radius: 0; }

/* ---------- Kartu Rekening ---------- */
.s80-gf-head { font-family: var(--ffs); color: var(--fa); font-size: 2.2em; line-height: 1.15; }
.s80-gf-note { font-size: .84em; color: var(--fm); margin: .35em auto .2em; max-width: 26em; }
.s80-gf-card { position: relative; overflow: hidden; margin: 1em auto 0; width: 100%; max-width: 22em; aspect-ratio: 1.6; border-radius: 1em; padding: 1.1em 1.25em; text-align: left; color: #2b2b33;
  background: linear-gradient(135deg, #f4f5f7 0%, #d6d9de 38%, #f7f8fa 55%, #c9ccd2 100%); box-shadow: 0 .9em 1.8em -.9em rgba(0,0,0,.45), inset 0 0 0 1px rgba(255,255,255,.6); }
.s80-gf-shine { position: absolute; inset: 0; background: radial-gradient(120% 70% at 90% -10%, rgba(255,255,255,.75), transparent 55%), repeating-linear-gradient(115deg, rgba(255,255,255,.07) 0 2px, transparent 2px 7px); pointer-events: none; }
.s80-gf-bank { position: absolute; top: .9em; right: 1.1em; font-weight: 800; font-style: italic; font-size: 1.35em; letter-spacing: .02em; text-transform: uppercase; color: var(--bk, var(--fad)); }
.s80-gf-chip { position: absolute; left: 1.25em; top: 32%; width: 2.6em; height: 2em; border-radius: .38em; background: linear-gradient(135deg, #f1d58a, #c9a24a 55%, #f0d488); box-shadow: inset 0 0 0 1px rgba(120,90,20,.35); }
.s80-gf-chip::before { content: ""; position: absolute; inset: 28% 0; border-top: 1px solid rgba(120,90,20,.45); border-bottom: 1px solid rgba(120,90,20,.45); }
.s80-gf-chip::after { content: ""; position: absolute; inset: 0 38%; border-left: 1px solid rgba(120,90,20,.45); border-right: 1px solid rgba(120,90,20,.45); }
.s80-gf-no { position: absolute; left: 1.25em; top: 58%; font-family: "Courier New", monospace; font-weight: 700; font-size: 1.22em; letter-spacing: .08em; }
.s80-gf-name { position: absolute; left: 1.25em; bottom: .95em; right: 6em; font-size: .82em; font-weight: 600; text-transform: uppercase; letter-spacing: .06em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.s80-gf-copy { position: absolute; right: 1em; bottom: .8em; display: inline-flex; align-items: center; gap: .35em; padding: .38em .85em; border-radius: 99px; background: rgba(255,255,255,.85); color: #2b2b33; font-size: .76em; font-weight: 700; cursor: pointer; box-shadow: 0 .2em .6em rgba(0,0,0,.18); transition: background .2s; }
.s80-gf-copy.is-done { background: #1f8f4e; color: #fff; }
.s80-gf-emas .s80-gf-card { background: linear-gradient(135deg, #f7e7b4 0%, #d8b25a 40%, #f6e2a4 58%, #b98d34 100%); color: #3b2c0c; }
.s80-gf-gelap .s80-gf-card { background: linear-gradient(135deg, #2c2c34 0%, #16161b 60%, #33333d 100%); color: #f1f1f4; }
.s80-gf-gelap .s80-gf-bank { --bk: #fff; }
.s80-gf-gelap .s80-gf-copy { background: rgba(255,255,255,.14); color: #fff; }
.s80-gf-pastel .s80-gf-card { background: linear-gradient(135deg, var(--fal) 0%, #fff 60%, var(--fal) 100%); border: 1.5px solid var(--fa); }
.s80-gf-kaca .s80-gf-card { background: rgba(255,255,255,.22); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); border: 1px solid rgba(255,255,255,.55); color: var(--ft); }
.s80-gf-minimal .s80-gf-card { background: var(--fcard); border: 1.5px dashed var(--fa); box-shadow: none; aspect-ratio: auto; padding: 1em 1.1em; }
.s80-gf-minimal .s80-gf-shine, .s80-gf-minimal .s80-gf-chip { display: none; }
.s80-gf-minimal .s80-gf-bank, .s80-gf-minimal .s80-gf-no, .s80-gf-minimal .s80-gf-name, .s80-gf-minimal .s80-gf-copy { position: static; display: block; }
.s80-gf-minimal .s80-gf-no { margin: .3em 0 .15em; }
.s80-gf-minimal .s80-gf-copy { display: inline-flex; margin-top: .6em; background: var(--fa); color: #fff; }

/* ================= ANIMASI PER BAGIAN di elemen Fitur (UPDATE KE-122) =================
   Tiap bagian (data-fpi = urutan) muncul bergiliran: jeda = jeda elemen + urutan x --fps. Gerak Tampil hanya di pembungkus. */
.s80-fpa .s80-a[data-fpi] { --kloop: none; }
.s80-fpa [data-fpi="0"] { --lin: calc(var(--fpl, 0s) + 0 * var(--fps, .14s)); --lback: calc(0 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="1"] { --lin: calc(var(--fpl, 0s) + 1 * var(--fps, .14s)); --lback: calc(1 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="2"] { --lin: calc(var(--fpl, 0s) + 2 * var(--fps, .14s)); --lback: calc(2 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="3"] { --lin: calc(var(--fpl, 0s) + 3 * var(--fps, .14s)); --lback: calc(3 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="4"] { --lin: calc(var(--fpl, 0s) + 4 * var(--fps, .14s)); --lback: calc(4 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="5"] { --lin: calc(var(--fpl, 0s) + 5 * var(--fps, .14s)); --lback: calc(5 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="6"] { --lin: calc(var(--fpl, 0s) + 6 * var(--fps, .14s)); --lback: calc(6 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="7"] { --lin: calc(var(--fpl, 0s) + 7 * var(--fps, .14s)); --lback: calc(7 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="8"] { --lin: calc(var(--fpl, 0s) + 8 * var(--fps, .14s)); --lback: calc(8 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="9"] { --lin: calc(var(--fpl, 0s) + 9 * var(--fps, .14s)); --lback: calc(9 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="10"] { --lin: calc(var(--fpl, 0s) + 10 * var(--fps, .14s)); --lback: calc(10 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="11"] { --lin: calc(var(--fpl, 0s) + 11 * var(--fps, .14s)); --lback: calc(11 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="12"] { --lin: calc(var(--fpl, 0s) + 12 * var(--fps, .14s)); --lback: calc(12 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="13"] { --lin: calc(var(--fpl, 0s) + 13 * var(--fps, .14s)); --lback: calc(13 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="14"] { --lin: calc(var(--fpl, 0s) + 14 * var(--fps, .14s)); --lback: calc(14 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="15"] { --lin: calc(var(--fpl, 0s) + 15 * var(--fps, .14s)); --lback: calc(15 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="16"] { --lin: calc(var(--fpl, 0s) + 16 * var(--fps, .14s)); --lback: calc(16 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="17"] { --lin: calc(var(--fpl, 0s) + 17 * var(--fps, .14s)); --lback: calc(17 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="18"] { --lin: calc(var(--fpl, 0s) + 18 * var(--fps, .14s)); --lback: calc(18 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="19"] { --lin: calc(var(--fpl, 0s) + 19 * var(--fps, .14s)); --lback: calc(19 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="20"] { --lin: calc(var(--fpl, 0s) + 20 * var(--fps, .14s)); --lback: calc(20 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="21"] { --lin: calc(var(--fpl, 0s) + 21 * var(--fps, .14s)); --lback: calc(21 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="22"] { --lin: calc(var(--fpl, 0s) + 22 * var(--fps, .14s)); --lback: calc(22 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="23"] { --lin: calc(var(--fpl, 0s) + 23 * var(--fps, .14s)); --lback: calc(23 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="24"] { --lin: calc(var(--fpl, 0s) + 24 * var(--fps, .14s)); --lback: calc(24 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="25"] { --lin: calc(var(--fpl, 0s) + 25 * var(--fps, .14s)); --lback: calc(25 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="26"] { --lin: calc(var(--fpl, 0s) + 26 * var(--fps, .14s)); --lback: calc(26 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="27"] { --lin: calc(var(--fpl, 0s) + 27 * var(--fps, .14s)); --lback: calc(27 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="28"] { --lin: calc(var(--fpl, 0s) + 28 * var(--fps, .14s)); --lback: calc(28 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="29"] { --lin: calc(var(--fpl, 0s) + 29 * var(--fps, .14s)); --lback: calc(29 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="30"] { --lin: calc(var(--fpl, 0s) + 30 * var(--fps, .14s)); --lback: calc(30 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="31"] { --lin: calc(var(--fpl, 0s) + 31 * var(--fps, .14s)); --lback: calc(31 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="32"] { --lin: calc(var(--fpl, 0s) + 32 * var(--fps, .14s)); --lback: calc(32 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="33"] { --lin: calc(var(--fpl, 0s) + 33 * var(--fps, .14s)); --lback: calc(33 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="34"] { --lin: calc(var(--fpl, 0s) + 34 * var(--fps, .14s)); --lback: calc(34 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="35"] { --lin: calc(var(--fpl, 0s) + 35 * var(--fps, .14s)); --lback: calc(35 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="36"] { --lin: calc(var(--fpl, 0s) + 36 * var(--fps, .14s)); --lback: calc(36 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="37"] { --lin: calc(var(--fpl, 0s) + 37 * var(--fps, .14s)); --lback: calc(37 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="38"] { --lin: calc(var(--fpl, 0s) + 38 * var(--fps, .14s)); --lback: calc(38 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="39"] { --lin: calc(var(--fpl, 0s) + 39 * var(--fps, .14s)); --lback: calc(39 * var(--fps, .14s) * .6); }
.s80-fpa [data-fpi="40"] { --lin: calc(var(--fpl, 0s) + 40 * var(--fps, .14s)); --lback: calc(40 * var(--fps, .14s) * .6); }

/* ================= HALAMAN PANJANG (UPDATE KE-125) =================
   Di halaman yang dipanjangkan, animasi tiap bagian berjalan saat bagian itu terlihat (dipantau sendiri-sendiri),
   jadi jeda urutan halaman dibuat pendek supaya tidak menunggu lama. */
.s80-page.is-unitanim .s80-a:not([data-fpi]) { --lin: .08s !important; --lback: 0s !important; }
.s80-page.is-unitanim .s80-fpa { --fpl: .08s !important; }

/* Cermin / mirror elemen (UPDATE KE-129) */
.s80-el-mirror { width: 100%; height: 100%; }
.s80-el-text .s80-el-mirror { height: auto; }

/* ---------- Teks Diketik / Ditulis & Teks Berjalan (UPDATE KE-158) ---------- */
@keyframes s80TypeCh { from { opacity: 0; } to { opacity: 1; } }
@keyframes s80WriteCh { 0% { opacity: 0; filter: blur(5px); } 60% { opacity: .85; filter: blur(1px); } 100% { opacity: 1; filter: none; } }
/* KE-308: batas potong diperlebar (-40%) supaya ujung huruf script/italic (ekor 's', 'r', dll.) tidak terpotong setelah animasi selesai */
@keyframes s80WriteSweep { from { clip-path: inset(-40% 100% -40% -40%); opacity: .2; } 30% { opacity: 1; } to { clip-path: inset(-40% -40% -40% -40%); opacity: 1; } }
.s80-tch.s80-a { backface-visibility: visible; }
/* UPDATE KE-308: huruf per huruf (efek ketik/teks bertahap) -- tiap huruf jadi lapisan sendiri dan di HP (terutama iPhone)
   bagian huruf yang menjorok keluar kotaknya (ekor 's', 'r', 'g' font script) ikut terpotong. Kotak huruf diperlebar
   tanpa menggeser tata letak (padding + margin negatif yang sama) dan tidak dijadikan lapisan permanen. */
.s80-tch { padding: 0 .3em; margin: 0 -.3em; }
.s80-tch.s80-a, .s80-tch.s80-a.is-in, .s80-tch.s80-a.is-back { will-change: auto; }
.s80-el-text.is-mq { white-space: nowrap; overflow: hidden; -webkit-mask-image: linear-gradient(90deg, transparent 0, #000 7%, #000 93%, transparent 100%); mask-image: linear-gradient(90deg, transparent 0, #000 7%, #000 93%, transparent 100%); }
.s80-mq { display: inline-flex; white-space: nowrap; will-change: transform; animation: s80MqL 12s linear infinite; }
.s80-mq-r { animation-name: s80MqR; }
.s80-mq-i { flex: none; padding-right: 2.2em; }
@keyframes s80MqL { from { transform: translate3d(0, 0, 0); } to { transform: translate3d(-50%, 0, 0); } }
@keyframes s80MqR { from { transform: translate3d(-50%, 0, 0); } to { transform: translate3d(0, 0, 0); } }
@media (prefers-reduced-motion: reduce) { .s80-mq { animation-duration: 60s !important; } }

/* ---------- RSVP: gaya yang diatur sendiri (UPDATE KE-166) ----------
   Hanya aktif kalau pengguna mengubahnya; tanpa itu tampilan model template tetap seperti bawaan. */
.s80-rv.rvx-fh .s80-rv-head, .s80-rv.rvx-fh .s80-rv-wh b { font-family: var(--rv-fhead) !important; }
.s80-rv.rvx-fb .s80-rv-note, .s80-rv.rvx-fb .s80-rv-lbl, .s80-rv.rvx-fb .s80-rv-in, .s80-rv.rvx-fb .s80-rv-att span, .s80-rv.rvx-fb .s80-rv-events > label,
.s80-rv.rvx-fb .s80-rv-send, .s80-rv.rvx-fb .s80-rv-sum, .s80-rv.rvx-fb .s80-rv-item, .s80-rv.rvx-fb .s80-rv-status { font-family: var(--rv-fbody) !important; }
.s80-rv.rvx-hs .s80-rv-head { font-size: calc(2em * var(--rv-hs, 1)) !important; }
.s80-rv.rvx-al-left .s80-rv-head, .s80-rv.rvx-al-left .s80-rv-note { text-align: left !important; }
.s80-rv.rvx-al-center .s80-rv-head, .s80-rv.rvx-al-center .s80-rv-note { text-align: center !important; }
.s80-rv.rvx-ls .s80-rv-in, .s80-rv.rvx-ls .s80-rv-att span, .s80-rv.rvx-ls .s80-rv-item { border-style: var(--rv-ls) !important; }
.s80-rv.rvx-ls .s80-rv-wh { border-top-style: var(--rv-ls) !important; }
.s80-rv.rvx-lw .s80-rv-att span, .s80-rv.rvx-lw .s80-rv-item { border-width: var(--rv-lw) !important; }
.s80-rv.rvx-lw .s80-rv-wh { border-top-width: var(--rv-lw) !important; }
.s80-rv.rvx-f-box .s80-rv-in { border-width: var(--rv-lw, 1px) !important; }
.s80-rv.rvx-f-box.rvx-fset .s80-rv-in { padding: .7em .85em !important; border-radius: .55em; }
.s80-rv.rvx-f-line .s80-rv-in { border-width: 0 0 var(--rv-lw, 1px) !important; border-radius: 0 !important; padding: .56em .15em !important; }
.s80-rv.rvx-f-line.rvx-fset .s80-rv-att span { border-width: 0 0 var(--rv-lw, 1px) !important; border-radius: 0 !important; }
.s80-rv.rvx-rad .s80-rv-att span, .s80-rv.rvx-rad .s80-rv-item, .s80-rv.rvx-rad .s80-rv-send { border-radius: var(--rv-rad) !important; }
.s80-rv.rvx-rad.rvx-f-box .s80-rv-in, .s80-rv.rvx-rad:not(.rvx-f-line) .s80-rv-in { border-radius: var(--rv-rad) !important; }
.s80-rv.rvx-b-square .s80-rv-send { border-radius: 0 !important; }
.s80-rv.rvx-b-round .s80-rv-send { border-radius: .6em !important; }
.s80-rv.rvx-b-pill .s80-rv-send { border-radius: 99px !important; }

/* ---------- Teks Geser (UPDATE KE-169) ---------- */
.s80-el-slide .s80-el-inner { height: auto; }
.s80-sl { position: relative; color: var(--ft); text-align: center; }
.s80-sl-head { font-family: var(--ffs); font-size: 2.2em; line-height: 1.2; color: var(--fa); margin-bottom: .4em; }
.s80-sl-vp { position: relative; overflow: hidden; touch-action: pan-y; user-select: none; -webkit-user-select: none; }
.s80-sl-tr { display: flex; align-items: stretch; transition: transform .55s cubic-bezier(.22,.7,.2,1); will-change: transform; }
.s80-sl-it { flex: 0 0 100%; min-width: 0; box-sizing: border-box; padding: .2em .6em; display: flex; flex-direction: column; justify-content: flex-start; }
.s80-sl-d { font-family: var(--fft); font-size: 1.12em; color: var(--fad); margin-bottom: .7em; letter-spacing: .01em; }
.s80-sl-t { font-family: var(--fft); font-size: 1em; line-height: 1.75; color: var(--ft); opacity: .88; overflow-wrap: anywhere; }
.s80-sl-al-left .s80-sl-it { text-align: left; }
.s80-sl-al-justify .s80-sl-t { text-align: justify; }
.s80-sl-al-justify .s80-sl-d { text-align: center; }
.s80-sl-dots { display: flex; justify-content: center; align-items: center; gap: .42em; margin-top: 1.1em; min-height: 8px; }
.s80-sl-dots i { display: block; width: 4px; height: 4px; border-radius: 50%; background: var(--ft); opacity: .18; transition: all .35s; cursor: pointer; flex: none; }
.s80-sl-dots i.is-on { width: 7px; height: 7px; opacity: .95; background: var(--fad); }
.s80-sl-dots i.is-n1 { width: 5px; height: 5px; opacity: .35; }
.s80-sl-dots i.is-n2 { opacity: .22; }
.s80-sl-dots i.is-n3 { width: 3px; height: 3px; opacity: .12; }
.s80-sl-ar { position: absolute; top: 50%; transform: translateY(-50%); width: 1.9em; height: 1.9em; border-radius: 50%; border: 1px solid var(--fline); background: var(--fcard); color: var(--fad); font: 400 1.3em/1 serif; display: flex; align-items: center; justify-content: center; padding: 0 0 .12em; cursor: pointer; z-index: 2; box-shadow: 0 2px 8px rgba(0,0,0,.08); }
.s80-sl-ar.is-prev { left: 0; } .s80-sl-ar.is-next { right: 0; }
.s80-sl:has(.s80-sl-ar) .s80-sl-it { padding-left: 2.4em; padding-right: 2.4em; }
/* model */
.s80-sl-box { flex: 1; display: flex; flex-direction: column; }
.s80-sl-kartu .s80-sl-it { padding: .3em .5em .9em; }
.s80-sl-kartu .s80-sl-box { background: var(--fcard); border-radius: 1em; padding: 1.1em 1.15em 1.2em; box-shadow: 0 4px 14px rgba(0,0,0,.07); border: 1px solid var(--fline); }
.s80-sl-kartu .s80-sl-d { font-weight: 600; color: var(--fa); margin-bottom: .55em; }
.s80-sl-kutip .s80-sl-q { display: block; font-family: Georgia, serif; font-size: 4em; line-height: .7; color: var(--fa); opacity: .35; height: .45em; margin-bottom: .1em; }
.s80-sl-kutip .s80-sl-t { font-style: italic; }
.s80-sl-kutip .s80-sl-d { order: 2; margin: .8em 0 0; font-size: .9em; letter-spacing: .08em; text-transform: uppercase; color: var(--fa); }
.s80-sl-garis .s80-sl-it { text-align: left; border-left: 2px solid var(--fa); padding-left: 1em; margin-left: .3em; flex-basis: calc(100% - .3em); }
.s80-sl-garis .s80-sl-d { color: var(--fa); font-weight: 600; }
.s80-sl-bingkai .s80-sl-vp { border: 1px solid var(--fline); outline: 1px solid var(--fline); outline-offset: -6px; padding: 1.3em .4em 1.1em; border-radius: .2em; }
.s80-sl-bingkai .s80-sl-d { letter-spacing: .12em; text-transform: uppercase; font-size: .85em; color: var(--fa); }
.s80-sl-script .s80-sl-d { font-family: var(--ffs); font-size: 2em; line-height: 1.15; color: var(--fa); margin-bottom: .35em; }

/* ---------- Kartu Rekening koleksi "Minimalist Elegant" (UPDATE KE-171) — tanpa latar ---------- */
.s80-gfe { text-align: center; color: var(--ft); font-family: var(--gfe-t); }
.s80-gfe-head { position: relative; display: block; color: var(--fa); line-height: 1; margin: 0 auto .5em; padding-top: .1em; }
.s80-gfe-w1, .s80-gfe-w2 { display: inline-block; }
.s80-gfe-svg { width: 100%; height: 100%; display: block; }
.s80-gfe-orn { width: .9em; height: .9em; color: var(--fa); }
.s80-gfe-note { font-size: .86em; line-height: 1.55; color: var(--ft); opacity: .85; max-width: 25em; margin: 0 auto .9em; }
/* judul per model */
.s80-gfe-h-scr2 .s80-gfe-w1 { font-family: var(--gfe-s); font-size: 4.1em; display: block; margin-left: -1.6em; }
.s80-gfe-h-scr2 .s80-gfe-w2 { font-family: var(--gfe-b); font-size: 3.2em; margin: -.42em 0 0 1.1em; }
.s80-gfe-hrt { width: 1.6em; height: 1.6em; color: var(--fa); vertical-align: -.1em; margin-left: .1em; }
.s80-gfe-hrt.is-big { position: absolute; right: 12%; top: 1.6em; width: 1.6em; height: 2.6em; }
.s80-gfe-h-capsBig .s80-gfe-w1 { font-family: var(--gfe-s); font-size: 1.15em; letter-spacing: .5em; display: block; padding-left: .5em; margin-bottom: .1em; }
.s80-gfe-h-capsBig .s80-gfe-w2 { font-family: var(--gfe-b); font-size: 3.6em; line-height: 1.05; }
.s80-gfe-h-capsBig .s80-gfe-orn { width: 1.4em; height: 1.4em; margin-left: .15em; vertical-align: .9em; }
.s80-gfe-deco.is-ul { display: block; width: 9em; height: .8em; margin: 0 auto; color: var(--fa); }
.s80-gfe-h-scrCaps .s80-gfe-w1 { font-family: var(--gfe-s); font-size: 4em; display: block; }
.s80-gfe-h-scrCaps .s80-gfe-w2 { font-family: var(--gfe-b); font-size: 1.9em; letter-spacing: .2em; text-transform: uppercase; margin-top: -.35em; }
.s80-gfe-h-serifLine .s80-gfe-w1, .s80-gfe-h-serifLine .s80-gfe-w2 { font-family: var(--gfe-s); font-size: 3em; font-weight: 500; letter-spacing: -.01em; margin: 0 .1em; }
.s80-gfe-div { display: flex; align-items: center; justify-content: center; gap: .5em; margin-top: .35em; color: var(--fa); }
.s80-gfe-div i { width: 5.5em; height: 1px; background: currentColor; opacity: .8; }
.s80-gfe-div svg { width: 1em; height: 1em; }
.s80-gfe-h-scrSerifBow .s80-gfe-w1 { font-family: var(--gfe-s); font-size: 3.8em; }
.s80-gfe-h-scrSerifBow .s80-gfe-w2 { font-family: var(--gfe-b); font-size: 2.6em; margin-left: .15em; }
.s80-gfe-bow { display: block; width: 9em; height: 2.2em; margin: -.3em auto 0; color: var(--fa); }
.s80-gfe-bow.is-swoosh { width: 12em; height: 2.6em; margin-top: -1.2em; }
.s80-gfe-capl { display: flex; align-items: center; justify-content: center; gap: .6em; }
.s80-gfe-capl i { flex: 1; max-width: 4em; height: 1px; background: currentColor; }
.s80-gfe-h-capsLines .s80-gfe-w1 { font-family: var(--gfe-s); font-size: 1.2em; letter-spacing: .45em; padding-left: .45em; }
.s80-gfe-h-capsLines .s80-gfe-w2 { font-family: var(--gfe-b); font-size: 3.7em; font-weight: 600; line-height: 1.05; }
.s80-gfe-h-capsLines .s80-gfe-div { margin-top: .1em; }
.s80-gfe-h-capsLines .s80-gfe-div i { width: 3em; }
.s80-gfe-h-scrSerifHearts .s80-gfe-w1 { font-family: var(--gfe-s); font-size: 4em; }
.s80-gfe-h-scrSerifHearts .s80-gfe-w2 { font-family: var(--gfe-b); font-size: 2.8em; margin-left: .15em; font-weight: 500; }
.s80-gfe-top { display: block; width: 8em; height: 1.2em; margin: 0 auto .1em; color: var(--fa); }
.s80-gfe-h-ornBig .s80-gfe-w1 { font-family: var(--gfe-s); font-size: 3.6em; font-weight: 600; display: block; }
.s80-gfe-h-ornBig .s80-gfe-w2 { font-family: var(--gfe-b); font-size: 1.5em; letter-spacing: .35em; padding-left: .35em; display: inline-flex; align-items: center; gap: .6em; margin-top: .05em; }
.s80-gfe-h-ornBig .s80-gfe-w2::before, .s80-gfe-h-ornBig .s80-gfe-w2::after { content: ""; width: 2.4em; height: 1px; background: currentColor; }
.s80-gfe-h-capsScr .s80-gfe-w1 { font-family: var(--gfe-s); font-size: 1.35em; letter-spacing: .22em; vertical-align: .9em; }
.s80-gfe-h-capsScr .s80-gfe-w2 { font-family: var(--gfe-b); font-size: 3.9em; margin-left: .1em; }
.s80-gfe-h-scrAll .s80-gfe-w1, .s80-gfe-h-scrAll .s80-gfe-w2 { font-family: var(--gfe-s); font-size: 3.9em; margin: 0 .05em; }
.s80-gfe-orn.is-l { position: absolute; left: 6%; top: .6em; width: 1.3em; height: 1.3em; }
.s80-gfe-orn.is-r { position: absolute; left: 40%; bottom: -.3em; width: 1em; height: 1em; }
/* kartu */
.s80-gfe-card { position: relative; display: flex; align-items: center; gap: .85em; width: 100%; max-width: 24em; min-height: 5.3em; margin: 0 auto .8em; padding: .75em 3em .75em 1.5em; box-sizing: border-box; text-align: left; color: var(--ft); }
.s80-gfe-fr { position: absolute; inset: 0; width: 100%; height: 100%; overflow: visible; pointer-events: none; }
.s80-gfe-fr path { fill: none; stroke: var(--fa); stroke-width: 1.6; vector-effect: non-scaling-stroke; }
.s80-gfe-fr path.is-in { stroke-width: .9; }
.s80-gfe-f-pill .s80-gfe-card, .s80-gfe-f-pill2 .s80-gfe-card { border: 1.6px solid var(--fa); border-radius: 99em; }
.s80-gfe-f-pill2 .s80-gfe-card { outline: 1px solid var(--fa); outline-offset: -5px; }
.s80-gfe-f-bar .s80-gfe-card { border: 1.6px solid var(--fa); border-radius: .75em; padding-left: 1.9em; }
.s80-gfe-f-bar .s80-gfe-card::before { content: ""; position: absolute; left: .55em; top: .7em; bottom: .7em; width: 3px; border-radius: 3px; background: var(--fa); }
.s80-gfe-f-chamfer .s80-gfe-fr path:not(.is-in) { stroke-width: 2.2; }
.s80-gfe-f-hex .s80-gfe-card { padding-left: 2.2em; padding-right: 3.4em; }
.s80-gfe-ic { flex: none; width: 2.5em; height: 2.5em; color: var(--fa); display: flex; align-items: center; justify-content: center; }
.s80-gfe-card.is-circ .s80-gfe-ic { width: 3.2em; height: 3.2em; border: 1.5px solid var(--fa); border-radius: 50%; padding: .55em; box-sizing: border-box; }
.s80-gfe-tx { min-width: 0; flex: 1; line-height: 1.25; }
.s80-gfe-l1 { font-family: var(--gfe-t); font-size: 1.12em; font-weight: 500; }
.s80-gfe-l2 { font-family: var(--gfe-t); font-size: 1.12em; letter-spacing: .03em; }
.s80-gfe-l3 { font-family: var(--gfe-t); font-size: .8em; opacity: .9; margin-top: .1em; }
.s80-gfe-card:has(.s80-gfe-l1[data-fr="aname"]) .s80-gfe-l2 { font-size: .8em; letter-spacing: 0; margin-top: .15em; }
.s80-gfe .s80-gf-copy.s80-gfe-cp { position: absolute; right: 1.15em; top: 50%; bottom: auto; transform: translateY(-50%); width: 1.35em; height: 1.35em; padding: 0; background: none; border-radius: 0; color: var(--fa); display: block; box-shadow: none; cursor: pointer; }
.s80-gfe .s80-gf-copy.s80-gfe-cp svg { width: 100%; height: 100%; display: block; }
.s80-gfe .s80-gf-copy.s80-gfe-cp.is-done { background: none; color: #1f8f4e; }
.s80-gfe-f-hex .s80-gf-copy.s80-gfe-cp { right: 1.9em; }
/* jenis hadiah */
.s80-gfe-type { max-width: 24em; margin: .4em auto 0; text-align: left; padding: 0 .9em; }
.s80-gfe-tl { font-family: var(--gfe-t); font-size: 1.05em; color: var(--fa); margin-bottom: .4em; }
.s80-gfe-ti { display: flex; align-items: center; gap: .7em; margin: 0 0 .45em; font-size: .92em; cursor: pointer; }
.s80-gfe-ti input { position: absolute; opacity: 0; width: 0; height: 0; }
.s80-gfe-cb { flex: none; width: 1.15em; height: 1.15em; border: 1.4px solid var(--fa); border-radius: .2em; position: relative; }
.s80-gfe-ti input:checked + .s80-gfe-cb { background: var(--fa); }
.s80-gfe-ti input:checked + .s80-gfe-cb::after { content: ""; position: absolute; left: .32em; top: .1em; width: .3em; height: .58em; border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(45deg); }
.s80-gfe-tic { flex: none; width: 1.55em; height: 1.55em; color: var(--fa); }
/* ukuran ikon/garis Minimalist Elegant (mengalahkan aturan umum .s80-el .s80-ft svg) */
.s80-el .s80-gfe svg.s80-gfe-fr { position: absolute; inset: 0; width: 100%; height: 100%; display: block; vertical-align: top; }
.s80-el .s80-gfe svg.s80-gfe-svg { width: 100%; height: 100%; display: block; }
.s80-el .s80-gfe svg.s80-gfe-tic { width: 1.55em; height: 1.55em; display: block; }
.s80-el .s80-gfe svg.s80-gfe-orn { width: .9em; height: .9em; }
.s80-el .s80-gfe .s80-gfe-h-capsBig svg.s80-gfe-orn { width: 1.4em; height: 1.4em; vertical-align: .9em; }
.s80-el .s80-gfe svg.s80-gfe-orn.is-l { width: 1.3em; height: 1.3em; }
.s80-el .s80-gfe svg.s80-gfe-orn.is-r { width: 1em; height: 1em; }
.s80-el .s80-gfe svg.s80-gfe-hrt { width: 1.6em; height: 1.6em; }
.s80-el .s80-gfe svg.s80-gfe-hrt.is-big { width: 1.6em; height: 2.6em; }
.s80-el .s80-gfe svg.s80-gfe-deco.is-ul { display: block; width: 9em; height: .8em; }
.s80-el .s80-gfe svg.s80-gfe-bow { display: block; width: 9em; height: 2.2em; }
.s80-el .s80-gfe svg.s80-gfe-bow.is-swoosh { width: 12em; height: 2.6em; }
.s80-el .s80-gfe svg.s80-gfe-top { display: block; width: 8em; height: 1.2em; }
.s80-el .s80-gfe .s80-gfe-div svg { width: 1em; height: 1em; display: block; }
.s80-el .s80-gfe .s80-gfe-cp svg { width: 100%; height: 100%; display: block; }

/* Tertahan saat digulir (UPDATE KE-177) */
.s80-page.has-stk { overflow: clip; }   /* KE-180: overflow:clip tetap memotong tepi halaman tapi tidak mematikan position:sticky */
.s80-page.s80-stk-frame::before, .s80-page.s80-stk-frame::after { display: none !important; }
.s80-stk-frame .s80-el { pointer-events: auto; }
.s80-b.is-pinned-ed { position: relative; }
.s80-b.is-pinned-ed::after { content: "\1F4CC"; position: absolute; top: -9px; right: -9px; width: 20px; height: 20px; border-radius: 50%; background: #fff; box-shadow: 0 1px 4px rgba(0,0,0,.25); font-size: 11px; line-height: 20px; text-align: center; pointer-events: none; z-index: 5; font-style: normal; letter-spacing: 0; }
.s80-el.is-pinned-ed::after { content: "\1F4CC"; position: absolute; top: -9px; right: -9px; width: 20px; height: 20px; border-radius: 50%; background: #fff; box-shadow: 0 1px 4px rgba(0,0,0,.25); font-size: 11px; line-height: 20px; text-align: center; pointer-events: none; z-index: 5; }

/* tombol buka undangan / Tap Here: diklik berkali-kali tidak memblok tulisan (UPDATE KE-184) */
.s80-page.is-live [data-openbtn], .s80-page.is-live [data-s80-open-next], .s80-page.is-live .s80-btn { -webkit-user-select: none; user-select: none; -webkit-tap-highlight-color: transparent; }

/* ===== UPDATE KE-259: RSVP koleksi Hitam Putih ===== */
.s80-rvb { color: var(--rvb-txt); font-size: 13px; }
.s80-rvb .s80-rv-form { display: flex; flex-direction: column; gap: 10px; margin: 0; }
.s80-rvb-att { display: flex; gap: 8px; justify-content: space-between; }
.s80-rvb-att label { flex: 1; display: flex; justify-content: center; cursor: pointer; margin: 0; }
.s80-rvb-att input { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; }
.s80-rvb-ch { position: relative; display: flex; align-items: center; justify-content: center; width: 100%; height: 40px; border: 1.3px solid var(--rvb-line); border-radius: 999px; background: var(--rvb-bg); color: var(--rvb-ink); transition: background .2s, color .2s; }
.s80-rvb-ch svg { position: relative; z-index: 1; width: 20px; height: 20px; }
.s80-rvb-att input:checked + .s80-rvb-ch { background: var(--rvb-ink); border-color: var(--rvb-ink); color: #fff; }
.s80-rvb-circle .s80-rvb-ch { width: 46px; height: 46px; border-radius: 50%; }
.s80-rvb-oct .s80-rvb-ch, .s80-rvb-hex .s80-rvb-ch { border: 0 !important; background: transparent !important; }
.s80-rvb-oct .s80-rvb-ch { height: 44px; }
.s80-rvb-ch > .s80-rvb-shp { position: absolute !important; left: 0; top: 0; width: 100% !important; height: 100% !important; z-index: 0 !important; overflow: visible; }
.s80-rvb-shp polygon { fill: var(--rvb-bg); stroke: var(--rvb-line); stroke-width: 1.3; transition: fill .2s, stroke .2s; }
.s80-rvb-att input:checked + .s80-rvb-ch .s80-rvb-shp polygon { fill: var(--rvb-ink); stroke: var(--rvb-ink); }
.s80-rv.s80-rvb .s80-rvb-ch > svg:not(.s80-rvb-shp) { width: 20px !important; height: 20px !important; position: relative; z-index: 1; }
.s80-rv.s80-rvb .s80-rvb-row > svg { width: 17px !important; height: 17px !important; }
.s80-rv.s80-rvb .s80-rvb-send { background: var(--rvb-ink) !important; color: #fff !important; border: 0 !important; height: 42px !important; width: 100% !important; padding: 0 !important; border-radius: 999px !important; display: flex !important; align-items: center; justify-content: center; box-shadow: none !important; }
.s80-rv.s80-rvb.s80-rvb-hexsend .s80-rvb-send { border-radius: 0 !important; }
.s80-rv.s80-rvb .s80-rvb-send svg { width: 20px !important; height: 20px !important; }
.s80-rvb-row { display: flex; align-items: center; gap: 8px; height: 38px; padding: 0 14px; margin: 0; border: 1.3px solid var(--rvb-line); border-radius: 999px; background: var(--rvb-bg); color: var(--rvb-ink); }
.s80-rvb-row > svg { width: 17px; height: 17px; flex: none; }
.s80-rvb-row .s80-rv-in { flex: 1; min-width: 0; height: 100%; border: 0 !important; background: transparent !important; padding: 0 !important; margin: 0; color: var(--rvb-txt); font: inherit; outline: none; box-shadow: none !important; -webkit-appearance: none; appearance: none; }
.s80-rvb-row .s80-rv-in::placeholder { color: var(--rvb-txt); opacity: .55; }
.s80-rvb-msg { height: auto; padding: 8px 14px; border-radius: 18px; }
.s80-rvb-msg textarea { resize: none; min-height: 40px; }
.s80-rvb .s80-rv-form.is-nopax .s80-rv-paxw { display: none; }
.s80-rvb-send { display: flex; align-items: center; justify-content: center; height: 42px; width: 100%; margin: 2px 0 0; border: 0; border-radius: 999px; background: var(--rvb-ink); color: #fff; cursor: pointer; }
.s80-rvb-send svg { width: 20px; height: 20px; }
.s80-rvb-hexsend .s80-rvb-send { border-radius: 0; clip-path: polygon(6% 0, 94% 0, 100% 50%, 94% 100%, 6% 100%, 0 50%); }
.s80-rvb .s80-rv-status { font-size: 12px; text-align: center; min-height: 0; }
.s80-rvb .s80-rv-status:empty { display: none; }

/* Baris baru tersimpan di editor, preview, dan undangan. */
[data-edit], .s80-el [data-fr],
.s80-el-text { white-space: pre-line; }

/* Rounded Minimal RSVP: tanpa latar panel, mengikuti desain kanvas. */
.s80-rv-roundedform { padding:0!important; background:transparent!important; border:0!important; box-shadow:none!important; font-family:var(--rv-fbody,var(--fft)); }
.s80-rv-roundedform .s80-rv-form { display:flex; flex-direction:column; gap:13px; padding:0; margin:0; }
.s80-rv-roundedform .s80-rv-in { box-sizing:border-box; display:block; width:100%; min-width:0; height:38px; margin:0; padding:0 11px; border:1px solid var(--rv-line); border-radius:11px; background:var(--rv-field); color:var(--rv-text); font:inherit; font-size:.88em; box-shadow:none; }
.s80-rv-roundedform .s80-rv-in::placeholder { color:var(--rv-text); opacity:.7; }
.s80-rv-roundedform .s80-rv-in:focus { outline:1px solid var(--rv-text); outline-offset:2px; }
.s80-rv-roundedform .s80-rv-phone-row { display:flex; gap:7px; min-width:0; }
.s80-rv-roundedform .s80-rv-code { flex:0 0 64px; padding:0 7px; font-size:.75em; }
.s80-rv-roundedform .s80-rv-phone-row input { flex:1; }
.s80-rv-roundedform .s80-rv-send { width:100%; min-height:36px; margin:0; padding:9px 16px; border:0; border-radius:999px; background:var(--rv-button); color:var(--rv-button-text); box-shadow:none; font:inherit; }
.s80-rv-roundedform .s80-rv-status:empty { display:none; }

/* V18: native auto scroll uses one position for backgrounds and page content. */
.s80-auto-scrolling { scroll-behavior: auto !important; scroll-snap-type: none !important; overflow-anchor: none; }

/* Tertiup angin (UPDATE KE-286): bergoyang lentur seperti tertiup angin.
   Gabungan putar + lentur (skew) yang sedikit tertinggal, jadi ujungnya bergerak "letoy", tidak kaku.
   Titik tumpu: atas (menggantung, mis. untaian melati) atau bawah (tumbuhan / bunga). */
.s80-a { transform-origin: var(--oloop, 50% 50%); }
@keyframes s80WindHang {
  0% { transform: rotate(calc(var(--aloopd, 5deg) * 0.0000 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0000 * var(--s80amp, 1))); }
  2.0833% { transform: rotate(calc(var(--aloopd, 5deg) * 0.1738 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.0270 * var(--s80amp, 1))); }
  4.1667% { transform: rotate(calc(var(--aloopd, 5deg) * 0.3381 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.0307 * var(--s80amp, 1))); }
  6.25% { transform: rotate(calc(var(--aloopd, 5deg) * 0.4844 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.0134 * var(--s80amp, 1))); }
  8.3333% { transform: rotate(calc(var(--aloopd, 5deg) * 0.6059 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0208 * var(--s80amp, 1))); }
  10.4167% { transform: rotate(calc(var(--aloopd, 5deg) * 0.6983 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0665 * var(--s80amp, 1))); }
  12.5% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7598 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.1171 * var(--s80amp, 1))); }
  14.5833% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7916 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.1658 * var(--s80amp, 1))); }
  16.6667% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7967 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.2055 * var(--s80amp, 1))); }
  18.75% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7803 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.2298 * var(--s80amp, 1))); }
  20.8333% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7482 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.2335 * var(--s80amp, 1))); }
  22.9167% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7063 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.2128 * var(--s80amp, 1))); }
  25% { transform: rotate(calc(var(--aloopd, 5deg) * 0.6600 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.1656 * var(--s80amp, 1))); }
  27.0833% { transform: rotate(calc(var(--aloopd, 5deg) * 0.6132 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0920 * var(--s80amp, 1))); }
  29.1667% { transform: rotate(calc(var(--aloopd, 5deg) * 0.5682 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.0060 * var(--s80amp, 1))); }
  31.25% { transform: rotate(calc(var(--aloopd, 5deg) * 0.5258 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.1244 * var(--s80amp, 1))); }
  33.3333% { transform: rotate(calc(var(--aloopd, 5deg) * 0.4850 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.2574 * var(--s80amp, 1))); }
  35.4167% { transform: rotate(calc(var(--aloopd, 5deg) * 0.4438 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.3977 * var(--s80amp, 1))); }
  37.5% { transform: rotate(calc(var(--aloopd, 5deg) * 0.3998 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.5374 * var(--s80amp, 1))); }
  39.5833% { transform: rotate(calc(var(--aloopd, 5deg) * 0.3505 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.6679 * var(--s80amp, 1))); }
  41.6667% { transform: rotate(calc(var(--aloopd, 5deg) * 0.2941 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.7808 * var(--s80amp, 1))); }
  43.75% { transform: rotate(calc(var(--aloopd, 5deg) * 0.2298 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.8686 * var(--s80amp, 1))); }
  45.8333% { transform: rotate(calc(var(--aloopd, 5deg) * 0.1581 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.9248 * var(--s80amp, 1))); }
  47.9167% { transform: rotate(calc(var(--aloopd, 5deg) * 0.0806 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.9447 * var(--s80amp, 1))); }
  50% { transform: rotate(calc(var(--aloopd, 5deg) * 0.0000 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.9256 * var(--s80amp, 1))); }
  52.0833% { transform: rotate(calc(var(--aloopd, 5deg) * -0.0806 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.8671 * var(--s80amp, 1))); }
  54.1667% { transform: rotate(calc(var(--aloopd, 5deg) * -0.1581 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.7709 * var(--s80amp, 1))); }
  56.25% { transform: rotate(calc(var(--aloopd, 5deg) * -0.2298 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.6411 * var(--s80amp, 1))); }
  58.3333% { transform: rotate(calc(var(--aloopd, 5deg) * -0.2941 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.4836 * var(--s80amp, 1))); }
  60.4167% { transform: rotate(calc(var(--aloopd, 5deg) * -0.3505 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.3061 * var(--s80amp, 1))); }
  62.5% { transform: rotate(calc(var(--aloopd, 5deg) * -0.3998 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.1171 * var(--s80amp, 1))); }
  64.5833% { transform: rotate(calc(var(--aloopd, 5deg) * -0.4438 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0738 * var(--s80amp, 1))); }
  66.6667% { transform: rotate(calc(var(--aloopd, 5deg) * -0.4850 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.2574 * var(--s80amp, 1))); }
  68.75% { transform: rotate(calc(var(--aloopd, 5deg) * -0.5258 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.4247 * var(--s80amp, 1))); }
  70.8333% { transform: rotate(calc(var(--aloopd, 5deg) * -0.5682 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.5681 * var(--s80amp, 1))); }
  72.9167% { transform: rotate(calc(var(--aloopd, 5deg) * -0.6132 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.6813 * var(--s80amp, 1))); }
  75% { transform: rotate(calc(var(--aloopd, 5deg) * -0.6600 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.7600 * var(--s80amp, 1))); }
  77.0833% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7063 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.8021 * var(--s80amp, 1))); }
  79.1667% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7482 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.8076 * var(--s80amp, 1))); }
  81.25% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7803 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.7789 * var(--s80amp, 1))); }
  83.3333% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7967 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.7202 * var(--s80amp, 1))); }
  85.4167% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7916 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.6373 * var(--s80amp, 1))); }
  87.5% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7598 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.5374 * var(--s80amp, 1))); }
  89.5833% { transform: rotate(calc(var(--aloopd, 5deg) * -0.6983 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.4283 * var(--s80amp, 1))); }
  91.6667% { transform: rotate(calc(var(--aloopd, 5deg) * -0.6059 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.3180 * var(--s80amp, 1))); }
  93.75% { transform: rotate(calc(var(--aloopd, 5deg) * -0.4844 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.2140 * var(--s80amp, 1))); }
  95.8333% { transform: rotate(calc(var(--aloopd, 5deg) * -0.3381 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.1231 * var(--s80amp, 1))); }
  97.9167% { transform: rotate(calc(var(--aloopd, 5deg) * -0.1738 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0506 * var(--s80amp, 1))); }
  100% { transform: rotate(calc(var(--aloopd, 5deg) * -0.0000 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0000 * var(--s80amp, 1))); }
}
@keyframes s80WindGrow {
  0% { transform: rotate(calc(var(--aloopd, 5deg) * 0.0000 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0000 * var(--s80amp, 1))); }
  2.0833% { transform: rotate(calc(var(--aloopd, 5deg) * 0.1738 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.0270 * var(--s80amp, 1))); }
  4.1667% { transform: rotate(calc(var(--aloopd, 5deg) * 0.3381 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.0307 * var(--s80amp, 1))); }
  6.25% { transform: rotate(calc(var(--aloopd, 5deg) * 0.4844 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.0134 * var(--s80amp, 1))); }
  8.3333% { transform: rotate(calc(var(--aloopd, 5deg) * 0.6059 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0208 * var(--s80amp, 1))); }
  10.4167% { transform: rotate(calc(var(--aloopd, 5deg) * 0.6983 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0665 * var(--s80amp, 1))); }
  12.5% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7598 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.1171 * var(--s80amp, 1))); }
  14.5833% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7916 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.1658 * var(--s80amp, 1))); }
  16.6667% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7967 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.2055 * var(--s80amp, 1))); }
  18.75% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7803 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.2298 * var(--s80amp, 1))); }
  20.8333% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7482 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.2335 * var(--s80amp, 1))); }
  22.9167% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7063 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.2128 * var(--s80amp, 1))); }
  25% { transform: rotate(calc(var(--aloopd, 5deg) * 0.6600 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.1656 * var(--s80amp, 1))); }
  27.0833% { transform: rotate(calc(var(--aloopd, 5deg) * 0.6132 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0920 * var(--s80amp, 1))); }
  29.1667% { transform: rotate(calc(var(--aloopd, 5deg) * 0.5682 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.0060 * var(--s80amp, 1))); }
  31.25% { transform: rotate(calc(var(--aloopd, 5deg) * 0.5258 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.1244 * var(--s80amp, 1))); }
  33.3333% { transform: rotate(calc(var(--aloopd, 5deg) * 0.4850 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.2574 * var(--s80amp, 1))); }
  35.4167% { transform: rotate(calc(var(--aloopd, 5deg) * 0.4438 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.3977 * var(--s80amp, 1))); }
  37.5% { transform: rotate(calc(var(--aloopd, 5deg) * 0.3998 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.5374 * var(--s80amp, 1))); }
  39.5833% { transform: rotate(calc(var(--aloopd, 5deg) * 0.3505 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.6679 * var(--s80amp, 1))); }
  41.6667% { transform: rotate(calc(var(--aloopd, 5deg) * 0.2941 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.7808 * var(--s80amp, 1))); }
  43.75% { transform: rotate(calc(var(--aloopd, 5deg) * 0.2298 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.8686 * var(--s80amp, 1))); }
  45.8333% { transform: rotate(calc(var(--aloopd, 5deg) * 0.1581 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.9248 * var(--s80amp, 1))); }
  47.9167% { transform: rotate(calc(var(--aloopd, 5deg) * 0.0806 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.9447 * var(--s80amp, 1))); }
  50% { transform: rotate(calc(var(--aloopd, 5deg) * 0.0000 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.9256 * var(--s80amp, 1))); }
  52.0833% { transform: rotate(calc(var(--aloopd, 5deg) * -0.0806 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.8671 * var(--s80amp, 1))); }
  54.1667% { transform: rotate(calc(var(--aloopd, 5deg) * -0.1581 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.7709 * var(--s80amp, 1))); }
  56.25% { transform: rotate(calc(var(--aloopd, 5deg) * -0.2298 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.6411 * var(--s80amp, 1))); }
  58.3333% { transform: rotate(calc(var(--aloopd, 5deg) * -0.2941 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.4836 * var(--s80amp, 1))); }
  60.4167% { transform: rotate(calc(var(--aloopd, 5deg) * -0.3505 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.3061 * var(--s80amp, 1))); }
  62.5% { transform: rotate(calc(var(--aloopd, 5deg) * -0.3998 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * -0.1171 * var(--s80amp, 1))); }
  64.5833% { transform: rotate(calc(var(--aloopd, 5deg) * -0.4438 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0738 * var(--s80amp, 1))); }
  66.6667% { transform: rotate(calc(var(--aloopd, 5deg) * -0.4850 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.2574 * var(--s80amp, 1))); }
  68.75% { transform: rotate(calc(var(--aloopd, 5deg) * -0.5258 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.4247 * var(--s80amp, 1))); }
  70.8333% { transform: rotate(calc(var(--aloopd, 5deg) * -0.5682 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.5681 * var(--s80amp, 1))); }
  72.9167% { transform: rotate(calc(var(--aloopd, 5deg) * -0.6132 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.6813 * var(--s80amp, 1))); }
  75% { transform: rotate(calc(var(--aloopd, 5deg) * -0.6600 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.7600 * var(--s80amp, 1))); }
  77.0833% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7063 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.8021 * var(--s80amp, 1))); }
  79.1667% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7482 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.8076 * var(--s80amp, 1))); }
  81.25% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7803 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.7789 * var(--s80amp, 1))); }
  83.3333% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7967 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.7202 * var(--s80amp, 1))); }
  85.4167% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7916 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.6373 * var(--s80amp, 1))); }
  87.5% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7598 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.5374 * var(--s80amp, 1))); }
  89.5833% { transform: rotate(calc(var(--aloopd, 5deg) * -0.6983 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.4283 * var(--s80amp, 1))); }
  91.6667% { transform: rotate(calc(var(--aloopd, 5deg) * -0.6059 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.3180 * var(--s80amp, 1))); }
  93.75% { transform: rotate(calc(var(--aloopd, 5deg) * -0.4844 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.2140 * var(--s80amp, 1))); }
  95.8333% { transform: rotate(calc(var(--aloopd, 5deg) * -0.3381 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.1231 * var(--s80amp, 1))); }
  97.9167% { transform: rotate(calc(var(--aloopd, 5deg) * -0.1738 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0506 * var(--s80amp, 1))); }
  100% { transform: rotate(calc(var(--aloopd, 5deg) * -0.0000 * var(--s80amp, 1))) skewX(calc(var(--aloopd, 5deg) * 0.0000 * var(--s80amp, 1))); }
}

/* Pohon lentur (UPDATE KE-287): irisan gambar bergerak bersama -> batang melengkung halus, akar diam */
.s80-wtw { position: relative; width: 100%; height: 100%; }
.s80-wt { position: absolute; inset: 0; backface-visibility: hidden; }
.s80-a.is-loop .s80-wt:not(.s80-wt-s), .s80-a.is-in .s80-wt:not(.s80-wt-s), .s80-a.is-back .s80-wt:not(.s80-wt-s) { animation: s80WindTree var(--dloop, 5s) linear infinite; will-change: transform; }
@keyframes s80WindTree {
  0% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.0000 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.0000)); }
  1.3889% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.1462 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.1462)); }
  2.7778% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.2888 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.2888)); }
  4.1667% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.4243 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.4243)); }
  5.5556% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.5498 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.5498)); }
  6.9444% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.6626 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.6626)); }
  8.3333% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.7605 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.7605)); }
  9.7222% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.8420 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.8420)); }
  11.1111% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.9065 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.9065)); }
  12.5% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.9537 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.9537)); }
  13.8889% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.9842 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.9842)); }
  15.2778% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.9991 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.9991)); }
  16.6667% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 1.0000 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 1.0000)); }
  18.0556% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.9888 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.9888)); }
  19.4444% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.9678 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.9678)); }
  20.8333% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.9391 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.9391)); }
  22.2222% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.9050 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.9050)); }
  23.6111% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.8675 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.8675)); }
  25% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.8284 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.8284)); }
  26.3889% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.7890 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.7890)); }
  27.7778% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.7504 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.7504)); }
  29.1667% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.7132 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.7132)); }
  30.5556% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.6773 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.6773)); }
  31.9444% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.6427 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.6427)); }
  33.3333% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.6087 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.6087)); }
  34.7222% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.5745 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.5745)); }
  36.1111% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.5392 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.5392)); }
  37.5% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.5018 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.5018)); }
  38.8889% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.4615 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.4615)); }
  40.2778% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.4174 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.4174)); }
  41.6667% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.3691 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.3691)); }
  43.0556% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.3164 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.3164)); }
  44.4444% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.2594 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.2594)); }
  45.8333% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.1984 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.1984)); }
  47.2222% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.1342 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.1342)); }
  48.6111% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.0677 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.0677)); }
  50% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * 0.0000 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * 0.0000)); }
  51.3889% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.0677 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.0677)); }
  52.7778% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.1342 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.1342)); }
  54.1667% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.1984 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.1984)); }
  55.5556% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.2594 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.2594)); }
  56.9444% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.3164 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.3164)); }
  58.3333% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.3691 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.3691)); }
  59.7222% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.4174 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.4174)); }
  61.1111% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.4615 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.4615)); }
  62.5% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.5018 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.5018)); }
  63.8889% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.5392 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.5392)); }
  65.2778% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.5745 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.5745)); }
  66.6667% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.6087 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.6087)); }
  68.0556% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.6427 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.6427)); }
  69.4444% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.6773 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.6773)); }
  70.8333% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.7132 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.7132)); }
  72.2222% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.7504 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.7504)); }
  73.6111% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.7890 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.7890)); }
  75% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.8284 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.8284)); }
  76.3889% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.8675 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.8675)); }
  77.7778% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.9050 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.9050)); }
  79.1667% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.9391 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.9391)); }
  80.5556% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.9678 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.9678)); }
  81.9444% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.9888 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.9888)); }
  83.3333% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -1.0000 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -1.0000)); }
  84.7222% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.9991 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.9991)); }
  86.1111% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.9842 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.9842)); }
  87.5% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.9537 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.9537)); }
  88.8889% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.9065 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.9065)); }
  90.2778% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.8420 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.8420)); }
  91.6667% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.7605 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.7605)); }
  93.0556% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.6626 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.6626)); }
  94.4444% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.5498 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.5498)); }
  95.8333% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.4243 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.4243)); }
  97.2222% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.2888 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.2888)); }
  98.6111% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.1462 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.1462)); }
  100% { transform: translate3d(calc(var(--wa, 14) * var(--wf, 0) * -0.0000 * 1px), 0, 0) skewX(calc(var(--wk, 0deg) * var(--wa, 14) * -0.0000)); }
}

/* UPDATE KE-294: contoh transisi galeri di kanvas editor (dipicu saat memilih Transisi foto) */
.s80-gal-pv > * { animation: s80GalPv .9s ease backwards; }
.s80-gal-pv > *:nth-child(2) { animation-delay: .06s; } .s80-gal-pv > *:nth-child(3) { animation-delay: .12s; } .s80-gal-pv > *:nth-child(n+4) { animation-delay: .18s; }
.s80-gal-pv[data-pv="fade"] > * { --pv0: none; --pvf: none; }
.s80-gal-pv[data-pv="slide"] > * { --pv0: translateX(18%); --pvf: none; }
.s80-gal-pv[data-pv="zoom"] > * { --pv0: scale(1.12); --pvf: none; }
.s80-gal-pv[data-pv="blur"] > * { --pv0: scale(1.05); --pvf: blur(10px); }
.s80-gal-pv[data-pv="rise"] > * { --pv0: translateY(14%); --pvf: none; }
.s80-gal-pv[data-pv="flip"] > * { --pv0: perspective(900px) rotateY(35deg); --pvf: none; }
@keyframes s80GalPv { 0% { opacity: 0; transform: var(--pv0, none); filter: var(--pvf, none); } 100% { opacity: 1; transform: none; filter: none; } }

/* S80_RIGID_BLOOMS_V1: only stems deform. Petal regions are rigid. */
.s80-rigid-plant,.s80-rigid-stem-mask{position:relative;width:100%;height:100%}
.s80-rigid-stem-mask{mask-size:100% 100%;-webkit-mask-size:100% 100%;mask-repeat:no-repeat;-webkit-mask-repeat:no-repeat}
.s80-rigid-bloom{position:absolute;inset:0;backface-visibility:hidden}
.s80-a.is-loop .s80-rigid-bloom,.s80-a.is-in .s80-rigid-bloom,.s80-a.is-back .s80-rigid-bloom{animation:s80RigidBloom var(--dloop,5.5s) linear infinite;will-change:transform}
@keyframes s80RigidBloom{
  0%{transform:translate3d(calc(var(--rig-x,0) * 0.0000 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.0000 * 1deg));}
  1.3889%{transform:translate3d(calc(var(--rig-x,0) * 0.1462 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.1462 * 1deg));}
  2.7778%{transform:translate3d(calc(var(--rig-x,0) * 0.2888 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.2888 * 1deg));}
  4.1667%{transform:translate3d(calc(var(--rig-x,0) * 0.4243 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.4243 * 1deg));}
  5.5556%{transform:translate3d(calc(var(--rig-x,0) * 0.5498 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.5498 * 1deg));}
  6.9444%{transform:translate3d(calc(var(--rig-x,0) * 0.6626 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.6626 * 1deg));}
  8.3333%{transform:translate3d(calc(var(--rig-x,0) * 0.7605 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.7605 * 1deg));}
  9.7222%{transform:translate3d(calc(var(--rig-x,0) * 0.8420 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.8420 * 1deg));}
  11.1111%{transform:translate3d(calc(var(--rig-x,0) * 0.9065 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.9065 * 1deg));}
  12.5%{transform:translate3d(calc(var(--rig-x,0) * 0.9537 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.9537 * 1deg));}
  13.8889%{transform:translate3d(calc(var(--rig-x,0) * 0.9842 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.9842 * 1deg));}
  15.2778%{transform:translate3d(calc(var(--rig-x,0) * 0.9991 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.9991 * 1deg));}
  16.6667%{transform:translate3d(calc(var(--rig-x,0) * 1.0000 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 1.0000 * 1deg));}
  18.0556%{transform:translate3d(calc(var(--rig-x,0) * 0.9888 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.9888 * 1deg));}
  19.4444%{transform:translate3d(calc(var(--rig-x,0) * 0.9678 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.9678 * 1deg));}
  20.8333%{transform:translate3d(calc(var(--rig-x,0) * 0.9391 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.9391 * 1deg));}
  22.2222%{transform:translate3d(calc(var(--rig-x,0) * 0.9050 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.9050 * 1deg));}
  23.6111%{transform:translate3d(calc(var(--rig-x,0) * 0.8675 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.8675 * 1deg));}
  25%{transform:translate3d(calc(var(--rig-x,0) * 0.8284 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.8284 * 1deg));}
  26.3889%{transform:translate3d(calc(var(--rig-x,0) * 0.7890 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.7890 * 1deg));}
  27.7778%{transform:translate3d(calc(var(--rig-x,0) * 0.7504 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.7504 * 1deg));}
  29.1667%{transform:translate3d(calc(var(--rig-x,0) * 0.7132 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.7132 * 1deg));}
  30.5556%{transform:translate3d(calc(var(--rig-x,0) * 0.6773 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.6773 * 1deg));}
  31.9444%{transform:translate3d(calc(var(--rig-x,0) * 0.6427 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.6427 * 1deg));}
  33.3333%{transform:translate3d(calc(var(--rig-x,0) * 0.6087 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.6087 * 1deg));}
  34.7222%{transform:translate3d(calc(var(--rig-x,0) * 0.5745 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.5745 * 1deg));}
  36.1111%{transform:translate3d(calc(var(--rig-x,0) * 0.5392 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.5392 * 1deg));}
  37.5%{transform:translate3d(calc(var(--rig-x,0) * 0.5018 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.5018 * 1deg));}
  38.8889%{transform:translate3d(calc(var(--rig-x,0) * 0.4615 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.4615 * 1deg));}
  40.2778%{transform:translate3d(calc(var(--rig-x,0) * 0.4174 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.4174 * 1deg));}
  41.6667%{transform:translate3d(calc(var(--rig-x,0) * 0.3691 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.3691 * 1deg));}
  43.0556%{transform:translate3d(calc(var(--rig-x,0) * 0.3164 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.3164 * 1deg));}
  44.4444%{transform:translate3d(calc(var(--rig-x,0) * 0.2594 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.2594 * 1deg));}
  45.8333%{transform:translate3d(calc(var(--rig-x,0) * 0.1984 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.1984 * 1deg));}
  47.2222%{transform:translate3d(calc(var(--rig-x,0) * 0.1342 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.1342 * 1deg));}
  48.6111%{transform:translate3d(calc(var(--rig-x,0) * 0.0677 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.0677 * 1deg));}
  50%{transform:translate3d(calc(var(--rig-x,0) * 0.0000 * 1px),0,0) rotate(calc(var(--rig-angle,0) * 0.0000 * 1deg));}
  51.3889%{transform:translate3d(calc(var(--rig-x,0) * -0.0677 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.0677 * 1deg));}
  52.7778%{transform:translate3d(calc(var(--rig-x,0) * -0.1342 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.1342 * 1deg));}
  54.1667%{transform:translate3d(calc(var(--rig-x,0) * -0.1984 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.1984 * 1deg));}
  55.5556%{transform:translate3d(calc(var(--rig-x,0) * -0.2594 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.2594 * 1deg));}
  56.9444%{transform:translate3d(calc(var(--rig-x,0) * -0.3164 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.3164 * 1deg));}
  58.3333%{transform:translate3d(calc(var(--rig-x,0) * -0.3691 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.3691 * 1deg));}
  59.7222%{transform:translate3d(calc(var(--rig-x,0) * -0.4174 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.4174 * 1deg));}
  61.1111%{transform:translate3d(calc(var(--rig-x,0) * -0.4615 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.4615 * 1deg));}
  62.5%{transform:translate3d(calc(var(--rig-x,0) * -0.5018 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.5018 * 1deg));}
  63.8889%{transform:translate3d(calc(var(--rig-x,0) * -0.5392 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.5392 * 1deg));}
  65.2778%{transform:translate3d(calc(var(--rig-x,0) * -0.5745 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.5745 * 1deg));}
  66.6667%{transform:translate3d(calc(var(--rig-x,0) * -0.6087 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.6087 * 1deg));}
  68.0556%{transform:translate3d(calc(var(--rig-x,0) * -0.6427 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.6427 * 1deg));}
  69.4444%{transform:translate3d(calc(var(--rig-x,0) * -0.6773 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.6773 * 1deg));}
  70.8333%{transform:translate3d(calc(var(--rig-x,0) * -0.7132 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.7132 * 1deg));}
  72.2222%{transform:translate3d(calc(var(--rig-x,0) * -0.7504 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.7504 * 1deg));}
  73.6111%{transform:translate3d(calc(var(--rig-x,0) * -0.7890 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.7890 * 1deg));}
  75%{transform:translate3d(calc(var(--rig-x,0) * -0.8284 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.8284 * 1deg));}
  76.3889%{transform:translate3d(calc(var(--rig-x,0) * -0.8675 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.8675 * 1deg));}
  77.7778%{transform:translate3d(calc(var(--rig-x,0) * -0.9050 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.9050 * 1deg));}
  79.1667%{transform:translate3d(calc(var(--rig-x,0) * -0.9391 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.9391 * 1deg));}
  80.5556%{transform:translate3d(calc(var(--rig-x,0) * -0.9678 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.9678 * 1deg));}
  81.9444%{transform:translate3d(calc(var(--rig-x,0) * -0.9888 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.9888 * 1deg));}
  83.3333%{transform:translate3d(calc(var(--rig-x,0) * -1.0000 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -1.0000 * 1deg));}
  84.7222%{transform:translate3d(calc(var(--rig-x,0) * -0.9991 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.9991 * 1deg));}
  86.1111%{transform:translate3d(calc(var(--rig-x,0) * -0.9842 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.9842 * 1deg));}
  87.5%{transform:translate3d(calc(var(--rig-x,0) * -0.9537 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.9537 * 1deg));}
  88.8889%{transform:translate3d(calc(var(--rig-x,0) * -0.9065 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.9065 * 1deg));}
  90.2778%{transform:translate3d(calc(var(--rig-x,0) * -0.8420 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.8420 * 1deg));}
  91.6667%{transform:translate3d(calc(var(--rig-x,0) * -0.7605 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.7605 * 1deg));}
  93.0556%{transform:translate3d(calc(var(--rig-x,0) * -0.6626 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.6626 * 1deg));}
  94.4444%{transform:translate3d(calc(var(--rig-x,0) * -0.5498 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.5498 * 1deg));}
  95.8333%{transform:translate3d(calc(var(--rig-x,0) * -0.4243 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.4243 * 1deg));}
  97.2222%{transform:translate3d(calc(var(--rig-x,0) * -0.2888 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.2888 * 1deg));}
  98.6111%{transform:translate3d(calc(var(--rig-x,0) * -0.1462 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.1462 * 1deg));}
  100%{transform:translate3d(calc(var(--rig-x,0) * -0.0000 * 1px),0,0) rotate(calc(var(--rig-angle,0) * -0.0000 * 1deg));}
}


/* UPDATE KE-300/304: Bergoyang (pangkal diam) - sendi bertingkat, kurva sinus seperti "Bergoyang" */
.s80-rsw, .s80-rs { position: absolute; inset: 0; }
.s80-rsw { position: relative; width: 100%; height: 100%; }
.s80-rs-p { position: absolute; inset: 0; }
.s80-a.is-loop .s80-rs, .s80-a.is-in .s80-rs, .s80-a.is-back .s80-rs { animation: s80RootSway var(--dloop, 3.5s) linear infinite; animation-iteration-count: var(--aloopn, infinite); }
@keyframes s80RootSway {
  0% { transform: rotate(calc(var(--rsa, 1deg) * 0.0000)); }
  3.125% { transform: rotate(calc(var(--rsa, 1deg) * 0.1951)); }
  6.25% { transform: rotate(calc(var(--rsa, 1deg) * 0.3827)); }
  9.375% { transform: rotate(calc(var(--rsa, 1deg) * 0.5556)); }
  12.5% { transform: rotate(calc(var(--rsa, 1deg) * 0.7071)); }
  15.625% { transform: rotate(calc(var(--rsa, 1deg) * 0.8315)); }
  18.75% { transform: rotate(calc(var(--rsa, 1deg) * 0.9239)); }
  21.875% { transform: rotate(calc(var(--rsa, 1deg) * 0.9808)); }
  25% { transform: rotate(calc(var(--rsa, 1deg) * 1.0000)); }
  28.125% { transform: rotate(calc(var(--rsa, 1deg) * 0.9808)); }
  31.25% { transform: rotate(calc(var(--rsa, 1deg) * 0.9239)); }
  34.375% { transform: rotate(calc(var(--rsa, 1deg) * 0.8315)); }
  37.5% { transform: rotate(calc(var(--rsa, 1deg) * 0.7071)); }
  40.625% { transform: rotate(calc(var(--rsa, 1deg) * 0.5556)); }
  43.75% { transform: rotate(calc(var(--rsa, 1deg) * 0.3827)); }
  46.875% { transform: rotate(calc(var(--rsa, 1deg) * 0.1951)); }
  50% { transform: rotate(calc(var(--rsa, 1deg) * 0.0000)); }
  53.125% { transform: rotate(calc(var(--rsa, 1deg) * -0.1951)); }
  56.25% { transform: rotate(calc(var(--rsa, 1deg) * -0.3827)); }
  59.375% { transform: rotate(calc(var(--rsa, 1deg) * -0.5556)); }
  62.5% { transform: rotate(calc(var(--rsa, 1deg) * -0.7071)); }
  65.625% { transform: rotate(calc(var(--rsa, 1deg) * -0.8315)); }
  68.75% { transform: rotate(calc(var(--rsa, 1deg) * -0.9239)); }
  71.875% { transform: rotate(calc(var(--rsa, 1deg) * -0.9808)); }
  75% { transform: rotate(calc(var(--rsa, 1deg) * -1.0000)); }
  78.125% { transform: rotate(calc(var(--rsa, 1deg) * -0.9808)); }
  81.25% { transform: rotate(calc(var(--rsa, 1deg) * -0.9239)); }
  84.375% { transform: rotate(calc(var(--rsa, 1deg) * -0.8315)); }
  87.5% { transform: rotate(calc(var(--rsa, 1deg) * -0.7071)); }
  90.625% { transform: rotate(calc(var(--rsa, 1deg) * -0.5556)); }
  93.75% { transform: rotate(calc(var(--rsa, 1deg) * -0.3827)); }
  96.875% { transform: rotate(calc(var(--rsa, 1deg) * -0.1951)); }
  100% { transform: rotate(calc(var(--rsa, 1deg) * -0.0000)); }
}

/* UPDATE KE-301: Melambai (seperti bunga di tema Viding) - miring kiri-kanan halus, titik tumpu di bawah */
@keyframes s80Lambai {
  0% { transform: rotate(calc(var(--aloopd, 5deg) * 0.0000 * var(--s80amp, 1))); }
  2.0833% { transform: rotate(calc(var(--aloopd, 5deg) * 0.1305 * var(--s80amp, 1))); }
  4.1667% { transform: rotate(calc(var(--aloopd, 5deg) * 0.2588 * var(--s80amp, 1))); }
  6.25% { transform: rotate(calc(var(--aloopd, 5deg) * 0.3827 * var(--s80amp, 1))); }
  8.3333% { transform: rotate(calc(var(--aloopd, 5deg) * 0.5000 * var(--s80amp, 1))); }
  10.4167% { transform: rotate(calc(var(--aloopd, 5deg) * 0.6088 * var(--s80amp, 1))); }
  12.5% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7071 * var(--s80amp, 1))); }
  14.5833% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7934 * var(--s80amp, 1))); }
  16.6667% { transform: rotate(calc(var(--aloopd, 5deg) * 0.8660 * var(--s80amp, 1))); }
  18.75% { transform: rotate(calc(var(--aloopd, 5deg) * 0.9239 * var(--s80amp, 1))); }
  20.8333% { transform: rotate(calc(var(--aloopd, 5deg) * 0.9659 * var(--s80amp, 1))); }
  22.9167% { transform: rotate(calc(var(--aloopd, 5deg) * 0.9914 * var(--s80amp, 1))); }
  25% { transform: rotate(calc(var(--aloopd, 5deg) * 1.0000 * var(--s80amp, 1))); }
  27.0833% { transform: rotate(calc(var(--aloopd, 5deg) * 0.9914 * var(--s80amp, 1))); }
  29.1667% { transform: rotate(calc(var(--aloopd, 5deg) * 0.9659 * var(--s80amp, 1))); }
  31.25% { transform: rotate(calc(var(--aloopd, 5deg) * 0.9239 * var(--s80amp, 1))); }
  33.3333% { transform: rotate(calc(var(--aloopd, 5deg) * 0.8660 * var(--s80amp, 1))); }
  35.4167% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7934 * var(--s80amp, 1))); }
  37.5% { transform: rotate(calc(var(--aloopd, 5deg) * 0.7071 * var(--s80amp, 1))); }
  39.5833% { transform: rotate(calc(var(--aloopd, 5deg) * 0.6088 * var(--s80amp, 1))); }
  41.6667% { transform: rotate(calc(var(--aloopd, 5deg) * 0.5000 * var(--s80amp, 1))); }
  43.75% { transform: rotate(calc(var(--aloopd, 5deg) * 0.3827 * var(--s80amp, 1))); }
  45.8333% { transform: rotate(calc(var(--aloopd, 5deg) * 0.2588 * var(--s80amp, 1))); }
  47.9167% { transform: rotate(calc(var(--aloopd, 5deg) * 0.1305 * var(--s80amp, 1))); }
  50% { transform: rotate(calc(var(--aloopd, 5deg) * 0.0000 * var(--s80amp, 1))); }
  52.0833% { transform: rotate(calc(var(--aloopd, 5deg) * -0.1305 * var(--s80amp, 1))); }
  54.1667% { transform: rotate(calc(var(--aloopd, 5deg) * -0.2588 * var(--s80amp, 1))); }
  56.25% { transform: rotate(calc(var(--aloopd, 5deg) * -0.3827 * var(--s80amp, 1))); }
  58.3333% { transform: rotate(calc(var(--aloopd, 5deg) * -0.5000 * var(--s80amp, 1))); }
  60.4167% { transform: rotate(calc(var(--aloopd, 5deg) * -0.6088 * var(--s80amp, 1))); }
  62.5% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7071 * var(--s80amp, 1))); }
  64.5833% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7934 * var(--s80amp, 1))); }
  66.6667% { transform: rotate(calc(var(--aloopd, 5deg) * -0.8660 * var(--s80amp, 1))); }
  68.75% { transform: rotate(calc(var(--aloopd, 5deg) * -0.9239 * var(--s80amp, 1))); }
  70.8333% { transform: rotate(calc(var(--aloopd, 5deg) * -0.9659 * var(--s80amp, 1))); }
  72.9167% { transform: rotate(calc(var(--aloopd, 5deg) * -0.9914 * var(--s80amp, 1))); }
  75% { transform: rotate(calc(var(--aloopd, 5deg) * -1.0000 * var(--s80amp, 1))); }
  77.0833% { transform: rotate(calc(var(--aloopd, 5deg) * -0.9914 * var(--s80amp, 1))); }
  79.1667% { transform: rotate(calc(var(--aloopd, 5deg) * -0.9659 * var(--s80amp, 1))); }
  81.25% { transform: rotate(calc(var(--aloopd, 5deg) * -0.9239 * var(--s80amp, 1))); }
  83.3333% { transform: rotate(calc(var(--aloopd, 5deg) * -0.8660 * var(--s80amp, 1))); }
  85.4167% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7934 * var(--s80amp, 1))); }
  87.5% { transform: rotate(calc(var(--aloopd, 5deg) * -0.7071 * var(--s80amp, 1))); }
  89.5833% { transform: rotate(calc(var(--aloopd, 5deg) * -0.6088 * var(--s80amp, 1))); }
  91.6667% { transform: rotate(calc(var(--aloopd, 5deg) * -0.5000 * var(--s80amp, 1))); }
  93.75% { transform: rotate(calc(var(--aloopd, 5deg) * -0.3827 * var(--s80amp, 1))); }
  95.8333% { transform: rotate(calc(var(--aloopd, 5deg) * -0.2588 * var(--s80amp, 1))); }
  97.9167% { transform: rotate(calc(var(--aloopd, 5deg) * -0.1305 * var(--s80amp, 1))); }
  100% { transform: rotate(calc(var(--aloopd, 5deg) * -0.0000 * var(--s80amp, 1))); }
}

/* UPDATE KE-302/306: Muncul -> Tampil TANPA jeda dan ringan di HP.
   Gerak Tampil dipindah ke lapisan anak (.s80-al) yang mulai BERSAMAAN dengan Muncul; induknya hanya menjalankan Muncul/Kembali.
   Tidak memakai animation-composition (yang memaksa browser menghitung di prosesor utama -> tersendat di HP). */
.s80-a[data-s80a*="|floating|"].is-in, .s80-a[data-s80a*="|sway-up|"].is-in, .s80-a[data-s80a*="|sway|"].is-in, .s80-a[data-s80a*="|wind-hang|"].is-in, .s80-a[data-s80a*="|lambai|"].is-in, .s80-a[data-s80a*="|lambai-l|"].is-in, .s80-a[data-s80a*="|lambai-r|"].is-in, .s80-a[data-s80a*="|sway-x|"].is-in, .s80-a[data-s80a*="|bounce|"].is-in, .s80-a[data-s80a*="|pulse|"].is-in, .s80-a[data-s80a*="|rotate|"].is-in { animation: var(--kin) var(--din, 1.2s) var(--ein, cubic-bezier(.16, 1, .3, 1)) var(--lin, 0s) both; }
.s80-a[data-s80a*="|floating|"].is-back, .s80-a[data-s80a*="|sway-up|"].is-back, .s80-a[data-s80a*="|sway|"].is-back, .s80-a[data-s80a*="|wind-hang|"].is-back, .s80-a[data-s80a*="|lambai|"].is-back, .s80-a[data-s80a*="|lambai-l|"].is-back, .s80-a[data-s80a*="|lambai-r|"].is-back, .s80-a[data-s80a*="|sway-x|"].is-back, .s80-a[data-s80a*="|bounce|"].is-back, .s80-a[data-s80a*="|pulse|"].is-back, .s80-a[data-s80a*="|rotate|"].is-back { animation: var(--kback) var(--dback, .9s) cubic-bezier(.16, 1, .3, 1) var(--lback, 0s) both; }
.s80-a[data-s80a*="|floating|"].is-loop, .s80-a[data-s80a*="|sway-up|"].is-loop, .s80-a[data-s80a*="|sway|"].is-loop, .s80-a[data-s80a*="|wind-hang|"].is-loop, .s80-a[data-s80a*="|lambai|"].is-loop, .s80-a[data-s80a*="|lambai-l|"].is-loop, .s80-a[data-s80a*="|lambai-r|"].is-loop, .s80-a[data-s80a*="|sway-x|"].is-loop, .s80-a[data-s80a*="|bounce|"].is-loop, .s80-a[data-s80a*="|pulse|"].is-loop, .s80-a[data-s80a*="|rotate|"].is-loop { animation: none; }
.s80-al { width: 100%; height: 100%; transform-origin: var(--oloop, 50% 50%); }
.s80-a.is-in > .s80-al { animation: var(--kloop, none) var(--dloop, 4s) var(--eloop, cubic-bezier(.37, 0, .63, 1)) var(--lin, 0s) var(--aloopn, infinite) var(--aloopf, none); will-change: transform; }
.s80-a.is-back > .s80-al { animation: var(--kloop, none) var(--dloop, 4s) var(--eloop, cubic-bezier(.37, 0, .63, 1)) var(--lback, 0s) var(--aloopn, infinite) var(--aloopf, none); will-change: transform; }
.s80-a.is-loop > .s80-al { animation: var(--kloop, none) var(--dloop, 4s) var(--eloop, cubic-bezier(.37, 0, .63, 1)) 0s var(--aloopn, infinite) var(--aloopf, none); will-change: transform; }
.s80-paused .s80-al { animation-play-state: paused !important; }

/* UPDATE KE-304: gerak dijeda saat halaman jauh dari layar */
.s80-paused .s80-a, .s80-paused .s80-rs, .s80-paused .s80-wt, .s80-paused .s80-rigid-bloom, .s80-paused .s80-a * { animation-play-state: paused !important; }

/* UPDATE KE-306: HP lebih mulus saat Muncul.
   - Efek blur pada animasi Muncul sangat berat di HP (tiap gambar harus diburamkan ulang tiap frame) -> di HP/tablet
     animasi Muncul memakai gerak + memudar saja tanpa blur (kecuali efek "Blur" yang memang blur).
   - Gerak Tampil yang ditumpuk dengan Muncul (KE-302) tidak lagi memakai variabel kekuatan yang dianimasikan
     (--s80amp), karena itu membuat browser menghitung ulang gaya di setiap frame. */
@media (max-width: 820px), (pointer: coarse) {
  @keyframes s80Fade { from { opacity: 0; } to { opacity: 1; } }
  @keyframes s80Rise { from { opacity: 0; transform: translate3d(0, 64px, 0) scale3d(.94, .94, 1); } to { opacity: 1; transform: none; } }
  @keyframes s80SlideDown { from { opacity: 0; transform: translate3d(0, -42px, 0); } to { opacity: 1; transform: none; } }
  @keyframes s80SlideLeft { from { opacity: 0; transform: translate3d(56px, 0, 0); } to { opacity: 1; transform: none; } }
  @keyframes s80SlideRight { from { opacity: 0; transform: translate3d(-56px, 0, 0); } to { opacity: 1; transform: none; } }
  @keyframes s80SlideUp { from { opacity: 0; transform: translate3d(0, 42px, 0); } to { opacity: 1; transform: none; } }
  @keyframes s80SpinIn { from { opacity: 0; transform: rotate(-14deg) scale3d(.8, .8, 1); } to { opacity: 1; transform: none; } }
  @keyframes s80Zoom { from { opacity: 0; transform: scale3d(.86, .86, 1); } to { opacity: 1; transform: none; } }
  @keyframes s80ZoomIn2 { from { opacity: 0; transform: scale3d(1.18, 1.18, 1); } to { opacity: 1; transform: none; } }
}

/* ---- Gerak Kamera / drone (UPDATE KE-309) ---- */
.s80-camp { overflow: hidden; }
.s80-cam { position: absolute; left: 0; top: 0; width: 390px; transform-origin: 0 0; backface-visibility: hidden; }
.s80-cam.is-camrun { will-change: transform; }
.s80-camd { position: absolute; left: 0; top: 0; width: 100%; height: 100%; transform-origin: 0 0; pointer-events: none; }
.s80-camd > * { pointer-events: auto; }

/* ---- KE-315: Muncul halus (Naik / Turun / Dari Kiri / Dari Kanan Halus) ---- */
@keyframes s80UpSoft { from { opacity: 0; transform: translate3d(0, 100%, 0); } to { opacity: 1; transform: none; } }
@keyframes s80DownSoft { from { opacity: 0; transform: translate3d(0, -100%, 0); } to { opacity: 1; transform: none; } }
@keyframes s80LeftSoft { from { opacity: 0; transform: translate3d(-100%, 0, 0); } to { opacity: 1; transform: none; } }
@keyframes s80RightSoft { from { opacity: 0; transform: translate3d(100%, 0, 0); } to { opacity: 1; transform: none; } }
/* KE-320: sudut foto galeri tetap membulat saat berpindah foto. Dulu tiap slide berbentuk kotak dan hanya dipotong
   lengkungan wadahnya; selama transisi (slide jadi lapisan kartu grafis) potongan itu lepas sehingga sudut terlihat
   lancip -> lengkung -> lancip. Sekarang slide/kartu/foto punya lengkungan sendiri. */
.s80-gal-slide { border-radius: var(--grad, 10px); overflow: hidden; -webkit-backface-visibility: hidden; backface-visibility: hidden; }
.s80-gal-cell { isolation: isolate; }
/* KE-321: Slideshow tidak "berdetak" saat berganti foto.
   1) Zoom dulu memperbesar/mengecilkan seluruh kotak foto (termasuk kerangka & bayangan) -> tepi kotak maju-mundur.
      Sekarang kotaknya diam, hanya FOTO di dalamnya yang membesar lembut lalu kembali normal.
   2) Fade/Zoom: foto lama dulu ikut memudar bersamaan dengan foto baru -> di tengah transisi keduanya setengah tembus,
      kerangka & bayangan ikut meredup lalu terang lagi. Sekarang foto lama tetap utuh di bawah sampai foto baru selesai muncul.
   3) Bayangan slideshow cukup satu (di wadah), tidak ditumpuk per foto. */
.s80-gal-stage.is-slideshow .s80-gal-slide { box-shadow: none; }
.s80-gal[data-trans="fade"] .s80-gal-slide.is-out, .s80-gal[data-trans="zoom"] .s80-gal-slide.is-out { opacity: 1; transform: none; z-index: 0; transition: none; }
.s80-gal[data-trans="zoom"] .s80-gal-slide.is-in { transform: none; }
.s80-gal[data-trans="zoom"] .s80-gal-slide.is-on.is-in img { animation: s80GalImgZoom var(--gtd, .52s) ease both; }
@keyframes s80GalImgZoom { from { transform: scale(1.06); } to { transform: none; } }
.s80-gal[data-trans="fade"] .s80-gal-slide:not(.is-on):not(.is-out), .s80-gal[data-trans="zoom"] .s80-gal-slide:not(.is-on):not(.is-out) { transition: none; }

/* ---- KE-323: Video YouTube ---- */
.s80-yt { position: relative; width: 100%; height: 100%; box-sizing: border-box; background: #111; overflow: hidden; }
.s80-yt-screen { position: absolute; inset: 0; overflow: hidden; background: #000; }
.s80-yt-thumb { width: 100%; height: 100%; object-fit: cover; display: block; }
.s80-yt-screen iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
.s80-yt-play { position: absolute; left: 50%; top: 50%; width: 62px; height: 44px; margin: -22px 0 0 -31px; border: 0; padding: 0; background: none; cursor: pointer; filter: drop-shadow(0 3px 8px rgba(0,0,0,.35)); transition: transform .2s; }
.s80-yt-play svg { width: 100%; height: 100%; display: block; }
.s80-page.is-live .s80-yt:hover .s80-yt-play { transform: scale(1.08); }
.s80-yt-round { box-shadow: 0 10px 26px rgba(30,20,25,.22); }
.s80-yt-frame { background: #fff; padding: 6px; box-shadow: 0 10px 26px rgba(30,20,25,.2); }
.s80-yt-frame .s80-yt-screen { inset: 6px; }
.s80-yt-film { background: #000; }
.s80-yt-film .s80-yt-screen { inset: 9% 0; }
.s80-yt-polaroid { background: #fff; box-shadow: 0 8px 20px rgba(30,20,25,.2); }
.s80-yt-polaroid .s80-yt-screen { inset: 8px 8px 34px 8px; }
.s80-yt-cap { position: absolute; left: 0; right: 0; bottom: 0; padding: 6px 10px; font: 500 12px/1.3 var(--f-body, sans-serif); color: #fff; background: linear-gradient(transparent, rgba(0,0,0,.6)); text-align: center; pointer-events: none; }
.s80-yt-polaroid .s80-yt-cap, .s80-yt-frame .s80-yt-cap { background: none; color: #3b2a2f; }
.s80-yt-polaroid .s80-yt-cap { height: 34px; display: flex; align-items: center; justify-content: center; padding: 0 10px; }
.s80-yt.is-empty { background: #f4eef1; border: 1.5px dashed #d9b9c9; }
.s80-yt-empty { position: absolute; inset: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; color: #a0788b; text-align: center; padding: 10px; font: 12px/1.35 var(--f-body, sans-serif); }
.s80-yt-empty svg { width: 34px; height: 34px; color: #e0245e; }
.s80-yt-empty b { font-size: 13px; color: #6d4b5b; }

/* S80_RSVP_COMMENTS_V1_BEGIN */
.s80-comments-visible { position:relative; max-height:var(--s80-comment-max, none); overflow-y:auto; overflow-x:hidden; overflow-anchor:none; overscroll-behavior:contain; scroll-behavior:auto; }
.s80-comments-visible > .s80-rv-wh,
.s80-comments-visible > .s80-ws-listhead { display:flex !important; visibility:visible; }
.s80-comments-visible > .s80-rv-list,
.s80-comments-visible > .s80-ws-list { display:flex !important; visibility:visible; overflow-anchor:none; overscroll-behavior:contain; scroll-behavior:auto; }
.s80-comments-visible .s80-rv-msg,
.s80-comments-visible .s80-ws-itembody > p { white-space:pre-wrap; overflow-wrap:anywhere; }
.s80-comments-visible .s80-rv-item,
.s80-comments-visible .s80-ws-item { flex-shrink:0; }
.s80-comments-visible .s80-rv-status { overflow-wrap:anywhere; }

/* S80_RSVP_NO_RESTART_V2: iOS must not zoom the viewport when focusing small fields. */
@media (max-width: 900px) {
  .s80-page.is-live .s80-rv-form input,
  .s80-page.is-live .s80-rv-form select,
  .s80-page.is-live .s80-rv-form textarea,
  .s80-page.is-live .s80-wishes-form input,
  .s80-page.is-live .s80-wishes-form textarea { font-size:max(16px, 1em) !important; }
}
/* S80_RSVP_COMMENTS_V1_END */
