/* ============================================================
   BUNGA KERING (Basic) — gaya
   Dunia visual: meja kayu terang, kertas kraft, bunga kering
   dalam vas. Palet: krem, karamel, cokelat susu.
   Gerak khas: foto MENETAP seperti diletakkan di atas meja
   (skala 1,045 + rotasi kecil → diam), teks menyusul seperti
   kartu ucapan yang digeser masuk dari tepi bawah meja.
   Hanya transform & opacity yang dianimasikan.
   ============================================================ */
@font-face{font-family:'Fraunces';src:url('assets/fon/Fraunces.woff2') format('woff2');font-weight:300 700;font-style:normal;font-display:swap}
@font-face{font-family:'Karla';src:url('assets/fon/Karla-400.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'Karla';src:url('assets/fon/Karla-500.woff2') format('woff2');font-weight:500;font-style:normal;font-display:swap}
@font-face{font-family:'Karla';src:url('assets/fon/Karla-700.woff2') format('woff2');font-weight:700;font-style:normal;font-display:swap}
@font-face{font-family:'Karla';src:url('assets/fon/Karla-400-italic.woff2') format('woff2');font-weight:400;font-style:italic;font-display:swap}
@font-face{font-family:'Amiri';src:url('assets/fon/Amiri-400-arabic.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}

:root{
  --krem:#f6efe3;
  --krem-tua:#efe3cd;
  --kraft:#e9dcc0;
  --putih-kartu:#fffdf7;
  --karamel:#c99a5b;
  --rami:#b08d57;
  --cokelat:#8a5a33;
  --cokelat-tua:#4a3220;
  --teks:#54402a;
  --teks-redup:#8a7156;
  --serif:'Fraunces',Georgia,serif;
  --sans:'Karla',system-ui,sans-serif;
  --arab:'Amiri',serif;
  --durasi-ungkap:.85s;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
html,body{overflow-x:clip}
body{
  font-family:var(--sans);
  color:var(--teks);
  background:#dcc7a2;
  background-image:linear-gradient(180deg,#e2cda6,#d3ba8d);
  line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
html.js body.terkunci{overflow:hidden;height:100dvh}
body.terkunci-cahaya{overflow:hidden}
img{display:block;max-width:100%}
button{font-family:inherit;cursor:pointer}
a{color:var(--cokelat)}

/* ---------- Kolom konten (di atas "meja") ---------- */
#sampul,#konten{
  max-width:480px;margin:0 auto;position:relative;
  background:
    radial-gradient(120% 60% at 50% 0%,rgba(255,252,244,.75),rgba(255,252,244,0) 60%),
    linear-gradient(180deg,var(--krem),var(--krem-tua));
  box-shadow:0 0 44px rgba(74,50,32,.28);
}
section{padding:56px 26px 8px;text-align:center}
.judul-bagian{
  font-family:var(--serif);font-weight:600;font-size:1.62rem;color:var(--cokelat-tua);
  letter-spacing:.01em;
}
/* Garis tali rami: garis tipis bertekstur serat + simpul di tengah. */
.garis-rami{
  position:relative;width:120px;height:2px;margin:14px auto 22px;
  background:repeating-linear-gradient(93deg,var(--rami) 0 7px,#c7a76e 7px 14px);
  border-radius:2px;opacity:.85;
}
.garis-rami::after{
  content:"";position:absolute;left:50%;top:50%;width:9px;height:9px;
  background:var(--karamel);border:2px solid var(--krem);
  transform:translate(-50%,-50%) rotate(45deg);border-radius:2px;
}

/* ---------- Preloader ---------- */
#preloader{
  position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(180deg,var(--krem),var(--kraft));
  transition:opacity .6s ease,visibility .6s;
}
#preloader.selesai{opacity:0;visibility:hidden}
#preloader.gagal{display:none}
html:not(.js) #preloader{display:none}
.isi-preloader{text-align:center;padding:24px}
.vas-preloader{width:64px;height:84px;margin:0 auto 10px}
.teks-preloader{font-family:var(--serif);font-style:italic;color:var(--cokelat);font-size:1.02rem}
.batang-muat{width:170px;height:4px;margin:14px auto 0;background:rgba(138,90,51,.18);border-radius:3px;overflow:hidden}
.batang-muat span{display:block;height:100%;width:0;background:var(--karamel);border-radius:3px;transition:width .35s ease}

/* ---------- Sampul ---------- */
#sampul{
  height:100dvh;max-height:100dvh;overflow:hidden;
  display:flex;align-items:stretch;justify-content:center;
  padding:calc(10px + env(safe-area-inset-top)) 22px calc(10px + env(safe-area-inset-bottom));
  background:
    linear-gradient(180deg,rgba(246,239,227,0) 78%,rgba(201,154,91,.16)),
    radial-gradient(120% 60% at 50% 0%,rgba(255,252,244,.8),rgba(255,252,244,0) 60%),
    linear-gradient(180deg,var(--krem),var(--krem-tua));
}
.isi-sampul{
  display:flex;flex-direction:column;align-items:center;justify-content:space-evenly;
  gap:2px;text-align:center;width:100%;min-height:0;
}
.kicker-sampul{
  font-size:.78rem;letter-spacing:.34em;text-transform:uppercase;color:var(--cokelat);font-weight:700;
}
/* Foto sampul = kartu foto cetak yang diletakkan di atas meja:
   bingkai putih kartu, miring halus, bayangan lembut. */
.bingkai-foto-sampul{
  flex:0 1 auto;min-height:0;height:min(42dvh,350px);aspect-ratio:4/5;
  background:var(--putih-kartu);padding:8px 8px 20px;border-radius:4px;
  transform:rotate(-1.4deg);
  box-shadow:0 14px 30px rgba(74,50,32,.25),0 3px 8px rgba(74,50,32,.18);
}
.bingkai-foto-sampul img{width:100%;height:100%;object-fit:cover;object-position:center 22%;border-radius:2px}
.nama-sampul{
  font-family:var(--serif);font-weight:600;color:var(--cokelat-tua);
  font-size:clamp(1.9rem,9.4vw,2.6rem);line-height:1.14;letter-spacing:.01em;
}
.nama-sampul .dan{color:var(--karamel);font-style:italic;font-weight:400}
.tanggal-sampul{color:var(--teks-redup);font-size:.95rem;letter-spacing:.06em}
.kartu-tamu{
  background:var(--putih-kartu);border:1.5px dashed var(--rami);border-radius:10px;
  padding:12px 18px 14px;box-shadow:0 6px 16px rgba(74,50,32,.12);max-width:330px;
}
.kepada-label{font-size:.8rem;color:var(--teks-redup);line-height:1.45}
.nama-tamu{font-family:var(--serif);font-weight:600;font-size:1.12rem;color:var(--cokelat-tua);margin:3px 0 10px}
.tombol-buka{
  display:inline-flex;align-items:center;gap:8px;min-height:48px;
  background:var(--cokelat);color:#fdf8ec;border:none;border-radius:999px;
  padding:12px 26px;font-size:1rem;font-weight:700;letter-spacing:.02em;
  box-shadow:0 8px 18px rgba(138,90,51,.35);
}
.tombol-buka svg{width:19px;height:19px}
.tombol-buka:active{transform:scale(.97)}

/* ---------- Pembuka ---------- */
.salam{font-family:var(--serif);font-style:italic;font-size:1.08rem;color:var(--cokelat)}
.ayat{font-family:var(--arab);font-size:1.5rem;line-height:2.1;color:var(--cokelat-tua);margin-top:20px}
.sumber-ayat{color:var(--karamel);font-weight:700;letter-spacing:.14em;font-size:.8rem;margin-top:8px;text-transform:uppercase}
.foto-bunga{margin:26px auto 0;max-width:300px}
.foto-bunga img{width:100%;aspect-ratio:4/5;object-fit:cover;border-radius:6px}
.keterangan-tekstur{
  font-family:var(--serif);font-style:italic;color:var(--teks-redup);
  font-size:.92rem;margin-top:12px;line-height:1.55;
}
.paragraf-pembuka{margin-top:24px;color:var(--teks)}

/* Foto yang "diletakkan": bingkai kartu putih + miring halus. */
figure.foto-settle, .kartu-settle{
  background:var(--putih-kartu);padding:8px 8px 18px;border-radius:4px;
  box-shadow:0 12px 26px rgba(74,50,32,.20),0 3px 7px rgba(74,50,32,.14);
}

/* ---------- Mempelai ---------- */
.kartu-mempelai{
  background:var(--putih-kartu);border:1px solid rgba(176,141,87,.35);border-radius:14px;
  padding:26px 20px 22px;margin:0 auto 8px;max-width:340px;
  box-shadow:0 10px 24px rgba(74,50,32,.10);
}
.foto-mempelai{width:158px;height:196px;margin:0 auto 16px;transform:rotate(-1.2deg);
  background:var(--putih-kartu);padding:6px 6px 14px;border-radius:3px;
  box-shadow:0 9px 20px rgba(74,50,32,.20)}
.foto-mempelai img{width:100%;height:100%;object-fit:cover;object-position:center 20%;border-radius:2px}
.nama-mempelai{font-family:var(--serif);font-weight:600;font-size:1.42rem;color:var(--cokelat-tua);line-height:1.3}
.orangtua{color:var(--teks-redup);font-size:.92rem;margin-top:7px}
.tautan-ig{
  display:inline-flex;align-items:center;min-height:44px;padding:6px 10px;margin-top:6px;
  font-weight:700;font-size:.9rem;text-decoration:none;color:var(--cokelat);
}
.pemisah-dan{font-family:var(--serif);font-style:italic;font-size:1.9rem;color:var(--karamel);margin:8px 0}

/* ---------- Hitung mundur ---------- */
.foto-bersama{margin:0 auto;max-width:330px}
.foto-bersama img{width:100%;aspect-ratio:4/3;object-fit:cover;object-position:center 30%;border-radius:3px}
.kotak-hitung{display:flex;justify-content:center;gap:9px;margin-top:26px}
.sel-hitung{
  background:var(--cokelat);color:#fdf8ec;border-radius:10px;min-width:64px;
  padding:10px 4px 8px;box-shadow:0 7px 15px rgba(138,90,51,.28);
}
.angka-hitung{display:block;font-family:var(--serif);font-weight:600;font-size:1.42rem;line-height:1}
.label-hitung{display:block;font-size:.68rem;letter-spacing:.16em;text-transform:uppercase;margin-top:5px;opacity:.85}
.catatan-simpan-tanggal{color:var(--teks-redup);font-size:.9rem;margin-top:18px}

/* ---------- Acara ---------- */
.kartu-acara{
  background:var(--putih-kartu);border:1px solid rgba(176,141,87,.35);border-radius:14px;
  padding:26px 22px 24px;margin:0 auto 18px;max-width:350px;text-align:center;
  box-shadow:0 10px 24px rgba(74,50,32,.10);
}
.nama-acara{font-family:var(--serif);font-weight:600;font-size:1.34rem;color:var(--cokelat-tua)}
.hari-tanggal{font-weight:700;color:var(--cokelat);margin-top:9px;font-size:1.02rem}
.jam-acara{color:var(--teks);margin-top:3px}
.tempat-acara{color:var(--teks-redup);margin-top:9px;font-size:.94rem}
.baris-tombol-acara{display:flex;gap:9px;justify-content:center;flex-wrap:wrap;margin-top:17px}
.tombol-peta,.tombol-kalender{
  display:inline-flex;align-items:center;min-height:46px;padding:10px 18px;border-radius:999px;
  font-weight:700;font-size:.9rem;text-decoration:none;border:1.5px solid var(--cokelat);
}
.tombol-peta{background:var(--cokelat);color:#fdf8ec}
.tombol-kalender{background:transparent;color:var(--cokelat)}

/* ---------- Galeri ---------- */
.pengantar-galeri{color:var(--teks-redup);font-size:.94rem;margin-bottom:20px}
.kisi-galeri{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.potret-galeri{
  border:none;background:var(--putih-kartu);padding:6px 6px 12px;border-radius:4px;
  box-shadow:0 9px 20px rgba(74,50,32,.16);text-align:left;width:100%;
}
.potret-galeri:nth-child(odd){transform:rotate(-1.1deg)}
.potret-galeri:nth-child(even){transform:rotate(1deg)}
.potret-galeri img{width:100%;aspect-ratio:1/1.12;object-fit:cover;border-radius:2px}
.judul-potret{display:block;font-family:var(--serif);font-style:italic;font-size:.82rem;color:var(--cokelat);padding:7px 4px 0}

/* ---------- Amplop ---------- */
.pengantar-amplop{color:var(--teks);margin-bottom:20px}
.kartu-amplop{
  background:var(--putih-kartu);border:1px solid rgba(176,141,87,.35);border-radius:14px;
  padding:22px;margin:0 auto 16px;max-width:350px;box-shadow:0 10px 24px rgba(74,50,32,.10);
}
.jenis-amplop{font-weight:700;letter-spacing:.1em;text-transform:uppercase;font-size:.78rem;color:var(--karamel)}
.nomor-amplop{font-family:var(--serif);font-weight:600;font-size:1.5rem;color:var(--cokelat-tua);letter-spacing:.05em;margin-top:7px}
.atas-nama{color:var(--teks-redup);font-size:.9rem;margin-top:2px}
.alamat-fisik{color:var(--teks);margin-top:8px;font-size:.95rem}
.tombol-salin{
  min-height:46px;padding:10px 22px;margin-top:14px;border-radius:999px;
  border:1.5px solid var(--cokelat);background:var(--cokelat);color:#fdf8ec;font-weight:700;font-size:.9rem;
}
.umpan-salin{min-height:1.3em;color:var(--cokelat);font-weight:700;font-size:.86rem;margin-top:8px}

/* ---------- RSVP ---------- */
.label-demo{
  background:#fdf3d8;border:1.5px dashed var(--karamel);color:#7c5a1e;border-radius:10px;
  padding:11px 14px;font-size:.85rem;font-weight:700;max-width:350px;margin:0 auto 20px;line-height:1.55;
}
.formulir-rsvp{max-width:350px;margin:0 auto;text-align:left}
.kolom{display:block;margin-bottom:13px}
.kolom span{display:block;font-weight:700;font-size:.85rem;color:var(--cokelat-tua);margin-bottom:5px}
.kolom input,.kolom select,.kolom textarea{
  width:100%;min-height:48px;padding:11px 13px;border:1.5px solid rgba(176,141,87,.55);border-radius:9px;
  background:var(--putih-kartu);font-family:inherit;font-size:1rem;color:var(--teks);
}
.kolom textarea{min-height:84px;resize:vertical}
.tombol-kirim-rsvp{
  width:100%;min-height:50px;border:none;border-radius:999px;background:var(--cokelat);color:#fdf8ec;
  font-weight:700;font-size:1rem;box-shadow:0 8px 18px rgba(138,90,51,.3);
}
.umpan-rsvp{min-height:1.4em;text-align:center;color:var(--cokelat);font-weight:700;font-size:.88rem;margin-top:9px}
.daftar-ucapan{max-width:350px;margin:20px auto 0;text-align:left}
.kartu-ucapan{
  background:var(--putih-kartu);border-left:4px solid var(--karamel);border-radius:8px;
  padding:12px 15px;margin-bottom:10px;box-shadow:0 5px 13px rgba(74,50,32,.08);
}
.kartu-ucapan .nama-ucapan{font-weight:700;color:var(--cokelat-tua)}
.lencana-hadir{
  display:inline-block;background:var(--kraft);color:var(--cokelat-tua);border-radius:999px;
  font-size:.7rem;font-weight:700;padding:2px 9px;margin-left:7px;vertical-align:2px;
}
.kartu-ucapan .isi-ucapan{color:var(--teks);font-size:.93rem;margin-top:3px}
.ucapan-kosong{color:var(--teks-redup);font-style:italic;text-align:center}

/* ---------- Penutup ---------- */
#penutup{padding-bottom:120px}
.foto-penutup{margin:0 auto;max-width:280px}
.foto-penutup img{width:100%;aspect-ratio:4/5;object-fit:cover;object-position:center 25%;border-radius:3px}
.teks-penutup{margin-top:24px}
.salam-penutup{font-family:var(--serif);font-style:italic;color:var(--cokelat);margin-top:20px;font-size:1.02rem}
.kami-yang-berbahagia{color:var(--teks-redup);margin-top:22px;font-size:.92rem}
.nama-penutup{font-family:var(--serif);font-weight:600;font-size:1.7rem;color:var(--cokelat-tua);margin-top:3px}
.kredit-musik{margin-top:34px;font-size:.74rem;color:var(--teks-redup)}
.kredit-foto{margin-top:6px;font-size:.74rem;color:var(--teks-redup)}

/* ---------- Kotak cahaya ---------- */
.kotak-cahaya{
  position:fixed;inset:0;z-index:150;background:rgba(46,32,18,.93);
  display:flex;align-items:center;justify-content:center;
}
.kotak-cahaya[hidden]{display:none}
.kc-isi{max-width:min(88vw,430px);text-align:center}
.kc-isi img{max-width:100%;max-height:74dvh;object-fit:contain;margin:0 auto;border:6px solid var(--putih-kartu);border-bottom-width:22px;border-radius:3px}
.kc-isi figcaption{color:#f3e7cf;font-family:var(--serif);font-style:italic;margin-top:12px;font-size:.98rem}
.kc-tutup,.kc-nav{
  position:absolute;min-width:48px;min-height:48px;border-radius:50%;border:1.5px solid rgba(246,239,227,.5);
  background:rgba(246,239,227,.12);color:#f6efe3;font-size:1.5rem;line-height:1;
  display:flex;align-items:center;justify-content:center;
}
.kc-tutup{top:calc(14px + env(safe-area-inset-top));right:16px}
.kc-sebelum{left:10px;top:50%;transform:translateY(-50%)}
.kc-sesudah{right:10px;top:50%;transform:translateY(-50%)}

/* ---------- Bilah kontrol ---------- */
#bilahKontrol[hidden]{display:none}
#bilahKontrol{
  position:fixed;left:50%;transform:translateX(-50%);
  bottom:calc(14px + env(safe-area-inset-bottom));z-index:120;
  display:flex;gap:6px;background:rgba(74,50,32,.93);
  border:1px solid rgba(246,239,227,.25);border-radius:999px;padding:6px;
  box-shadow:0 12px 28px rgba(46,32,18,.35);
}
.tombol-bilah{
  display:flex;align-items:center;gap:7px;min-width:52px;min-height:48px;
  padding:8px 15px;border-radius:999px;border:none;background:transparent;color:#f6efe3;
  font-weight:700;font-size:.85rem;
}
.tombol-bilah svg{width:19px;height:19px}
.tombol-bilah[aria-pressed="true"]{background:var(--karamel);color:#33240f}
.tombol-bilah:disabled{opacity:.45;cursor:default}
#tombolMusik .ikon-jeda{display:none}
#tombolMusik.memutar .ikon-jeda{display:block}
#tombolMusik.memutar .ikon-putar{display:none}

/* ============================================================
   GERAK KHAS — "diletakkan di meja"
   - Foto (kelas .settle): mulai sedikit lebih besar (1,045) dan
     miring, lalu MENETAP ke posisi akhir seperti baru diletakkan
     tangan di atas meja.
   - Teks: mulai 26px lebih rendah (di bawah tepi meja) lalu
     bergeser naik seperti kartu ucapan yang didorong masuk.
   Hanya aktif bila JS hidup; tanpa JS semua terbaca statis.
   ============================================================ */
html.js .ungkap{opacity:0;transform:translateY(26px)}
html.js .ungkap.settle{transform:scale(1.045) rotate(var(--rot-mulai,1.6deg)) translateY(10px)}
html.js .ungkap.terlihat{
  opacity:1;transform:translateY(0) scale(1) rotate(var(--rot-akhir,0deg));
  transition:opacity var(--durasi-ungkap) cubic-bezier(.3,.7,.3,1),
             transform var(--durasi-ungkap) cubic-bezier(.22,.9,.28,1);
}
/* Kemiringan akhir khas tiap benda di meja */
.foto-bunga{--rot-mulai:2.2deg;--rot-akhir:-.8deg}
.kartu-mempelai{--rot-mulai:-2deg;--rot-akhir:0deg}
.foto-bersama{--rot-mulai:1.8deg;--rot-akhir:.7deg}
.potret-galeri:nth-child(odd){--rot-mulai:-2.4deg;--rot-akhir:-1.1deg}
.potret-galeri:nth-child(even){--rot-mulai:2.4deg;--rot-akhir:1deg}
.foto-penutup{--rot-mulai:-2deg;--rot-akhir:-.7deg}

/* Koreografi sampul saat dibuka: kartu foto sampul terangkat
   perlahan dari meja, sampul lalu memudar — satu gerakan khas. */
#sampul{transition:opacity .8s ease}
#sampul .bingkai-foto-sampul{transition:transform 1.15s cubic-bezier(.25,.8,.3,1)}
#sampul.terbuka{opacity:0;pointer-events:none}
#sampul.terbuka .bingkai-foto-sampul{transform:rotate(.6deg) translateY(-16px) scale(1.03)}
#sampul.hilang{display:none}

/* Layar pendek: foto sampul lebih ramping agar semua muat. */
@media (max-height:720px){
  .bingkai-foto-sampul{height:min(31dvh,215px)}
  .nama-sampul{font-size:clamp(1.62rem,8vw,2.1rem)}
  .kartu-tamu{padding:9px 15px 11px}
}
@media (min-width:700px){
  section{padding-left:34px;padding-right:34px}
}
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{transition-duration:.01ms !important;animation-duration:.01ms !important}
  html.js .ungkap{opacity:1;transform:none}
}
